about_Remote_Output
Descrizione breve
Viene descritto 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.
In questo argomento viene illustrato come interpretare, formattare e visualizzare l'output dei comandi eseguiti nei computer remoti.
Visualizzazione del nome del computer
Quando si usa il Invoke-Command
cmdlet per eseguire un comando in un computer remoto, il comando restituisce un oggetto che include il nome del computer che ha generato i dati. La proprietà PSComputerName contiene il nome del computer remoto.
Per molti comandi, PSComputerName viene visualizzato per impostazione predefinita. Ad esempio, il comando seguente esegue un Get-Culture
comando in due computer remoti, Server01 e Server02. L'output, visualizzato di seguito, include i nomi dei computer remoti in cui è stato eseguito il comando.
Invoke-Command -ScriptBlock {Get-Culture} -ComputerName Server01, Server02
LCID Name DisplayName PSComputerName
---- ---- ----------- --------------
1033 en-US English (United States) Server01
1033 es-AR Spanish (Argentina) Server02
È possibile utilizzare il parametro HideComputerName di Invoke-Command
per 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.
$invokeCommandSplat = @{
ScriptBlock = {Get-Culture}
ComputerName = 'Server01'
HideComputerName = $true
}
Invoke-Command @invokeCommandSplat
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 Format-Table
cmdlet per aggiungere la proprietà PSComputerName all'output di un comando remoto Get-Date
.
$invokeCommandSplat = @{
ScriptBlock = {Get-Date}
ComputerName = 'Server01', 'Server02'
}
Invoke-Command @invokeCommandSplat |
Format-Table DateTime, PSComputerName -AutoSize
DateTime PSComputerName
-------- --------------
Monday, July 21, 2008 7:16:58 PM Server01
Monday, July 21, 2008 7:16:58 PM Server02
Oggetti deserializzati
Quando si eseguono comandi remoti che generano l'output, l'output del comando viene trasmesso di nuovo attraverso la rete al computer locale.
Poiché gli oggetti .NET attivi non possono essere trasmessi in rete, gli oggetti live vengono serializzati o convertiti in rappresentazioni XML dell'oggetto e delle relative proprietà. PowerShell trasmette l'oggetto serializzato in rete.
Nel computer locale PowerShell riceve l'oggetto serializzato e lo deserializza convertendo l'oggetto serializzato in un oggetto .NET standard.
Tuttavia, l'oggetto deserializzato non è un oggetto attivo. Si tratta di uno snapshot dell'oggetto al momento della serializzazione. L'oggetto deserializzato include proprietà, ma nessun metodo. È possibile usare e gestire questi oggetti in PowerShell, tra cui passarli nelle pipeline, visualizzare le proprietà selezionate e formattarle.
La maggior parte degli oggetti deserializzati viene formattata automaticamente per la visualizzazione in base alle voci nei Types.ps1xml
file o Format.ps1xml
. Tuttavia, il computer locale potrebbe non avere file di formattazione per tutti gli oggetti generati in un computer remoto. Quando gli oggetti non sono formattati, tutte le proprietà di ogni oggetto vengono visualizzate nella console di 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 alternativa, è possibile usare il Out-GridView
cmdlet per visualizzare gli oggetti in una tabella.
Quando si esegue un comando in un computer remoto che usa cmdlet che non sono presenti nel computer locale, gli oggetti restituiti dal comando potrebbero non essere formattati come previsto se non si dispone dei file di formattazione per tali tipi di oggetto nel computer. Usare i Get-FormatData
cmdlet e Export-FormatData
per ottenere dati di formattazione da un altro computer.
Alcuni tipi di oggetto, ad esempio oggetti DirectoryInfo e GUID, vengono convertiti nuovamente in oggetti attivi quando vengono ricevuti. Questi oggetti non richiedono 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 i dati vengono ricevuti dai computer remoti.
È possibile usare il Sort-Object
cmdlet per ordinare i risultati in PSComputerName. Quando si esegue un'altra proprietà dell'oggetto, i risultati di computer diversi vengono interspersi nell'output