国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > PowerShell > 正文

淺談PowerShell 捕獲錯誤

2020-05-30 20:20:51
字體:
來源:轉載
供稿:網友

之前的文章我們演示了如何使用 Windows PowerShell 構建相當高級的清單工具。我創建的工具提供了多個有關輸出的選項,這應歸功于外殼的內置功能和將函數應用于對象。

我所創建的函數有一個無可否認的弱點:它不能適度處理可能發生的任何錯誤(例如連接或權限問題)。這正是我要在本期的 Windows PowerShell 專欄中加以解決的,我將介紹 Windows PowerShell 所提供的錯誤處理功能。

設置 Trap

在 Windows PowerShell 中,Trap 關鍵字定義一個錯誤處理程序。當您的腳本中出現異常時,外殼會檢查是否已經定義 Trap,這意味著它必須在發生任何異常之前出現在腳本中。對于本演示,我將整理出一個會產生連接性問題的測試腳本:我將使用 Get-WmiObject 連接網絡中并不存在的計算機名。我的目標是讓錯誤 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…" 消息不顯示。也沒有創建 Errors.txt 文件。也就是說,根本沒有執行我的 Trap。究竟發生了什么?

圖 2 這不是我所希望的輸出!

停止!

關鍵在于了解正常外殼錯誤消息與異常不同(分為非終止錯誤和終止錯誤。終止錯誤會停止管道的執行并產生異常)。只有異常才能被捕獲。出現錯誤時,外殼會檢查其內置的 $ErrorActionPreference 變量以確定自己要執行的操作。該變量默認含有 "Continue" 值,它表示“顯示錯誤消息并繼續”。將此變量更改為 "Stop" 會使其顯示錯誤消息并產生可捕獲的異常。但這意味著您腳本中的任何錯誤也將執行該操作。

更好的方法是只讓您認為可能會引發問題的 cmdlet 使用“停止”行為。可以使用 –ErrorAction(或 –EA)參數(一個所有 cmdlet 都支持的常見參數)完成此操作。圖 3 顯示了此腳本的修訂版本。它將按照預期方式工作,產生的輸出如圖 4 所示。

 使用 -ErrorAction

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 -ea stop$computer = "server2"get-wmiobject win32_operatingsystem -comp $computer -ea stop$computer = "localhost"get-wmiobject win32_operatingsystem -comp $computer -ea stop            
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 阳新县| 西峡县| 金寨县| 武城县| 齐河县| 台中市| 新蔡县| 镇平县| 北流市| 准格尔旗| 长子县| 怀远县| 灌南县| 黄陵县| 贵南县| 栾川县| 邯郸市| 河西区| 屏东县| 贞丰县| 信阳市| 如皋市| 洛浦县| 卫辉市| 喀喇沁旗| 渝中区| 陇川县| 庆安县| 施秉县| 永昌县| 曲周县| 侯马市| 保山市| 西贡区| 全椒县| 车致| 荆州市| 乌恰县| 射洪县| 深水埗区| 乌海市|