PowerShell命令輸出的控制方法
在編寫生產(chǎn)質(zhì)量函數(shù)的時候,以前有關(guān)Windows PowerShell的文章有2/3都是介紹輸入和錯誤處理的?,F(xiàn)在讓我們來看一下***一個因素:輸出。
腳本和命令的輸出一直繁瑣且不一致,甚至在同一個工具里也是一樣。用戶對于這些天我們一直使用的awk,sed 或grep一類的工具,并不是十分了解,圍繞著輸出的變化, 提供最想得到的數(shù)據(jù)。一個Windows PowerShell主要租戶是為了擁有用戶期望的輸出類型,同時避免解析文本的需要。那么PowerShell是如何處理的呢?答案是肯定的,正如我在先前文章當(dāng)中所解釋的那樣,是什么使Windows PowerShell如此的特別?
在我們了解PowerShell提供用來寫數(shù)據(jù)的cmdlets之前,理解PowerShell是如何處理輸出的很重要。大多數(shù)Shell有一個數(shù)據(jù)流的概念,最常見的是stdout和stderr。PowerShell有一個類似的概念,我們稱它為管道。
在PowerShell里,對于數(shù)據(jù)來說有三個基本的通道:
- Output -- 這就是通常所謂的管道。在那里數(shù)據(jù)將在命令間傳遞。
- Host – 這個被直接寫給控制臺.
- Error --這個被直接寫給控制臺,但是也會儲存在$error變量中。
PowerShell對于寫數(shù)據(jù)有許多cmdlets,主要有兩個:
Write-Host – 這是一個簡單的cmdlet。它通過管道直接寫數(shù)據(jù)并傳給控制臺。如果你不想提供多余管道的信息給用戶,那么它是非常有用的。
Write-Output –它用來把指定數(shù)據(jù)直接寫入管道。我說的‘指定’,是因為如果你不指定任何值的話,那么將會把默認(rèn)值寫入管道。
其它的方式寫cmdlets:
- Write-Debug -- 如果$DebugPreference被設(shè)為‘continue’,則將調(diào)試語句寫入到控制臺。
- Write-Error – 直接寫Error流。
- Write-EventLog – 寫事件日志。
- Write-Progress – 這里你可以為用戶寫一個進(jìn)度欄輸出到屏幕。這通常用在很長的錯誤命令中,以跟蹤其處理過程。
- Write-Verbose – 如果$VerbosePreference 被設(shè)為“continue”,則寫入主機。
- Write-Warning – 使用一個“警告”標(biāo)簽來寫入主機
正如你所了解的,給用戶提供反饋的方式有很多種。成功的關(guān)鍵就是正確的使用你的工具。例如,你打算通過使用write-host,而不是使用write-output來給用戶顯示消息。為什么呢?因為你不想在用戶弄壞你帶有標(biāo)記的輸出數(shù)據(jù),因此按照用戶所期望的目標(biāo)、且保持?jǐn)?shù)據(jù)的完整性是十分重要的。使用沒有多余信息的管道,用戶能夠訪問與預(yù)期屬性一致的數(shù)據(jù),而不需要再解析數(shù)據(jù)。
換句話說,一個沒有多余信息的管道可以讓使用者更加高興。
【編輯推薦】