about_Remote_Output

Aggiornamento: maggio 2014

Si applica a: Windows PowerShell 2.0, Windows PowerShell 3.0, Windows PowerShell 4.0, Windows PowerShell 5.0

ARGOMENTO

about_Remote_Output

DESCRIZIONE BREVE

In questo articolo viene descritto come interpretare e formattare l'output di comandi remoti.

DESCRIZIONE LUNGA

L'output di un comando che è stato 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 in 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, viene visualizzato PSComputerName per impostazione predefinita. Ad esempio, il seguente comando esegue un comando Get-Culture in due computer remoti, Server01 e Server02. L'output, che viene visualizzato sotto, inclusi 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 di Invoke-Command per nascondere la proprietà PSComputerName. Questo parametro è progettato per i comandi che raccolgono dati da un solo computer remoto.

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

        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.

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

        C:\PS> $dates = invoke-command -script {get-date} -computername Server01, Server02
        C:\PS> $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

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

Gli oggetti che questi cmdlet restituiscono memorizzano il nome del computer remoto nella proprietà MachineName. Questi oggetti non presentano una proprietà PSComputerName.

Ad esempio, questo comando recupera 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

Per visualizzare la proprietà MachineName degli oggetti processo, è possibile usare il cmdlet Format-Table.

Ad esempio, il comando seguente consente di salvare 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 di 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 seguente comando più complesso aggiunge la proprietà MachineName alla visualizzazione del processo predefinito. Usa le tabelle hash per specificare le proprietà calcolate. Fortunatamente, non è necessario comprenderlo per usarlo

(si noti che l'apice inverso [`] è 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]($_.NPM/1024)}}, `
                    @{Label="PM(K)";Expression={[int]($_.PM/1024)}}, `
                    @{Label="WS(K)";Expression={[int]($_.WS/1024)}}, `
                    @{Label="VM(M)";Expression={[int]($_.VM/1MB)}}, `
                    @{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 Microsoft .NET Framework attivi (ad esempio gli oggetti restituiti dai cmdlet di Windows PowerShell) non può essere trasmessa attraverso la rete, gli oggetti attivi vengono "serializzati". In altre parole, gli oggetti attivi vengono convertiti in rappresentazioni XML dell'oggetto e delle relative proprietà. L'oggetto serializzato basato su XML viene quindi trasmesso in rete.

Nel computer locale, Windows 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 attivo. È un'istantanea dell'oggetto nel momento in cui è stato serializzato e include le proprietà ma non i metodi. È possibile usare e gestire tali oggetti in Windows PowerShell, compreso passarli nelle pipeline, visualizzare le proprietà selezionate e formattarli.

La maggior parte degli oggetti deserializzati viene formattata automaticamente per la visualizzazione per voci nei file Types.ps1xml o Format.ps1xml. Tuttavia, il computer locale potrebbe non disporre dei 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, come ad esempio, Format-Table o Format-List per formattare e visualizzare le proprietà selezionate. In alternativa, è possibile usare il cmdlet Out-GridView per visualizzare gli oggetti in una tabella.

Inoltre, se si esegue un comando in un computer remoto che usa i cmdlet non presenti nel computer locale, gli oggetti che restituisce il comando potrebbero non essere è formattati correttamente perché nel computer non sono presenti i file di formattazione per tali oggetti. Per ottenere i 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 GUID, vengono convertiti di nuovo in oggetti attivi quando vengono ricevuti. Questi oggetti non necessitano di una gestione o formattazione speciale.

ORDINAMENTO DEI RISULTATI

L'ordine dei nomi dei computer nel parametro ComputerName dei cmdlet determina l'ordine in cui Windows PowerShell si connette ai computer remoti. Tuttavia, i risultati vengono visualizzati nell'ordine in cui il computer locale li riceve, 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 secondo un'altra proprietà dell'oggetto in modo che i risultati di computer diversi siano frammisti.

VEDERE ANCHE

about_Remote

about_Remote_Variables

Format-Table

Get-EventLog

Get-Process

Get-Service

Get-WmiObject

Invoke-Command

Out-GridView

Select-Object