次の方法で共有


about_Remote_Output

簡単な説明

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

詳細な説明

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

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

コンピューター名の表示

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

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

Invoke-Command -ScriptBlock {Get-Culture} -ComputerName Server01, Server02
LCID  Name    DisplayName                PSComputerName
----  ----    -----------                --------------
1033  en-US   English (United States)    Server01
1033  es-AR   Spanish (Argentina)        Server02

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

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

$invokeCommandSplat = @{
    ScriptBlock = {Get-Culture}
    ComputerName = 'Server01'
    HideComputerName = $true
}
Invoke-Command @invokeCommandSplat
LCID             Name             DisplayName
----             ----             -----------
1033             en-US            English (United States)

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

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

$invokeCommandSplat = @{
    ScriptBlock = {Get-Date}
    ComputerName = 'Server01', 'Server02'
}
Invoke-Command @invokeCommandSplat |
    Format-Table DateTime, PSComputerName -AutoSize
DateTime                            PSComputerName
--------                            --------------
Monday, July 21, 2008 7:16:58 PM    Server01
Monday, July 21, 2008 7:16:58 PM    Server02

逆シリアル化されたオブジェクト

出力を生成するリモート コマンドを実行すると、コマンド出力がネットワーク経由でローカル コンピューターに転送されます。

ライブ .NET オブジェクトはネットワーク経由で送信できないため、ライブ オブジェクトは erialized オブジェクトとそのプロパティの XML 表現に変換されます。 PowerShell は、シリアル化されたオブジェクトをネットワーク経由で送信します。

ローカル コンピューターでは、PowerShell はシリアル化されたオブジェクトを受け取り、 deserializes シリアル化されたオブジェクトを標準の .NET オブジェクトに変換します。

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

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

オブジェクトが自動的に書式設定されない場合は、 Format-TableFormat-Listなどの書式設定コマンドレットを使用して、選択したプロパティの書式設定と表示を行うことができます。 または、 Out-GridView コマンドレットを使用して、テーブル内のオブジェクトを表示できます。

ローカル コンピューターに存在しないコマンドレットを使用するリモート コンピューターでコマンドを実行すると、コンピューター上にそれらのオブジェクトの種類の書式設定ファイルがない場合、コマンドから返されるオブジェクトが想定どおりに書式設定されない可能性があります。 Get-FormatDataコマンドレットとExport-FormatData コマンドレットを使用して、別のコンピューターから書式設定データを取得します。

DirectoryInfo、オブジェクト GUID などの一部のオブジェクト型は、受信するとライブ オブジェクトに変換されます。 これらのオブジェクトには、特別な処理や書式設定は必要ありません。

結果の順序付け

コマンドレットの ComputerName パラメーター内のコンピューター名の順序によって、PowerShell がリモート コンピューターに接続する順序が決まります。 ただし、結果はリモート コンピューターからデータを受信した順序で表示されます。

Sort-Object コマンドレットを使用して、PSComputerName の結果を並べ替えることができます。 オブジェクトの他のプロパティがある場合、異なるコンピューターからの結果は出力にインターリーブされます

関連項目