about_Remote_Output
主題
about_Remote_Output
簡短描述
說明如何解譯及格式化遠端命令的輸出。
完整描述
相同命令在遠端電腦與本機電腦執行的輸出類似,但是仍有幾個顯著的差異。
本主題說明如何解譯、格式化及顯示在遠端電腦執行之命令的輸出。
顯示電腦名稱
使用 Invoke-Command Cmdlet 在遠端電腦執行命令時,該命令會傳回物件,其中包含
產生資料的電腦名稱。這個遠端電腦名稱會儲存在 PSComputerName 屬性中。
許多命令預設都會顯示 PSComputerName。例如,下列命令會在 Server01 和
Server02 兩部遠端電腦執行 Get-Culture 命令。其輸出 (顯示在下方) 包括執行命
令的遠端電腦名稱。
C:\PS> invoke-command -script {get-culture} -comp Server01,
Server02
LCID 名稱 DisplayName PSComputerName
---- ---- ----------- --------------
1033 en-US English (United States) Server01
1033 es-AR Spanish (Argentina) Server02
您可以使用 Invoke-Command 的 HideComputerName 參數來隱藏 PSComputerName
屬性。這個參數是專為只從一部遠端電腦收集資料的命令而設計。
下列命令會在 Server01 遠端電腦執行 Get-Culture 命令,並使用
HideComputerName 參數來隱藏 PSComputerName 屬性和相關屬性。
C:\PS> invoke-command -scr {get-culture} -comp Server01 -HideComputerName
LCID 名稱 DisplayName
---- ---- -----------
1033 en-US English (United States)
如果依預設未顯示 PSComputerName 屬性,您也可以顯示它。
例如,下列命令會使用 Format-Table Cmdlet,將 PSComputerName 屬性新增至遠
端 Get-Date 命令的輸出。
C:\PS> $dates = invoke-command -script {get-date} -computername Server01, Server02
C:\PS> $dates | format-table DateTime, PSComputerName -auto
DateTime PSComputerName
-------- --------------
2008 年 7 月 21 日星期一下午 07:15:58 Server01
2008 年 7 月 21 日星期一下午 07:15:58 Server02
顯示 MACHINENAME 屬性
有幾個 Cmdlet (包括 Get-Process、Get-Service 和 Get-EventLog) 具有
ComputerName 參數,可用來取得遠端電腦上的物件。這些 Cmdlet 並未使用
Windows PowerShell 遠端功能,因此即使是在未設定 Windows PowerShell
遠端功能的電腦上,您都可以使用這些 Cmdlet。
這些 Cmdlet 傳回的物件會將遠端電腦的名稱儲存在 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 Cmdlet 來顯示處理序物件的 MachineName 屬性。
例如,下列命令會將處理序儲存在 $p 變數中,然後使用管線運算子 (|) 將 $p 中
的處理序傳送到 Format-Table 命令。這個命令會使用 Format-Table 的 Property
參數,在輸出顯示中包括 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]($_.NPM/1024)}}, `
@{Label="PM(K)";Expression={[int]($_.PM/1024)}}, `
@{Label="WS(K)";Expression={[int]($_.WS/1024)}}, `
@{Label="VM(M)";Expression={[int]($_.VM/1MB)}}, `
@{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 物件 (例如 Windows PowerShell
Cmdlet 傳回的物件) 都不能透過網路傳輸,因此這些即時物件都會「序列化」。換
句話說,也就是即時物件都會轉換成物件及其屬性的 XML 表示,然後再透過網路來
傳輸這些 XML 序列化物件。
在本機電腦,Windows PowerShell 會接收 XML 序列化物件,並透過將 XML 物件轉換
成標準 .NET Framework 物件的方式,將該物件「還原序列化」。
不過,還原序列化後的物件並不是即時物件。它是物件在序列化當時的快照,而且其
中只包含屬性而不包含方法。您可以在 Windows PowerShell 中使用及管理這些物件,
包括在管線中傳遞物件、顯示選取的屬性,以及格式化物件等。
大部分的還原序列化物件都會依 Types.ps1xml 或 Format.ps1xml 中的項目,自動設
定顯示格式。不過,本機電腦可能沒有格式檔案可供遠端電腦產生的所有還原序列化
物件使用。尚未格式化物件時,各個物件的所有屬性都會出現在主控台的串流清單中。
如果物件沒有自動格式化,您可以使用格式化 Cmdlet (例如 Format-Table 或
Format-List),格式化並顯示所選取的屬性。或者,您也可以使用 Out-GridView
Cmdlet 以表格來顯示物件。
此外,如果您在遠端電腦執行命令,而這個命令使用本機電腦所沒有的 Cmdlet,則
該命令傳回的物件可能會出現格式錯誤,因為本機電腦並沒有格式檔案可供這些物
件使用。若要從其他電腦取得格式化資料,請使用 Get-FormatData 和
Export-FormatData Cmdlet。
有些物件類型 (例如 DirectoryInfo 物件和 GUID) 會在接收完成時轉換回即時物
件。
這些物件並不需經過任何特別處理或格式化。
排序結果
Cmdlet 之 ComputerName 參數中電腦名稱的順序將決定 Windows PowerShell 連
線到遠端電腦的順序。不過,結果則會依照本機電腦的接收順序顯示,而可能有不同
的順序。
若要變更結果的順序,請使用 Sort-Object Cmdlet。您可以依據 PSComputerName
或 MachineName 屬性來排序,也可以依據物件的其他屬性來排序,以分散排列不同電
腦所傳回的結果。
請參閱
about_Remote
Format-Table
Get-EventLog
Get-Process
Get-Service
Get-WmiObject
Invoke-Command
Format-Table
Select-Object