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