about_Remote_Output

DESCRIZIONE BREVE

Descrive come interpretare e formattare l'output dei comandi remoti.

DESCRIZIONE LUNGA

L'output di un comando eseguito in un computer remoto potrebbe essere simile all'output dello stesso comando eseguito in un computer locale, ma esistono alcune differenze significative.

Questo argomento illustra come interpretare, formattare e visualizzare l'output dei comandi eseguiti nei computer remoti.

VISUALIZZAZIONE DEL NOME DEL COMPUTER

Quando si usa il cmdlet Invoke-Command per eseguire un comando in un computer remoto, il comando restituisce un oggetto che include il nome del computer che ha generato i dati. Il nome del computer remoto viene archiviato nella proprietà PSComputerName.

Per molti comandi, PSComputerName viene visualizzato per impostazione predefinita. Ad esempio, il comando seguente esegue un Get-Culture comando su due computer remoti, Server01 e Server02. L'output, visualizzato di seguito, include i nomi dei computer remoti in cui è stato eseguito il comando.

C:\PS> invoke-command -script {get-culture} -comp Server01, Server02

LCID  Name    DisplayName                PSComputerName
----  ----    -----------                --------------
1033  en-US   English (United States)    Server01
1033  es-AR   Spanish (Argentina)        Server02

È possibile usare il parametro HideComputerName Invoke-Command nascondere la proprietà PSComputerName. Questo parametro è progettato per i comandi che raccolgono dati da un solo computer remoto.

Il comando seguente esegue un Get-Culture comando nel computer remoto Server01. Usa il parametro HideComputerName per nascondere la proprietà PSComputerName e le proprietà correlate.

C:\PS> invoke-command -scr {get-culture} -comp Server01 -HideComputerName

LCID             Name             DisplayName
----             ----             -----------
1033             en-US            English (United States)

È anche possibile visualizzare la proprietà PSComputerName se non viene visualizzata per impostazione predefinita.

Ad esempio, i comandi seguenti usano il cmdlet Format-Table per aggiungere la proprietà PSComputerName all'output di un comando Get-Date remoto.

$dates = invoke-command -script {get-date} -computername Server01, Server02
$dates | format-table DateTime, PSComputerName -auto

DateTime                            PSComputerName
--------                            --------------
Monday, July 21, 2008 7:16:58 PM    Server01
Monday, July 21, 2008 7:16:58 PM    Server02

VISUALIZZAZIONE DELLA PROPRIETÀ MACHINENAME

Diversi cmdlet, tra cui Get-Process, Get-Service e Get-EventLog, hanno un parametro ComputerName che ottiene gli oggetti in un computer remoto. Questi cmdlet non usano la comunicazione remota di PowerShell, quindi è possibile usarli anche nei computer non configurati per la comunicazione remota in Windows PowerShell.

Gli oggetti restituiti da questi cmdlet archiviano il nome del computer remoto nella proprietà MachineName. Questi oggetti non hanno una proprietà PSComputerName.

Ad esempio, questo comando ottiene il processo di PowerShell nei computer remoti Server01 e Server02. La visualizzazione predefinita non include la proprietà MachineName.

C:\PS> get-process PowerShell -computername server01, server02

Handles  NPM(K)    PM(K)      WS(K) VM(M)   CPU(s)     Id ProcessName
-------  ------    -----      ----- -----   ------     -- -----------
920      38    97524     114504   575     9.66   2648 PowerShell
194       6    24256      32384   142            3020 PowerShell
352      27    63472      63520   577     3.84   4796 PowerShell

È possibile usare il cmdlet Format-Table per visualizzare la proprietà MachineName degli oggetti processo.

Ad esempio, il comando seguente salva i processi nella variabile $p e quindi usa un operatore pipeline (|) per inviare i processi in $p al comando Format-Table. Il comando usa il parametro Property Format-Table per includere la proprietà MachineName nella visualizzazione.

C:\PS> $p = get-process PowerShell -comp Server01, Server02
C:\PS> $P | format-table -property ID, ProcessName, MachineName -auto

Id ProcessName MachineName
-- ----------- -----------
2648 PowerShell  Server02
3020 PowerShell  Server01
4796 PowerShell  Server02

