国产探花免费观看_亚洲丰满少妇自慰呻吟_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            
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 万全县| 三门县| 常宁市| 玉田县| 东乌珠穆沁旗| 营山县| 博兴县| 新密市| 砚山县| 张家港市| 鄂温| 大冶市| 达州市| 申扎县| 马边| 石林| 宽甸| 新丰县| 开鲁县| 上思县| 台东县| 嘉峪关市| 类乌齐县| 纳雍县| 巴林右旗| 丰镇市| 昭通市| 安徽省| 安宁市| 东城区| 明溪县| 沙洋县| 合阳县| 西安市| 兴业县| 巴彦淖尔市| 枣强县| 乌鲁木齐市| 内江市| 呼图壁县| 儋州市|