PowerShell 提供數個 Cmdlet,可讓您直接控制數據輸出。 這些 Cmdlet 共用兩個重要特性。
首先,它們通常會將數據轉換成某種形式的文字。 它們這樣做,因為它們會將數據輸出至需要文字輸入的系統元件。 這表示它們必須將物件表示為文字。 因此,文字會在您在PowerShell控制台視窗中看到時格式化。
其次,這些 Cmdlet 會使用 PowerShell 動詞 Out ,因為它們會將資訊從 PowerShell 傳送到其他地方。
主控台輸出
根據預設,PowerShell 會將數據傳送至主視窗,這正是 Cmdlet 的 Out-Host 用途。
Out-Host Cmdlet 的主要用途是分頁。 例如,下列命令會使用 Out-Host 來分頁 Cmdlet 的 Get-Command 輸出:
Get-Command | Out-Host -Paging
主機視窗顯示位於PowerShell外部。 這一點很重要,因為當數據從 PowerShell 傳出時,它實際上會被移除。 如果您嘗試建立管線以將數據分頁至主機視窗,然後嘗試將它格式化為清單,如下所示:
Get-Process | Out-Host -Paging | Format-List
您可能會預期命令會以清單格式顯示進程資訊的頁面。 相反地,它會顯示預設的表格式清單:
Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id ProcessName
------- ------ ----- ----- ----- ------ -- -----------
101 5 1076 3316 32 0.05 2888 alg
...
618 18 39348 51108 143 211.20 740 explorer
257 8 9752 16828 79 3.02 2560 explorer
...
<SPACE> next page; <CR> next line; Q quit
...
Cmdlet 會將 Out-Host 資料直接傳送至主控台,因此 Format-List 命令永遠不會收到任何需要格式化的內容。
建構此命令的正確方式是將 Cmdlet 放在 Out-Host 管線結尾,如下所示。 這會使處理數據在分頁和顯示之前先被格式化成清單。
Get-Process | Format-List | Out-Host -Paging
Id : 2888
Handles : 101
CPU : 0.046875
Name : alg
...
Id : 740
Handles : 612
CPU : 211.703125
Name : explorer
Id : 2560
Handles : 257
CPU : 3.015625
Name : explorer
...
<SPACE> next page; <CR> next line; Q quit
...
這適用於所有 Out Cmdlet 指令。 Out Cmdlet 應該一律出現在管線結尾。
備註
所有 Out Cmdlet 都會使用主控台視窗生效的格式設定,將輸出轉譯為文字,包括行長度限制。
捨棄輸出
Cmdlet Out-Null 的設計旨在立即捨棄所接收的任何輸入。 這很適合用來捨棄執行命令時所得到的不必要數據。 當您輸入下列命令時,您不會得到任何回應:
Get-Command | Out-Null
Cmdlet Out-Null 不會捨棄錯誤輸出。 例如,如果您輸入下列命令,則會顯示訊息,通知您 PowerShell 無法辨識 Is-NotACommand:
PS> Get-Command Is-NotACommand | Out-Null
Get-Command : 'Is-NotACommand' isn't recognized as a cmdlet, function, operable program, or script file.
At line:1 char:12
+ Get-Command <<<< Is-NotACommand | Out-Null
列印數據
Out-Printer僅適用於 Windows 平臺。
您可以使用 Out-Printer cmdlet 列印資料。 如果您沒有提供印表機名稱,Cmdlet Out-Printer 會使用預設印表機。 您可以藉由指定其顯示名稱,使用任何以 Windows 為基礎的印表機。 不需要任何類型的印表機埠對應,甚至不需要真正的實體印表機。
例如,如果您已安裝 Microsoft Office 檔案映像工具,您可以輸入下列命令將資料傳送至圖像檔:
Get-Command -Name Get-* | Out-Printer -Name 'Microsoft Office Document Image Writer'
儲存數據
您可以使用 Cmdlet 將輸出傳送至檔案,而不是控制台視窗 Out-File 。 以下指令會將程序清單傳送至檔案 C:\temp\processlist.txt:
Get-Process | Out-File -FilePath C:\temp\processlist.txt
如果您習慣於傳統的輸出重定向,那麼使用 Out-File Cmdlet 的結果可能不會如您所預期。 為了理解其行為,您必須知道 Out-File Cmdlet 運作的上下文。
在 Windows PowerShell 5.1 上,Out-File cmdlet 會建立 Unicode 檔案。 某些預期 ASCII 檔案的工具無法正確使用預設輸出格式。 您可以使用 Encoding 參數,將預設輸出格式變更為 ASCII:
Get-Process | Out-File -FilePath C:\temp\processlist.txt -Encoding ascii
Out-File 將檔案內容格式化為主控台輸出。 這會導致輸出遭到截斷,就像在大多數情況下的控制台窗口中一樣。 例如,如果您執行下列命令:
Get-Command | Out-File -FilePath C:\temp\output.txt
輸出看起來像這樣:
CommandType Name Definition
----------- ---- ----------
Cmdlet Add-Content Add-Content [-Path] <String[...
Cmdlet Add-History Add-History [[-InputObject] ...
...
若要取得不強制換行以符合螢幕寬度的輸出,您可以使用 Width 參數來指定線條寬度。 因為 Width 是 32 位整數參數,所以它可以擁有的最大值是2147483647。 輸入下列命令,將線條寬度設定為這個最大值:
Get-Command | Out-File -FilePath C:\temp\output.txt -Width 2147483647
Out-File當您想要儲存輸出時,Cmdlet 最有用,因為它會顯示在控制臺上。