Il comando più complesso seguente aggiunge la proprietà MachineName alla visualizzazione predefinita del processo. Usa tabelle hash per specificare le proprietà calcolate. Fortunatamente, non è necessario comprenderlo per usarlo.

Si noti che l'antesto ['] è il carattere di continuazione.

C:\PS> $p = get-process PowerShell -comp Server01, Server02

C:\PS> $p | format-table -property Handles, `
@{Label="NPM(K)";Expression={int}}, `
@{Label="PM(K)";Expression={int}}, `
@{Label="WS(K)";Expression={int}}, `
@{Label="VM(M)";Expression={int}}, `
@{Label="CPU(s)";Expression={if ($.CPU -ne $()){ $.CPU.ToString("N")}}}, `
Id, ProcessName, MachineName -auto

Handles NPM(K) PM(K)  WS(K) VM(M) CPU(s)   Id ProcessName MachineName
------- ------ -----  ----- ----- ------   -- ----------- -----------
920     38 97560 114532   576        2648 PowerShell  Server02
192      6 24132  32028   140        3020 PowerShell  Server01
438     26 48436  59132   565        4796 PowerShell  Server02

OGGETTI DESERIALIZZATI

Quando si eseguono comandi remoti che generano output, l'output del comando viene trasmesso attraverso la rete al computer locale.

Poiché la maggior parte degli oggetti live Microsoft .NET Framework(ad esempio gli oggetti restituiti dai cmdlet di PowerShell) non può essere trasmessa in rete, gli oggetti live vengono "serializzati". In altre parole, gli oggetti live vengono convertiti in rappresentazioni XML dell'oggetto e delle relative proprietà. L'oggetto serializzato basato su XML viene quindi trasmesso attraverso la rete.

Nel computer locale PowerShell riceve l'oggetto serializzato basato su XML e lo "deserializza" convertendo l'oggetto basato su XML in un oggetto .NET Framework standard.

Tuttavia, l'oggetto deserializzato non è un oggetto live. Si tratta di uno snapshot dell'oggetto al momento della serializzazione e include proprietà ma nessun metodo. È possibile usare e gestire questi oggetti in PowerShell, ad esempio passandoli nelle pipeline, visualizzando le proprietà selezionate e formattazione.

La maggior parte degli oggetti deserializzati viene formattata automaticamente per essere visualizzata dalle voci Types.ps1xml o Format.ps1xml. Tuttavia, il computer locale potrebbe non avere file di formattazione per tutti gli oggetti deserializzati generati in un computer remoto. Quando gli oggetti non sono formattati, tutte le proprietà di ogni oggetto vengono visualizzate nella console in un elenco di streaming.

Quando gli oggetti non vengono formattati automaticamente, è possibile usare i cmdlet di formattazione, ad esempio Format-Table o Format-List, per formattare e visualizzare le proprietà selezionate. In caso contrario, è possibile usare Out-GridView cmdlet per visualizzare gli oggetti in una tabella.

Inoltre, se si esegue un comando in un computer remoto che usa cmdlet non disponibili nel computer locale, gli oggetti restituiti dal comando potrebbero non essere formattati correttamente perché non sono disponibili i file di formattazione per tali oggetti nel computer. Per ottenere dati di formattazione da un altro computer, usare i cmdlet Get-FormatData e Export-FormatData.

Alcuni tipi di oggetto, ad esempio gli oggetti DirectoryInfo e i GUID, vengono convertiti nuovamente in oggetti live quando vengono ricevuti. Questi oggetti non necessitano di alcuna gestione o formattazione speciale.

ORDINAMENTO DEI RISULTATI

L'ordine dei nomi dei computer nel parametro ComputerName dei cmdlet determina l'ordine in cui PowerShell si connette ai computer remoti. Tuttavia, i risultati vengono visualizzati nell'ordine in cui vengono ricevuti dal computer locale, che potrebbe essere un ordine diverso.

Per modificare l'ordine dei risultati, usare il cmdlet Sort-Object. È possibile ordinare in base alla proprietà PSComputerName o MachineName. È anche possibile ordinare in base a un'altra proprietà dell'oggetto in modo che i risultati di computer diversi siano intersperati.

VEDERE ANCHE

about_Remote

about_Remote_Variables

Format-Table

Get-Process

Get-Service

Invoke-Command

Select-Object