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-Command
の HideComputerName パラメーターを使用すると、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-Table
や Format-List
などの書式設定コマンドレットを使用して、選択したプロパティの書式設定と表示を行うことができます。 または、 Out-GridView
コマンドレットを使用して、テーブル内のオブジェクトを表示できます。
ローカル コンピューターに存在しないコマンドレットを使用するリモート コンピューターでコマンドを実行すると、コンピューター上にそれらのオブジェクトの種類の書式設定ファイルがない場合、コマンドから返されるオブジェクトが想定どおりに書式設定されない可能性があります。 Get-FormatData
コマンドレットとExport-FormatData
コマンドレットを使用して、別のコンピューターから書式設定データを取得します。
DirectoryInfo、オブジェクト GUID などの一部のオブジェクト型は、受信するとライブ オブジェクトに変換されます。 これらのオブジェクトには、特別な処理や書式設定は必要ありません。
結果の順序付け
コマンドレットの ComputerName パラメーター内のコンピューター名の順序によって、PowerShell がリモート コンピューターに接続する順序が決まります。 ただし、結果はリモート コンピューターからデータを受信した順序で表示されます。
Sort-Object
コマンドレットを使用して、PSComputerName の結果を並べ替えることができます。 オブジェクトの他のプロパティがある場合、異なるコンピューターからの結果は出力にインターリーブされます
関連項目
PowerShell