共用方式為


重新導向輸出

PowerShell 提供數個 Cmdlet,可讓您直接控制數據輸出。 這些 Cmdlet 共用兩個重要特性。

首先,它們通常會將數據轉換成某種形式的文字。 它們這樣做,因為它們會將數據輸出至需要文字輸入的系統元件。 這表示它們必須將物件表示為文字。 因此,文字會在您在PowerShell控制台視窗中看到時格式化。

其次,這些 Cmdlet 會使用 PowerShell 動詞 Out ,因為它們會將資訊從 PowerShell 傳送到其他地方。

主控台輸出

根據預設,PowerShell 會將數據傳送至主視窗,這正是 Cmdlet 的 Out-Host 用途。 Cmdlet 的主要用途 Out-Host 是分頁。 例如,下列命令會使用 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 平臺。

您可以使用 Cmdlet 列印資料 Out-Printer 。 如果您沒有提供印表機名稱,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 的結果可能不是您預期的結果。 若要瞭解其行為,您必須瞭解 Cmdlet 運作的內容 Out-File

在 Window 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 最有用,因為它會顯示在控制臺上。