THEMA about_Remote_Output KURZBESCHREIBUNG Beschreibt, wie die Ausgabe von Remotebefehlen interpretiert und formatiert wird. DETAILBESCHREIBUNG Die Ausgabe eines Befehls, der auf einem Remotecomputer ausgeführt wurde, entspricht im Wesentlichen der Ausgabe, die derselbe Befehl auf dem lokalen Computer ausgeben würde. Es gibt jedoch auch einige wichtige Unterschiede. In diesem Thema wird erklärt, wie die Ausgabe bei der Ausführung von Befehlen auf Remotecomputern interpretiert, formatiert und angezeigt werden kann. ANZEIGEN DES COMPUTERNAMENS Wenn Sie das Cmdlet "Invoke-Command" verwenden, um auf einem Remotecomputer einen Befehl auszuführen, gibt der Befehl ein Objekt zurück, das den Namen des Computers beinhaltet, der die Daten generiert hat. Der Remotecomputername wird in der PSComputerName-Eigenschaft gespeichert. Bei vielen Befehlen wird PSComputerName standardmäßig angezeigt. Mit dem folgenden Befehl wird z. B. auf den beiden Remotecomputern "Server01" und "Server02" der Befehl "Get-Culture" ausgeführt. Die Ausgabe (siehe unten) beinhaltet den Namen des Remotecomputers, auf dem der Befehl ausgeführt wurde. C:\PS> invoke-command -script {get-culture} -comp Server01, Server02 LCID Name DisplayName PSComputerName ---- ---- ----------- -------------- 1033 en-US Englisch (USA) Server01 1033 es-AR Spanisch (Argentinien) Server02 Mit dem HideComputerName-Parameter von "Invoke-Command" können Sie die PSComputerName-Eigenschaft ausblenden. Dieser Parameter ist für Befehle vorgesehen, die von nur einem Remotecomputer Daten erfassen. Mit dem folgenden Befehl wird auf dem Remotecomputer "Server01" der Befehl "Get-Culture" ausgeführt. Dabei werden mit dem HideComputerName-Parameter die PSComputerName-Eigenschaft und zugehörige Eigenschaften ausgeblendet. C:\PS> invoke-command -scr {get-culture} -comp Server01 -HideComputerName LCID Name DisplayName ---- ---- ----------- 1033 en-US Englisch (USA) Sie können die Anzeige der PSComputerName-Eigenschaft manuell festlegen, wenn die Eigenschaft nicht standardmäßig angezeigt wird. Bei den folgenden Befehlen wird mit dem Cmdlet "Format-Table" die PSComputerName-Eigenschaft zur Ausgabe eines remote ausgeführten Befehls "Get-Date" hinzugefügt. C:\PS> $dates = invoke-command -script {get-date} -computername Server01, Server02 C:\PS> $dates | format-table DateTime, PSComputerName -auto DateTime PSComputerName -------- -------------- Montag, 21. Juli 2008, 19:16:58 Server01 Montag, 21. Juli 2008, 19:16:58 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 Windows PowerShell-Remoting, und Sie können sie deshalb auch auf Computern verwenden, die nicht für Remoting in Windows PowerShell konfiguriert sind. Die Objekte, die diese Cmdlets zurückgeben, speichern den Namen des Remotecomputers in der MachineName-Eigenschaft. (Diese Objekte verfügen nicht über eine PSComputerName-Eigenschaft.) Mit dem folgenden Befehl wird der PowerShell-Prozess auf den Remotecomputern "Server01" und "Server02" abgerufen. Die Standardanzeige beinhaltet keine Anzeige der 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. Beispielsweise werden mit dem folgenden Befehl die Prozesse in der Variablen "$p" gespeichert und dann die Prozesse in "$p" mit einem Pipelineoperator (|) an den Befehl "Format-Table" gesendet. Die MachineName-Eigenschaft wird dabei mit dem Property-Parameter von "Format-Table" zur Anzeige hinzugefügt. 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 Im folgenden komplexeren Befehl wird die MachineName-Eigenschaft zur Standardanzeige des Prozesses hinzugefügt. Es werden Hashtabellen verwendet, um berechnete Eigenschaften für die Anzeige anzugeben. Glücklicherweise brauchen Sie den Befehl nicht zu verstehen, um ihn verwenden zu können. (Das Graviszeichen [`] ist das Zeilenfortsetzungszeichen.) 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 Remotebefehle ausführen, die eine Ausgabe generieren, wird die Befehlsausgabe über das Netzwerk zurück zum lokalen Computer gesendet. Da die meisten aktiven Microsoft .NET Framework-Objekte (z. B. die Objekte, die Windows PowerShell-Cmdlets zurückgeben) nicht über das Netzwerk gesendet werden können, werden aktive Objekte "serialisiert". Bei der Serialisierung werden die Liveobjekte in XML-Darstellungen des Objekts und seiner Eigenschaften konvertiert. Anschließend wird das XML-basierte serialisierte Objekt über das Netzwerk gesendet. Auf dem lokalen Computer empfängt Windows PowerShell das XML-basierte serialisierte Objekt und "deserialisiert" es, indem das Objekt in ein .NET Framework-Standardobjekt konvertiert wird. Das deserialisierte Objekt ist jedoch kein Liveobjekt. Es handelt sich um einen Snapshot des Objekts zu dem Zeitpunkt, zu dem es serialisiert wurde, und es beinhaltet alle Eigenschaften, aber keine Methoden. Sie können diese Objekte in Windows PowerShell verwenden und verwalten und sie z. B. in Pipelines übergeben, ausgewählte Eigenschaften anzeigen oder die Objekte formatieren. Bei den meisten deserialisierten Objekten wird automatisch eine Anzeigeformatierung entsprechend den Einträgen in den Dateien "Types.ps1xml" und "Format.ps1xml" durchgeführt. Es kann jedoch vorkommen, dass auf dem lokalen Computer nicht alle benötigten Formatierungsdateien für deserialisierte Objekte vorhanden sind, die auf einem Remotecomputer generiert wurden. Wenn Objekte nicht formatiert werden, werden alle Eigenschaften jedes Objekts in der Konsole als einfache Liste ausgegeben. Wenn Objekte nicht automatisch formatiert werden, können Sie Formatierung-Cmdlets verwenden, z. B. "Format-Table" oder "Format-List", 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 auf dem lokalen Computer nicht vorhanden sind, werden die vom Befehl zurückgegebenen Objekte eventuell nicht ordnungsgemäß formatiert, da die benötigten Formatierungsda- teien für die Objekte auf dem Computer nicht verfügbar sind. Um die erforderlichen Formatierungsdaten von einem anderen Computer abzurufen, verwenden Sie das Cmdlet "Get-FormatData" oder "Export-FormatData". Einige Objekttypen, z. B. DirectoryInfo-Objekte und GUIDs, werden beim Empfang zurück in Liveobjekte konvertiert. Bei diesen Objekten ist keine spezielle Behandlung oder Formatierung notwendig. SORTIEREN DER ERGEBNISSE Die Reihenfolge der Computernamen im ComputerName-Parameter von Cmdlets bestimmt die Reihenfolge, in der Windows PowerShell Verbindungen mit den Remotecomputern herstellt. Die Ergebnisse werden in der Reihenfolge angezeigt, in der der lokale Computer sie empfängt. Die Reihenfolge kann dabei von der Reihenfolge im Aufruf abweichen. Um die Reihenfolge der Ergebnisse zu ändern, verwenden Sie das Cmdlet "Sort-Object". Sie können nach der PSComputerName-Eigen- schaft oder nach der MachineName-Eigenschaft sortieren. Sie können auch nach einer anderen Objekteigenschaft sortieren, sodass die Ergebnisse von verschiedenen Computern gemischt werden. SIEHE AUCH about_Remote Format-Table Get-EventLog Get-Process Get-Service Get-WmiObject Invoke-Command Out-GridView Select-Object