說再見於沉悶、可預測的腳本輸出吧!透過 PowerShell 的 Write-Output
指令,你可以為你的 PowerShell 腳本增添一些創意和個性。
這個強大的 Write-Output
指令是你自動化和系統管理需求的完美夥伴。在這個教程中,你將學會如何發揮 Write-Output
指令的潛力。
準備好了嗎?繼續閱讀,發現 Write-Output
指令的魔力吧!
先備條件
這個教程將進行實際演示。要跟著做,確保你的電腦已安裝了 PowerShell(最好是最新版本)。本教程使用安裝了 PowerShell 7 的 Windows 10。
將物件輸出至控制台
PowerShell 的 Write-Output
指令將物件寫入輸出流,並在控制台中顯示命令或訊息的輸出。但你會驚訝於這個工具如何使輸出更有意義和價值。
代替在控制台顯示輸出,請使用Write-Output
cmdlet自定義輸出。 Write-Output
cmdlet可以輸出任何對象或數據類型,例如字符串、整數、數組,甚至是復雜對象。
執行以下命令將一條Hello, World!消息輸出到控制台。
以下是Write-Output
cmdlet最基本的功能。但是,請繼續閱讀以了解更多中級到高級用法。<>

將對象傳遞給另一個命令
除了在控制台顯示輸出外,您還可以使用Write-Output
命令將對象發送到另一個命令進行進一步處理。如何?通過使用管道運算符(|
)。管道使Write-Output
成為自動化和系統管理任務中方便且多用途的命令。
假設您想要查看哪個進程佔用了大部分資源,比如CPU。
執行以下命令執行以下操作:
- 檢索系統上運行的所有進程的列表(
Get-Process
)。 - 將列表輸出到管道,然後將其傳遞給
Sort-Object
命令。管道運算符允許您將多個命令鏈接在一起,並將一個命令的輸出作為另一個命令的輸入進行處理。 - 按照它們的
CPU
使用情況以-Descending
順序對進程列表進行排序(Sort-Object
)。
請注意,您可以將本教程中的任何命令放入PowerShell腳本並運行它。
排序後的列表顯示在控制台中,如下所示。

以自定義格式輸出對象
您已經看到了Write-Output命令的基本輸出格式,它運行正常。但如果您愿意,您也可以使用自定義格式輸出對象,以增加個人風格。當您希望顯示特定對象屬性或自定義輸出外觀時,自定義格式可能很有用。
要使用自定義格式輸出對象,可以使用Format-Custom
命令與Write-Output
命令,如下所示:
創建自定義輸出格式,然後將Format-Custom命令的輸出通過管道傳遞給Write-Output命令。<>
運行下面的命令,該命令不會產生輸出,但會創建一個對象(哈希表),其中包含三個屬性及其相應的值以進行輸出。
現在,執行以下命令執行以下操作:
- 為你的 hashtable (
$object
) 創建一個自定義格式 (Format-Table
) 用於輸出 (Write-Output
)。Property1
、Property2
和Property3
屬性被設置為列。 - 調整列寬 (
-AutoSize
) 以適應內容。

或者,你可以使用 Format-List
cmdlet 與 Write-Output
將對象輸出為屬性-值對的列表。

將集合對象作為單一實體傳遞
默認情況下,Write-Output
將每個集合元素單獨通過管道發送,這稱為枚舉過程。但你可以通過附加 -NoEnumerate
參數來防止此行為,將整個集合對象作為單一實體傳遞。
為了查看 -NoEnumerate
參數的工作原理,請按照以下步驟執行命令:
運行下面的命令執行以下操作:
- 聲明一個從一到三的
$numbers
數組。
- 計算通過管道傳遞的對象數 (
Measure-Object
)。 - 輸出對象測量(
Write-Output $numbers
)。
不使用NoEnumerate
參數,Measure-Object
返回三個的計數(3),因為$numbers
數組的每個元素都被列舉並單獨通過管道傳遞。

現在,運行以下命令以輸出通過管道傳遞的對象計數。
但由於您添加了-NoEnumerate
參數,Measure-Object
cmdlet將對象視為單個實體,返回一個的計數(1)。

將
Write-Output
命令括在括號中(即(Write-Output 1,2,3)
)將強制發生列舉,而不管-NoEnumerate
參數如何。
創建菜單系統和輸入提示
另一個Write-Output
cmdlet的出色用途是使用PowerShell腳本為用戶提示輸入創建菜單系統。
使用您喜歡的文本/代碼編輯器創建一個.ps1文件,填充下面的代碼,然後保存文件。您可以按您的喜好命名文件,但本教程的選擇是myoutput.ps1。
以下代碼使用循環不斷提示用戶從選項列表中選擇選項,直到用戶選擇退出
選項。
現在,從工作目錄運行腳本(myoutput.ps1
)。
如下所示,當您選擇選項 1、2 或 3 時,顯示與您的選擇相關的消息。但是當您選擇選項 4 時,腳本將終止。

顯示啟動屏幕或歡迎消息
除了列出使用者可以選擇的選項之外,您還可以使用Write-Output
來顯示一個啟動畫面或歡迎訊息。華麗的啟動畫面可以讓您的腳本給人一種專業且精緻的印象。
將您的myoutput.ps1文件中的程式碼替換為下面的程式碼,當您執行腳本時,它會輸出一個啟動畫面(歡迎訊息的橫幅)。
您可以通過修改橫幅的文本和格式來自定義啟動畫面。您可以根據需要添加額外的元素,例如標誌或文本,來定製啟動畫面。
現在,執行腳本,看看您的啟動畫面是什麼樣子。

顯示進度條
執行腳本時,進度指示器可以消除使用者對於腳本是否在運行的焦慮。進度條可用於指示長時間運行的腳本或操作的進度給使用者。幸運的是,使用Write-Output
cmdlet,您可以按照您的喜好製作進度條。
打開您的myoutput.ps1文件,在腳本文件的現有程式碼底部添加下面的程式碼。
下面的程式碼使用while
循環來遍歷幾個步驟。在此示例中,有100個步驟。循環的每次迭代都會計算已完成的步驟的百分比,並使用Write-Output
顯示進度條。
進度條是使用以下運算符的組合創建的:
*
– 重複一個指定次數的字符串$()
– 允許將表達式的輸出包含在字符串中。
然後腳本暫停(Start-Sleep
),以模擬進度,然後再繼續下一步驟。
現在,運行腳本,查看進度條的工作方式。
下面,您可以看到啟動畫面以及進度條。

結論
在本教程中,您已經了解到如何使用 Write-Output
輕鬆輸出對象、數據類型和自定義格式。此外,您還接觸到了使用管道運算符將輸出發送到其他命令進行進一步處理的方法。
無論您是撰寫簡單的訊息輸出還是複雜的自動化任務,Write-Output
都是創建更多資訊豐富且專業的PowerShell腳本不可或缺的工具。
有了這些新的知識,為什麼不將您的輸出寫入不同的檔案類型,如.txt和.xml檔案呢?無論目的是什麼,輸出副本在排除系統或應用程式問題時都非常方便。Write-Output
和Out-File
命令讓您擁有您從未想過的能力。
Source:
https://adamtheautomator.com/powershell-write-output/