about_Remote_Output

Letzte Aktualisierung: Mai 2014

Betrifft: Windows PowerShell 2.0, Windows PowerShell 3.0, Windows PowerShell 4.0, Windows PowerShell 5.0

THEMA

about_Remote_Output

KURZE BESCHREIBUNG

Beschreibt das Interpretieren und Formatieren der Ausgabe von Remote-Befehlen.

LANGE BESCHREIBUNG

Die Ausgabe eines Befehls, der auf einem Remote-Computer ausgeführt wurde, sieht vielleicht so aus wie die Ausgabe desselben Befehls, der auf einem lokalen Computer ausgeführt wurde, doch es gibt einige wichtige Unterschiede.

In diesem Thema wird erläutert, wie die Ausgabe von Befehlen, die auf Remote-Computern ausgeführt werden, interpretiert, formatieren und angezeigt wird.

ANZEIGEN DES COMPUTERNAMENS

Wenn Sie das Invoke-Command-Cmdlet verwenden, um einen Befehl auf einem Remote-Computer auszuführen, gibt der Befehl ein Objekt zurück, das den Namen des Computers enthält, die die Daten generiert hat. Der Name des Remote-Computers ist in der PSComputerName-Eigenschaft gespeichert.

Für viele Befehle wird PSComputerName standardmäßig angezeigt. Beispielsweise führt der folgende Befehl einen Get-Culture-Befehl auf zwei Remote-Computern aus: auf „Server01“ und „Server02“. Die Ausgabe, die unten angezeigt wird, enthält die Namen der Remote-Computer, auf denen der Befehl ausgeführt wurde.

        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

Sie können den HideComputerName-Parameter von Invoke-Command verwenden, um die PSComputerName-Eigenschaft auszublenden. Dieser Parameter ist für Befehle vorgesehen, die Daten von nur einem Remote-Computer sammeln.

Der folgende Befehl führt einen Get-Kultur-Befehl auf dem Remote-Computer „Server01“ aus. Er verwendet den HideComputerName-Parameter, um die PSComputerName-Eigenschaft und verwandte Eigenschaften auszublenden.

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

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

Sie können auch die PSComputerName-Eigenschaft anzeigen, falls sie nicht standardmäßig angezeigt wird.

Die folgenden Befehle verwenden z. B. das Format-Table-Cmdlet, um die PSComputerName-Eigenschaft zur Ausgabe eines Get-Date-Remote-Befehls hinzuzufügen.

        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      

ANZEIGEN DER MACHINENAME-EIGENSCHAFT

Mehrere Cmdlets, darunter Get-Process, Get-Service und Get-Event, besitzen einen ComputerName-Parameter, der die Objekte auf einem Remote-Computer abruft. Diese Cmdlets verwenden nicht das Windows PowerShell®-Remoting, weshalb Sie sie sogar auf Computern verwenden können, die nicht für das Remoting in Windows PowerShell konfiguriert wurden.

Die Objekte, die diese Cmdlets zurückgeben, speichern den Namen des Remote-Computers in der MachineName-Eigenschaft. (Diese Objekte besitzen keine PSComputerName-Eigenschaft.)

Beispielsweise ruft dieser Befehl den PowerShell-Prozess auf den Remote-Computern „Server01“ und „Server02“ auf. Die Standardanzeige umfasst nicht die MachineName-Eigenschaft.

        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

Mit dem Format-Table-Cmdlet können Sie die MachineName-Eigenschaft der Process-Objekte anzeigen.

Beispielsweise speichert der folgende Befehl die Prozesse in der Variable $p und verwendet dann einen Pipeline-Operator (|), um die Prozesse in $p an der Format-Table-Befehl zu senden. Der Befehl verwendet den Property-Parameter von Format-Table, um die MachineName-Eigenschaft in die Anzeige aufzunehmen.

        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

Der folgende komplexere Befehl fügt die MachineName-Eigenschaft zur Standardanzeige der Prozesse hinzu. Er verwendet Hash-Tabellen, um die berechneten Eigenschaften anzugeben. Zum Glück müssen Sie den Befehl nicht verstehen, um ihn verwenden zu können.

