about_Remote_Output
Letzte Aktualisierung: Mai 2014
Betrifft: Windows PowerShell 2.0, Windows PowerShell 3.0, Windows PowerShell 4.0, Windows PowerShell 5.0
about_Remote_Output
Beschreibt das Interpretieren und Formatieren der Ausgabe von Remote-Befehlen.
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.
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
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
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.
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.
about_Remote
about_Remote_Variables
Format-Table
Get-EventLog
Get-Process
Get-Service
Get-WmiObject
Invoke-Command
Out-GridView
Select-Object