about_Remote_Output
簡単な説明
リモート コマンドの出力を解釈および書式設定する方法について説明します。
長い説明
リモート コンピューターで実行されたコマンドの出力は、ローカル コンピューターで実行されるのと同じコマンドの出力のように見える場合がありますが、いくつかの大きな違いがあります。
このトピックでは、リモート コンピューターで実行されるコマンドの出力を解釈、書式設定、および表示する方法について説明します。
コンピューター名の表示
Invoke-Command コマンドレットを使用してリモート コンピューターでコマンドを実行すると、データを生成したコンピューターの名前を含む オブジェクトが返されます。 リモート コンピューター名は PSComputerName プロパティに格納されます。
多くのコマンドでは、PSComputerName が既定で表示されます。 たとえば、次のコマンドは、Server01 Get-Culture Server02 という 2 つのリモート コンピューターでコマンドを実行します。 次に示す出力には、コマンドが実行されたリモート コンピューターの名前が含まれます。
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
PSComputerName プロパティを非表示にInvoke-Commandの HideComputerName パラメーターを使用できます。 このパラメーターは、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します。
$dates = invoke-command -script {get-date} -computername Server01, Server02
$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 パラメーターがあります。 これらのコマンドレットは 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 コマンドに送信します。 コマンドは、 の Property パラメーターを使用Format-Table 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}}, `
@{Label="PM(K)";Expression={int}}, `
@{Label="WS(K)";Expression={int}}, `
@{Label="VM(M)";Expression={int}}, `
@{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オブジェクト (PowerShell コマンドレットから返されるオブジェクトなど) をネットワーク経由で送信できないので、ライブ オブジェクトは "シリアル化" されます。 つまり、ライブ オブジェクトは、 オブジェクトとそのプロパティの XML 表現に変換されます。 次に、XML ベースのシリアル化されたオブジェクトがネットワーク経由で送信されます。
ローカル コンピューターでは、PowerShell は XML ベースのシリアル化されたオブジェクトを受け取り、XML ベースのオブジェクトを標準の .NET Framework オブジェクトに変換することで、このオブジェクトを "逆シリアル化" します。
ただし、逆シリアル化されたオブジェクトはライブ オブジェクトではありません。 これは、シリアル化された時点のオブジェクトのスナップショットであり、プロパティは含まれますが、メソッドは含まれます。 これらのオブジェクトは、パイプラインへの渡し、選択したプロパティの表示、書式設定など、PowerShell で使用および管理できます。
ほとんどの逆シリアル化されたオブジェクトは、Types.ps1xml ファイルまたは Format.ps1xml ファイル内のエントリによって表示するために自動的に書式設定されます。 ただし、リモート コンピューターで生成された逆シリアル化されたオブジェクトのすべてについて、ローカル コンピューターにフォーマット ファイルが含されていない場合があります。 オブジェクトが書式設定されていない場合、各オブジェクトのすべてのプロパティがストリーミング リストのコンソールに表示されます。
オブジェクトが自動的に書式設定されない場合は、Format-Table や Format-List などの書式設定コマンドレットを使用して、選択したプロパティの書式設定と表示を行います。 または、Out-GridView コマンドレットを使用して、テーブルにオブジェクトを表示できます。
また、ローカル コンピューターにはないコマンドレットを使用するリモート コンピューターでコマンドを実行する場合、コンピューター上のこれらのオブジェクトの書式設定ファイルを持たないので、コマンドから返されるオブジェクトが正しく書式設定されていない可能性があります。 別のコンピューターから書式設定データを取得するには、Get-FormatDataコマンドレットExport-FormatDataします。
DirectoryInfo オブジェクトや GUID などの一部のオブジェクト型は、受信時にライブ オブジェクトに変換されます。 これらのオブジェクトは、特別な処理や書式設定を必要としません。
結果の順序付け
コマンドレットの ComputerName パラメーター内のコンピューター名の順序は、PowerShell がリモート コンピューターに接続する順序を決定します。 ただし、結果はローカル コンピューターが受信する順序で表示されます。これは別の順序である可能性があります。
結果の順序を変更するには、次のコマンドレットSort-Objectします。 PSComputerName プロパティまたは MachineName プロパティで並べ替えを行います。 オブジェクトの別のプロパティで並べ替え、異なるコンピューターの結果が相互に存在することもできます。
関連項目
フィードバック
フィードバックの送信と表示