簡短描述
描述如何解譯和格式化遠端命令的輸出。
完整描述
在遠端電腦上執行的命令輸出,可能看起來像在本機計算機上執行相同命令的輸出,但有一些重大差異。
本主題說明如何解譯、格式化及顯示遠端電腦上執行的命令輸出。
顯示電腦名稱
當您使用 Invoke-Command Cmdlet 在遠端電腦上執行命令時,命令會傳回包含產生資料之電腦名稱的物件。
PSComputerName 屬性包含遠端電腦名稱。
對於許多命令,預設會顯示 PSComputerName。 例如,下列命令會在兩部遠端計算機上執行 Get-Culture 命令:Server01 和 Server02。 如下所示的輸出包含命令執行所在的遠端電腦名稱。
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 參數來隱藏 PSComputerName 属性。 此參數是針對只從一部遠端計算機收集數據的命令所設計。
下列命令會在 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 屬性預設未顯示,您也可以顯示 PSComputerName。
例如,下列命令會使用 Format-Table Cmdlet,將 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 中使用和管理這些物件,包括將它們傳入管線、顯示選取的屬性,以及格式化它們。
大部分還原串行化的物件都會自動格式化為 Types.ps1xml 或 Format.ps1xml 檔案中的項目顯示。 不過,本機計算機可能沒有遠端計算機上產生之所有物件的格式化檔案。 當物件未格式化時,每個物件的所有屬性都會出現在串流清單中的控制台中。
當物件未自動格式化時,您可以使用格式化 Cmdlet,例如 Format-Table 或 Format-List,來格式化和顯示選取的屬性。 或者,您可以使用 Out-GridView Cmdlet,在數據表中顯示物件。
當您在遠端電腦上執行命令,該遠端電腦上使用您本機計算機上沒有的 Cmdlet 時,如果您電腦上沒有這些物件類型的格式化檔案,命令傳回的物件可能無法如預期般格式化。 您可以使用 Get-FormatData 和 Export-FormatData Cmdlet 從另一部電腦取得格式化數據。
某些物件類型,例如 DirectoryInfo 物件和 GUID,會在收到物件時重新轉換成實時物件。 這些物件不需要任何特殊的處理或格式設定。
排序結果
Cmdlet ComputerName 參數中的電腦名稱順序會決定 PowerShell 連接到遠端電腦的順序。 不過,結果會以從遠端電腦接收數據的順序顯示。
您可以使用 Sort-Object Cmdlet 來排序 PSComputerName上的結果。 當您物件的任何其他屬性時,來自不同計算機的結果會交錯在輸出中