之前的文章我們演示了如何使用 Windows PowerShell 構(gòu)建相當(dāng)高級的清單工具。我創(chuàng)建的工具提供了多個有關(guān)輸出的選項,這應(yīng)歸功于外殼的內(nèi)置功能和將函數(shù)應(yīng)用于對象。
我所創(chuàng)建的函數(shù)有一個無可否認(rèn)的弱點:它不能適度處理可能發(fā)生的任何錯誤(例如連接或權(quán)限問題)。這正是我要在本期的 Windows PowerShell 專欄中加以解決的,我將介紹 Windows PowerShell 所提供的錯誤處理功能。
設(shè)置 Trap
在 Windows PowerShell 中,Trap 關(guān)鍵字定義一個錯誤處理程序。當(dāng)您的腳本中出現(xiàn)異常時,外殼會檢查是否已經(jīng)定義 Trap,這意味著它必須在發(fā)生任何異常之前出現(xiàn)在腳本中。對于本演示,我將整理出一個會產(chǎn)生連接性問題的測試腳本:我將使用 Get-WmiObject 連接網(wǎng)絡(luò)中并不存在的計算機名。我的目標(biāo)是讓錯誤 Trap 將無效計算機名寫出到一個文件中,從而為我提供一個記錄了無效計算機名的文件。我還將加入到兩個有效計算機的連接(我將使用 localhost)。請參見圖 1 中的腳本。
添加 Trap
trap { write-host "Error connecting to $computer" -fore red "$computer" | out-file c:/demo/errors.txt -append continue}$computer = "localhost"get-wmiobject win32_operatingsystem -comp $computer $computer = "server2"get-wmiobject win32_operatingsystem -comp $computer $computer = "localhost"get-wmiobject win32_operatingsystem -comp $computer
此腳本的輸出(如圖 2 所示)與我的期望不符。請注意 "Error connecting to…" 消息不顯示。也沒有創(chuàng)建 Errors.txt 文件。也就是說,根本沒有執(zhí)行我的 Trap。究竟發(fā)生了什么?
圖 2 這不是我所希望的輸出!
停止!
關(guān)鍵在于了解正常外殼錯誤消息與異常不同(分為非終止錯誤和終止錯誤。終止錯誤會停止管道的執(zhí)行并產(chǎn)生異常)。只有異常才能被捕獲。出現(xiàn)錯誤時,外殼會檢查其內(nèi)置的 $ErrorActionPreference 變量以確定自己要執(zhí)行的操作。該變量默認(rèn)含有 "Continue" 值,它表示“顯示錯誤消息并繼續(xù)”。將此變量更改為 "Stop" 會使其顯示錯誤消息并產(chǎn)生可捕獲的異常。但這意味著您腳本中的任何錯誤也將執(zhí)行該操作。
更好的方法是只讓您認(rèn)為可能會引發(fā)問題的 cmdlet 使用“停止”行為。可以使用 主站蜘蛛池模板: 绥宁县| 成武县| 平果县| 连云港市| 普格县| 通辽市| 清丰县| 永吉县| 马山县| 瓮安县| 八宿县| 灵台县| 大厂| 那曲县| 定安县| 仪征市| 临城县| 佛坪县| 浙江省| 湾仔区| 贵定县| 大洼县| 南漳县| 新河县| 法库县| 华蓥市| 日土县| 青州市| 宣恩县| 淮阳县| 邳州市| 太仓市| 东乡族自治县| 论坛| 烟台市| 临夏县| 东丽区| 分宜县| 翁源县| 驻马店市| 道真|