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

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

次のコマンドは、 Get-Culture Server01 リモート コンピューターでコマンドを実行します。 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使用して、PSComputerName プロパティをリモート Get-Date コマンドの出力に追加します。

$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 オブジェクトはネットワーク経由で送信できないため、ライブ オブジェクトは シリアル化されるか 、オブジェクトとそのプロパティの XML 表現に変換されます。 PowerShell は、シリアル化されたオブジェクトをネットワーク経由で送信します。

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

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

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

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

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

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

結果の順序付け

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

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

関連項目