about_Remote_Output

適用対象: Windows PowerShell 2.0, Windows PowerShell 3.0, Windows PowerShell 4.0

トピック

about_Remote_Output

概要

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

詳細説明

リモート コンピューターで実行されたコマンドの出力は、ローカル コンピューターで実行された同じコマンドの出力と似ている場合がありますが、いくつかの重要な違いがあります。

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

コンピューター名の表示

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

多くのコマンドで、既定では、PSComputerName が表示されます。たとえば、次のコマンドは、2 台のリモート コンピューター Server01 および Server02 で 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 台のリモート コンピューターからのみデータを収集するコマンド向けに設計されています。

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

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

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

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

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

        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 など、いくつかのオブジェクトの種類は、受信されるとライブ オブジェクトに変換されます。これらのオブジェクトには、特別な処理や書式設定は不要です。

結果の順序付け

コマンドレットの ComputerName パラメーターに含まれるコンピューター名の順序は、Windows PowerShell がリモート コンピューターに接続する順序を決定します。ただし、結果はローカル コンピューターがそれらを受け取る順序で表示され、順序が異なる可能性があります。

結果の順序を変更するには、Sort-Object コマンドレットを使用します。PSComputerName または MachineName プロパティで並べ替えることができます。別のコンピューターからの結果を挿入できるように、オブジェクトの別のプロパティで並べ替えることもできます。

関連項目

about_Remote に関するページ

about_Remote_Variables

Format-Table

Get-EventLog

Get-Process

Get-Service

Get-WmiObject

Invoke-Command

Out-GridView

Select-Object