Freigeben über


about_Remote_Output

Kurze Beschreibung

Beschreibt, wie die Ausgabe von Remotebefehlen interpretiert und formatiert wird.

Lange Beschreibung

Die Ausgabe eines Befehls, der auf einem Remotecomputer ausgeführt wurde, sieht möglicherweise wie die Ausgabe desselben Befehls aus, der auf einem lokalen Computer ausgeführt wird, aber es gibt einige wichtige Unterschiede.

In diesem Thema wird erläutert, wie Sie die Ausgabe von Befehlen interpretieren, formatieren und anzeigen, die auf Remotecomputern ausgeführt werden.

ANZEIGEN DES COMPUTERNAMENS

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

Bei vielen Befehlen wird der PSComputerName standardmäßig angezeigt. Der folgende Befehl führt beispielsweise einen Get-Culture-Befehl auf zwei Remotecomputern aus: Server01 und Server02. Die unten angezeigte Ausgabe enthält die Namen der Remotecomputer, 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 konzipiert, die Daten nur von einem Remotecomputer sammeln.

Mit dem folgenden Befehl wird ein Get-Culture-Befehl auf dem Remotecomputer Server01 ausgeführt. Es verwendet den HideComputerName-Parameter, um die PSComputerName-Eigenschaft und die zugehörigen 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, wenn sie nicht standardmäßig angezeigt wird.

Die folgenden Befehle verwenden beispielsweise das Cmdlet Format-Table, um die PSComputerName-Eigenschaft der Ausgabe eines Remotebefehls Get-Date hinzuzufügen.

$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

ANZEIGEN DER MACHINENAME-EIGENSCHAFT

Mehrere Cmdlets, einschließlich Get-Process, Get-Service und Get-EventLog, verfügen über einen ComputerName-Parameter, der die Objekte auf einem Remotecomputer abruft. Diese Cmdlets verwenden kein PowerShell-Remoting, sodass Sie sie auch auf Computern verwenden können, die nicht für Remoting in Windows PowerShell konfiguriert sind.

Die Von diesen Cmdlets zurückgegebenen Objekte speichern den Namen des Remotecomputers in der MachineName-Eigenschaft. (Diese Objekte verfügen nicht über eine PSComputerName-Eigenschaft.)

Mit diesem Befehl wird beispielsweise der PowerShell-Prozess auf den Remotecomputern Server01 und Server02 abgerufen. Die Standardanzeige enthält 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

Sie können das Cmdlet Format-Table verwenden, um die MachineName-Eigenschaft der Prozessobjekte anzuzeigen.

Der folgende Befehl speichert beispielsweise die Prozesse in der variablen $p und verwendet dann einen Pipelineoperator (|), um die Prozesse in $p an den Befehl Format-Table zu senden. Der Befehl verwendet den Property-Parameter von Format-Table, um die MachineName-Eigenschaft in die Anzeige einzuschließen.

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 der Standardprozessanzeige die MachineName-Eigenschaft hinzu. Es verwendet Hashtabellen, um berechnete Eigenschaften anzugeben. Glücklicherweise müssen Sie es nicht verstehen, um es zu verwenden.

(Beachten Sie, dass das Backtick ['] das Fortsetzungszeichen ist.)

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

DESERIALISIERTE OBJEKTE

Wenn Sie Remotebefehle ausführen, die eine Ausgabe generieren, wird die Befehlsausgabe über das Netzwerk zurück an den lokalen Computer übertragen.

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

Auf dem lokalen Computer empfängt PowerShell das XML-basierte serialisierte Objekt und "deserialisiert" es, indem das XML-basierte Objekt in ein Standardobjekt .NET Framework konvertiert wird.

Das deserialisierte Objekt ist jedoch kein Liveobjekt. Es handelt sich um eine Momentaufnahme des Objekts zum Zeitpunkt der Serialisierung und enthält Eigenschaften, aber keine Methoden. Sie können diese Objekte in PowerShell verwenden und verwalten, einschließlich der Übergabe in Pipelines, dem Anzeigen ausgewählter Eigenschaften und der Formatierung.

Die meisten deserialisierten Objekte werden automatisch für die Anzeige durch Einträge in den Dateien Types.ps1xml oder Format.ps1xml formatiert. Der lokale Computer verfügt jedoch möglicherweise nicht über Formatierungsdateien für alle deserialisierten Objekte, die auf einem Remotecomputer generiert wurden. Wenn Objekte nicht formatiert sind, werden alle Eigenschaften jedes Objekts in der Konsole in einer Streamingliste angezeigt.

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

Wenn Sie einen Befehl auf einem Remotecomputer ausführen, der Cmdlets verwendet, die sie nicht auf Ihrem lokalen Computer verwenden, werden die vom Befehl zurückgegebenen Objekte möglicherweise nicht ordnungsgemäß formatiert, da sie nicht über die Formatierungsdateien für diese Objekte auf Dem Computer verfügen. Verwenden Sie zum Abrufen von Formatierungsdaten von einem anderen Computer die Cmdlets Get-FormatData und Export-FormatData.

Einige Objekttypen, z. B. DirectoryInfo-Objekte und GUIDs, werden beim Empfang wieder in Liveobjekte konvertiert. Diese Objekte benötigen keine spezielle Behandlung oder Formatierung.

SORTIEREN DER ERGEBNISSE

Die Reihenfolge der Computernamen im ComputerName-Parameter von Cmdlets bestimmt die Reihenfolge, in der PowerShell eine Verbindung mit den Remotecomputern herstellt. Die Ergebnisse werden jedoch in der Reihenfolge angezeigt, in der sie vom lokalen Computer empfangen werden. Dies kann eine andere Reihenfolge sein.

Verwenden Sie das Cmdlet Sort-Object, um die Reihenfolge der Ergebnisse zu ändern. 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 intersperiert werden.

Siehe auch