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