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 wesentliche 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 Invoke-Command
Cmdlet 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. Die PSComputerName-Eigenschaft enthält den Namen des Remotecomputers.
Bei vielen Befehlen wird 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.
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
Sie können den Parameter Invoke-Command
HideComputerName verwenden, um die PSComputerName-Eigenschaft auszublenden. Dieser Parameter wurde für Befehle entwickelt, die Daten von nur einem Remotecomputer sammeln.
Der folgende Befehl führt einen Get-Culture
Befehl auf dem Server01-Remotecomputer aus. Er verwendet den Parameter HideComputerName, um die PSComputerName-Eigenschaft und verwandte Eigenschaften auszublenden.
$invokeCommandSplat = @{
ScriptBlock = {Get-Culture}
ComputerName = 'Server01'
HideComputerName = $true
}
Invoke-Command @invokeCommandSplat
LCID Name DisplayName
---- ---- -----------
1033 en-US English (United States)
Sie können die PSComputerName-Eigenschaft auch anzeigen, wenn sie nicht standardmäßig angezeigt wird.
Die folgenden Befehle verwenden beispielsweise das Format-Table
Cmdlet, um die PSComputerName-Eigenschaft zur Ausgabe eines Remotebefehls Get-Date
hinzuzufügen.
$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
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 live .NET-Objekte nicht über das Netzwerk übertragen werden können, werden die Liveobjekte serialisiert oder in XML-Darstellungen des Objekts und seiner Eigenschaften konvertiert. PowerShell überträgt das serialisierte Objekt über das Netzwerk.
Auf dem lokalen Computer empfängt PowerShell das serialisierte Objekt und deserialisiert es, indem das serialisierte Objekt in ein .NET-Standardobjekt konvertiert wird.
Das deserialisierte Objekt ist jedoch kein Liveobjekt. Es ist eine Momentaufnahme des Objekts zum Zeitpunkt der Serialisierung. Das deserialisierte Objekt enthält Eigenschaften, jedoch keine Methoden. Sie können diese Objekte in PowerShell verwenden und verwalten, einschließlich der Übergabe in Pipelines, das Anzeigen ausgewählter Eigenschaften und das Formatieren dieser Objekte.
Die meisten deserialisierten Objekte werden automatisch für die Anzeige durch Einträge in den Types.ps1xml
Dateien formatiert Format.ps1xml
. Möglicherweise verfügt der lokale Computer jedoch nicht über Formatierungsdateien für alle 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 verwenden, z Format-Table
. B. oder Format-List
, um ausgewählte Eigenschaften zu formatieren und anzuzeigen. Sie können auch das Out-GridView
Cmdlet verwenden, um die Objekte in einer Tabelle anzuzeigen.
Wenn Sie einen Befehl auf einem Remotecomputer ausführen, der Cmdlets verwendet, die auf Ihrem lokalen Computer nicht vorhanden sind, werden die vom Befehl zurückgegebenen Objekte möglicherweise nicht wie erwartet formatiert, wenn Sie nicht über die Formatierungsdateien für diese Objekttypen auf Ihrem Computer verfügen. Sie verwenden die Get-FormatData
Und-Cmdlets Export-FormatData
, um Formatierungsdaten von einem anderen Computer abzurufen.
Einige Objekttypen, z . B. DirectoryInfo-Objekte und GUIDs, werden wieder in Liveobjekte konvertiert, wenn sie empfangen werden. Diese Objekte benötigen keine spezielle Behandlung oder Formatierung.
Sortieren der Ergebnisse
Die Reihenfolge der Computernamen im Parameter "ComputerName " von Cmdlets bestimmt die Reihenfolge, in der PowerShell eine Verbindung mit den Remotecomputern herstellt. Die Ergebnisse werden jedoch in der Reihenfolge angezeigt, in der die Daten von den Remotecomputern empfangen werden.
Sie können das Sort-Object
Cmdlet verwenden, um die Ergebnisse auf dem PSComputerName zu sortieren. Wenn Sie eine andere Eigenschaft des Objekts verwenden, werden die Ergebnisse aus verschiedenen Computern in der Ausgabe interspersiert.