トピック
    about_Remote_Output

簡易説明
    リモート コマンドの出力を解釈および書式設定する方法について説明します。

詳細説明
    リモート コンピューター上で実行されたコマンドの出力はローカル コンピューターで実行された
    同じコマンドの出力と同じように見えますが、いくつかの大きな違いがあります。

    このトピックでは、リモート コンピューター上で実行されたコマンドの出力を解釈、書式設定、お
    よび表示する方法について説明します。

                    
 コンピューター名の表示

    Invoke-Command コマンドレットを使用してリモート コンピューター上でコマンドを実行する
    と、データを生成したコンピューターの名前を含むオブジェクトが返されます。このリモート コン
    ピューター名は、PSComputerName プロパティに格納されます。

    多くのコマンドでは、PSComputerName が既定で表示されます。たとえば、次のコマンドは、
    Server01 と Server02 の 2 台のリモート コンピューター上で Get-Culture コマンドを実行し
    ます。次に示す出力には、コマンドが実行されたリモート コンピューターの名前が含まれていま
    す。

        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

    
    Invoke-Command の HideComputerName パラメーターを使用すると、PSComputerName プロパティ
    を非表示にすることができます。このパラメーターは、1 台のリモート コンピューターからのみデ
    ータを収集するコマンド向けに設計されています。

    次のコマンドは、Get-Culture コマンドを Server01 リモート コンピューター上で実行します。こ
    こでは、HideComputerName パラメーターを使用して、PSComputerName プロパティおよび関連プロ
    パティを非表示にしています。



        C:\PS> invoke-command -scr {get-culture} -comp Server01 -HideComputerName

        LCID             Name             DisplayName
        ----             ----             -----------
        1033             en-US            English (United States)



     PSComputerName プロパティは、既定で表示されない場合でも、表示することができます。

     たとえば、次のコマンドは、Format-Table コマンドレットを使用して、リモート Get-Date 
     コマンドの出力に PSComputerName プロパティを追加します。

        C:\PS> $dates = invoke-command -script {get-date} -computername Server01, Server02
        C:\PS> $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      



 MachineName プロパティの表示

    Get-Process、Get-Service、Get-EventLog などのいくつかのコマンドレットには、リモー
    ト コンピューター上のオブジェクトを取得する ComputerName パラメーターが用意されています。
    これらのコマンドレットは Windows PowerShell のリモート処理を使用しないので、Windows 
    PowerShell でリモート処理用に構成されていないコンピューター上でもこれらのコマンドレットを使
    用できます。

    これらのコマンドレットによって返されるオブジェクトでは、リモート コンピューターの名前が 
    MachineName プロパティに格納されます (これらのオブジェクトには PSComputerName プロパティが
    ありません)。

    たとえば、次のコマンドは、Server01 および Server02 のリモート コンピューター上で 
    PowerShell プロセスを取得します。既定の表示には、MachineName プロパティは含まれていま
    せん。

        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

    Format-Table コマンドレットを使用して、プロセス オブジェクトの MachineName プロパティを
    表示できます。

    たとえば、次のコマンドは、プロセスを $p 変数に格納した後、パイプライン演算子 (|) を使用して 
    $p 内のプロセスを Format-Table コマンドに渡します。次のコマンドは、Format-Table の 
    Property パラメーターを使用して、MachineName プロパティを表示します。


        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

    
    次に示すより複雑なコマンドは、プロセスの既定の表示に MachineName プロパティを追加しま
    す。ここでは、ハッシュ テーブルを使用して集計プロパティを指定しています。使用にあたってこ
    れを理解する必要はありません。
    バッククォート文字 (`) は行連結文字です。

      
        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   

 逆シリアル化されたオブジェクト
    出力を生成するリモート コマンドを実行すると、コマンド出力はネットワークを介してローカル 
    コンピューターに返されます。

    このとき、ほとんどのライブ Microsoft .NET Framework オブジェクト (Windows PowerShell コマンド
    レットから返されるオブジェクトなど) はネットワーク上で転送できないので、"シリアル化" されま
    す。言い換えると、ライブ オブジェクトは、オブジェクトおよびそのプロパティの XML 表記に変
    換されます。次に、この XML ベースでシリアル化されたオブジェクトがネットワーク上で転送さ
    れます。

    ローカル コンピューター上で、Windows PowerShell は XML ベースでシリアル化されたオブ
    ジェクトを受け取り、これを "逆シリアル化" します。つまり、XML ベースのオブジェクトを標
    準 .NET Framework オブジェクトに変換します。

    ただし、逆シリアル化されたオブジェクトはライブ オブジェクトではありません。これは、オブ
    ジェクトがシリアル化された時点のスナップショットです。このオブジェクトには、プロパティが
    含まれますが、メソッドは含まれません。Windows PowerShell では、パイプライン処理、選択した
    プロパティの表示、書式設定を含め、これらのオブジェクトを使用および管理できます。

    ほとんどの場合、逆シリアル化されたオブジェクトは、Types.ps1xml または Format.ps1xml 
    ファイルのエントリによって、自動的に表示用に書式設定されます。ただし、ローカル コンピュ
    ーター上には、リモート コンピューター上で生成された後に逆シリアル化されたオブジェクトのす
    べてに対応する書式設定ファイルがない場合もあります。オブジェクトが書式設定されない場合、
    それぞれのオブジェクトのすべてのプロパティがストリーミング リスト形式でコンソールに表示さ
    れます。

    オブジェクトが自動的に書式設定されない場合は、書式設定コマンドレット (Format-Table また
    は Format-List) を使用することで、選択したプロパティを書式設定および表示できます。また、
    Out-GridView コマンドレットを使用して、オブジェクトを表形式で表示することもできます。

    さらに、ローカル コンピューター上にないコマンドレットを使用するコマンドをリモート コンピ
    ューター上で実行した場合、ローカル コンピューター上にこれらのオブジェクトのための書式設定
    ファイルが存在しないので、コマンドから返されるオブジェクトが適切に書式設定されない場合が
    あります。他のコンピューターから書式設定データを取得するには、Get-FormatData コマンドレ
    ットと Export-FormatData コマンドレットを使用します。

    一部の種類のオブジェクト (DirectoryInfo オブジェクト、GUID など) は、受信時に元のライブ オブ
    ジェクトに変換されます。これらのオブジェクトに対しては、特別な処理や書式設定は必要ありま
    せん。



 結果の並べ替え
    Windows PowerShell がリモート コンピューターに接続する順序は、コマンドレットの 
    ComputerName パラメーターに含まれるコンピューター名の順序によって決まります。ただし、結果
    は、ローカル コンピューターが結果を受け取った順に表示されるので、順序が変わることがありま
    す。

    結果の順序を変更するには、Sort-Object コマンドレットを使用します。PSComputerName プロ
    パティまたは MachineName プロパティに基づいて並べ替えを行うことができます。また、オブジェ
    クトの他のプロパティに基づいて並べ替えを行うこともできます。その場合、結果はコンピュータ
    ーごとの表示にはなりません。



関連項目
    about_Remote
    Format-Table
    Get-EventLog
    Get-Process
    Get-Service
    Get-WmiObject
    Invoke-Command
    Out-GridView
    Select-Object




目次