(Beachten Sie, dass das Backtick-Zeichen [`] das Fortsetzungszeichen ist.)

        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   

DESERIALISIERTE OBJEKTE

Wenn Sie Remote-Befehle ausführen, die Ausgabe generieren, wird die Befehlsausgabe über das Netzwerk wieder zurück zum lokalen Computer übertragen.

Da die meisten aktiven Microsoft .NET Framework-Objekte (z. B. die Objekte, die von Windows PowerShell-Cmdlets zurückgegeben werden) nicht über das Netzwerk über das Netzwerk übertragen werden können, werden die aktiven Objekte „serialisiert“. Anders ausgedrückt: Die aktiven Objekte werden in XML-Darstellungen des Objekts und dessen Eigenschaften konvertiert. Anschließend wird das XML-basierte serialisierte Objekt über das Netzwerk übertragen.

Auf dem lokalen Computer empfängt Windows PowerShell das XML-basierte serialisierte Objekt und „deserialisiert“ es, indem es das XML-basierte-Objekt in eine standardmäßiges .NET Framework-Objekt konvertiert.

Das deserialisierte Objekt ist jedoch kein aktives Objekt. Es ist eine Momentaufnahme des Objekts zu dem Zeitpunkt, zu dem es serialisiert wurde, und es enthält zwar Eigenschaften, jedoch keine Methoden. Sie diese Objekte in Windows PowerShell verwenden und verwalten; Sie können sie z. B. in Pipelines übergeben, ausgewählte Eigenschaften anzeigen oder sie formatieren.

Die meisten deserialisierten Objekte werden durch die Einträge in den Dateien „Types.ps1xml“ oder „Format.ps1xml“ automatisch für die Anzeige formatiert. Allerdings verfügt der lokale Computer möglicherweise nicht über Formatierungsdateien für alle deserialisierten Objekte, die auf einem Remote-Computer generiert wurden. Wenn Objekte nicht formatiert werden, werden alle Eigenschaften jedes Objekts an der Konsole in einer Streaming-Liste angezeigt.

Wenn Objekte nicht automatisch formatiert werden, können Sie die Formatierungs-Cmdlets – wie z. B. Format-Table oder Format-List – verwenden, um ausgewählte Eigenschaften zu formatieren und anzuzeigen. Alternativ können Sie das Out-GridView-Cmdlet verwenden, um die Objekte in einer Tabelle anzuzeigen.

Auch wenn Sie einen Befehl auf einem Remote-Computer ausführen, der Cmdlets verwendet, die sich nicht auf Ihrem lokalen Computer befinden, werden die von dem Befehl zurückgegebenen Objekte möglicherweise nicht ordnungsgemäß formatiert, da Sie auf Ihrem Computer nicht über die Formatierungsdateien für diese Objekte verfügen. Verwenden Sie zum Formatieren von Daten, die von einem anderen Computer samen, die Get-FormatData- und Export-FormatData-Cmdlets.

Einige Objekttypen, z. B. DirectoryInfo-Objekten und GUIDs werden nach Ihrem Empfang wieder zurück in aktive Objekte konvertiert. Diese Objekte bedürfen keiner besonderen Behandlung oder Formatierung.

SORTIEREN DER ERGEBNISSE

Die Reihenfolge der Computernamen im ComputerName-Parameter von Cmdlets bestimmt die Reihenfolge, in der Windows PowerShell eine Verbindung mit den Remote-Computern herstellt. Allerdings werden die Ergebnisse in der Reihenfolge angezeigt, in der der lokale Computer diese empfängt, was möglicherweise eine andere Reihenfolge sein kann.

Um die Reihenfolge der Ergebnisse zu ändern, verwenden Sie das Sort-Object-Cmdlet. Sie können nach der PSComputerName- oder MachineName-Eigenschaft sortieren. Sie können auch nach einer anderen Eigenschaft des Objekts sortieren, sodass die Ergebnisse von verschiedenen Computern kombiniert werden.

SIEHE AUCH

about_Remote

about_Remote_Variables

Format-Table

Get-EventLog

Get-Process

Get-Service

Get-WmiObject

Invoke-Command

Out-GridView

Select-Object