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




Inhaltsverzeichnis