亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發(fā) > PowerShell > 正文

淺談PowerShell 捕獲錯誤

2020-03-26 19:08:00
字體:
供稿:網(wǎng)友

之前的文章我們演示了如何使用 Windows PowerShell 構(gòu)建相當高級的清單工具。我創(chuàng)建的工具提供了多個有關(guān)輸出的選項,這應歸功于外殼的內(nèi)置功能和將函數(shù)應用于對象。

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

設(shè)置 Trap

在 Windows PowerShell 中,Trap 關(guān)鍵字定義一個錯誤處理程序。當您的腳本中出現(xiàn)異常時,外殼會檢查是否已經(jīng)定義 Trap,這意味著它必須在發(fā)生任何異常之前出現(xiàn)在腳本中。對于本演示,我將整理出一個會產(chǎn)生連接性問題的測試腳本:我將使用 Get-WmiObject 連接網(wǎng)絡中并不存在的計算機名。我的目標是讓錯誤 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ā)生了什么?

PowerShell,捕獲錯誤

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

停止!

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

更好的方法是只讓您認為可能會引發(fā)問題的 cmdlet 使用“停止”行為??梢允褂?–ErrorAction(或 –EA)參數(shù)(一個所有 cmdlet 都支持的常見參數(shù))完成此操作。圖 3 顯示了此腳本的修訂版本。它將按照預期方式工作,產(chǎn)生的輸出如圖 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

PowerShell,捕獲錯誤

圖 4 使用 –ErrorAction 參數(shù)時我獲得了更多有用的結(jié)果

在 Trap 末尾使用 Continue 指示外殼繼續(xù)執(zhí)行產(chǎn)生異常的代碼行之后的一行。還可以使用關(guān)鍵字 Break(我將在稍后加以討論)。另請注意,$computer 變量(在腳本中定義)在 Trap 內(nèi)仍然有效。這是因為 Trap 是腳本本身的子作用域,即 Trap 可以查看腳本內(nèi)的所有變量(稍后我也將介紹此方面的更多相關(guān)信息)。

在作用域中完成所有操作

Windows PowerShell 中錯誤捕獲的一個尤為棘手的方面是作用域的使用。外殼本身代表全局作用域,它包含外殼內(nèi)部發(fā)生的所有事件。如果您運行某個腳本,它會獲取自己的腳本作用域。如果您定義某個函數(shù),該函數(shù)的內(nèi)部便是其自己的專用作用域等等。這將創(chuàng)建一種父/子類型的層次結(jié)構(gòu)。

發(fā)生異常時,外殼會在當前作用域內(nèi)查找 Trap。這意味著某個函數(shù)內(nèi)的異常將在該函數(shù)內(nèi)部查找 Trap。如果外殼發(fā)現(xiàn)了 Trap,就會執(zhí)行該 Trap。如果 Trap 以 Continue 結(jié)尾,外殼將繼續(xù)執(zhí)行引發(fā)異常的代碼行后面的一行,但仍在同一作用域中。下面借助一小部分偽代碼來說明這一點:

Trap { # Log error to a file Continue}Get-WmiObject Win32_Service –comp "Server2" –ea "Stop"Get-Process

如果異常發(fā)生在第 5 行,則將執(zhí)行第 1 行中的 Trap。Trap 以 Continue 結(jié)尾,因此將繼續(xù)執(zhí)行第 6 行。

現(xiàn)在考慮下面這個略有些不同的作用域示例:

 Trap {  # Log error to a file  Continue }  Function MyFunction {  Get-WmiObject Win32_Service –comp "Server2" –ea "Stop"  Get-Process }  MyFunction Write-Host "Testing!"

如果錯誤發(fā)生在第 7 行,則外殼會在函數(shù)的作用域內(nèi)查找 Trap。如果沒有找到,那么外殼將退出函數(shù)的作用域,繼續(xù)在父作用域內(nèi)查找 Trap。因為那里有 Trap,所以它將執(zhí)行第 1 行。在本例中,代碼是 Continue,所以將繼續(xù)執(zhí)行同一作用域中異常之后的代碼行,即第 12 行,而不是第 8 行。換言之,外殼在退出之后不會再重新進入該函數(shù)。

現(xiàn)在將該行為與以下示例做一下對比:

Function MyFunction { Trap {  # Log error to a file  Continue } Get-WmiObject Win32_Service –comp "Server2" –ea "Stop" Get-Process} MyFunctionWrite-Host "Testing!"

在本例中,第 6 行中的錯誤將執(zhí)行第 2 行中的 Trap,并保持在函數(shù)的作用域內(nèi)。Continue 關(guān)鍵字將保持在該作用域內(nèi),繼續(xù)執(zhí)行第 7 行。如果您將 Trap 放入預期會發(fā)生錯誤的作用域內(nèi),好處是您仍保持在作用域中并可以在其中繼續(xù)執(zhí)行。但如果此方法對于您的情況不適用應該怎么辦呢?

該工具非常適合管理配置基線。Compare-Object(或 Diff)旨在對比兩組對象。默認情況下,它將比較每個對象的所有屬性,并由該命令輸出所有不同之處。所以設(shè)想您已將某個服務器的服務完全按照您所需的方式進行了配置。只需運行下面的內(nèi)容就能創(chuàng)建基線:

Get-Service | Export-CliXML c:/baseline.xml

幾乎所有對象都可以輸送到 Export-CliXML,它會將對象轉(zhuǎn)換為 XML 文件。而后,您可以運行同一命令(如 Get-Service)并將結(jié)果與保存的 XML 進行比較。命令如下:

Compare-Object (Get-Service) (Import-CliXML  c:/baseline.xml) –property name

添加 –property 參數(shù)將強制比較僅查看該屬性,而非整個對象。在本例中,您將得到由不同于原始基線的所有服務名稱組成的列表,讓您了解在創(chuàng)建后基線是否添加或刪除了任何服務。

斷開

我在前面提到過 Break 關(guān)鍵字。圖 5 顯示了一個如何運用 Break 關(guān)鍵字的示例。

使用 Break 關(guān)鍵字

 Trap {  # Handle the error  Continue }  Function MyFunction {  Trap {   # Log error to a file   If ($condition) {    Continue   } Else {    Break   }  }  Get-WmiObject Win32_Service –comp "Server2" –ea "Stop"  Get-Process }  MyFunction Write-Host "Testing!"

以下簡要概述了執(zhí)行鏈。首先執(zhí)行第 19 行,它調(diào)用第 6 行中的函數(shù)。執(zhí)行第 15 行并產(chǎn)生異常。該異常在第 7 行捕獲,然后 Trap 必須在第 9 行做出決定。假設(shè) $condition 為 True,Trap 將在第 16 行繼續(xù)執(zhí)行。

但是,如果 $condition 為 False,Trap 將發(fā)生中斷。這將退出當前作用域,并將原始異常傳遞至父項。從外殼角度看,這意味著第 19 行產(chǎn)生了異常,并被第 1 行捕獲。Continue 關(guān)鍵字將強制外殼繼續(xù)執(zhí)行第 20 行。

實際上,這兩個 Trap 中都包含了略多一些的代碼,用于處理錯誤,對其進行記錄等等。在本例中我只是省略了這種函數(shù)代碼,以使實際流程更易于查看。

為什么要擔心呢?

您何時需要捕獲錯誤?有兩種情況:預測可能會發(fā)生錯誤以及當您想要某種超越普通錯誤消息的行為時(例如將錯誤記錄到文件或顯示更有幫助的錯誤消息)。

通常我在復雜一些的腳本中加入錯誤處理,以幫助處理我可以預見發(fā)生的錯誤。這些錯誤包括但不限于連接不良或權(quán)限問題等錯誤。

錯誤捕獲無疑需要花費更多的時間和精力才能了解。但當您在 Windows PowerShell 中處理更加復雜的任務時,很有必要實施錯誤捕獲,以幫助您構(gòu)建更加完善、專業(yè)的工具。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
91黄色免费视频| 男人天堂视频在线| 久草在现在线| 精品一区二区三区免费观看| 中文字幕在线免费专区| 国产亚洲精品久久久久久青梅| 久久成人av网站| 美女极度色诱视频www免费观看| 国产精品一级片在线观看| 亚洲xxx自由成熟| 欧美日韩一区二区三区在线免费观看| 揉丰满老妇老女人的毛片| 亚洲av成人无码久久精品| 久久精品国产一区二区三区| 肥熟一91porny丨九色丨| 欧美日韩色婷婷| 天堂8中文在线| 国内偷拍精品视频| 欧美极度另类videos高清| 亚洲国产中文在线二区三区免| 久久青青视频| 第一中文字幕在线| 久久躁狠狠躁夜夜爽| 日韩美女黄色片| 欧美激情1区2区| 狠狠色2019综合网| 日本10禁啪啪无遮挡免费一区二区| 综合在线视频| 一个色的综合| 国产精品福利在线播放| 米奇777在线影院线| 免费成人在线视频观看| 成人在线电影网| 色先锋av资源| 国产福利微拍精品一区二区| 天海翼一区二区三区四区在线观看| sesexxxx| 岳毛多又紧做起爽| 丁香在线视频| 欧美精品自拍视频| 乱子伦视频在线看| 欧美丰满少妇xxxxx| 黄色一级片播放| 黄色av网站在线观看| 亚洲欧洲午夜| 久艹在线播放| 91在线视频一区| 日韩一二三四区| 日本高清不卡一区| 日韩欧美精品在线观看| 欧美日韩性视频一区二区三区| 亚洲欧美日本在线| 茄子视频成人免费观看| 欧美精品免费视频| 免费中文字幕日韩| 在线免费黄色网| 深夜福利av| 91精品国产自产| 在线免费高清一区二区三区| 久久影视电视剧免费网站| 最近中文字幕第一页| 野战少妇38p| 日韩精品91| 99视频精品全部免费在线| 性xxxfreexxxx性欧美| 国产成人精品电影| 99热亚洲精品| 国产精品国产三级国产试看| 国产很黄免费观看久久| 国产真实乱对白精彩久久| 亚洲国产精品专区久久| 欧美一区二区黄片| 女人裸体性做爰全过| 亚洲a成人v| 久久99久久精品国产| 第九色区av在线| 69av.com| 免费搞黄视频| 日本乱码一区二区三区不卡| 中文字幕在线观看视频网站| 成人在线视频免费看| av免费观看网站| 老司机午夜激情| 中文在线资源观看网站视频免费不卡| 高清精品xnxxcom| 国语自产精品视频在线看抢先版结局| 国产精品视频免费看| 亚洲久久久久久久| 国产一区二区美女| 亚洲国产精品一区二区久久恐怖片| 婷婷综合伊人| 在线播放 亚洲| 特黄毛片在线观看| 青青草精品在线| 另类图片激情| 亚洲视频国产视频| 国产原创视频在线观看| 亚洲社区在线观看| 九九精品视频在线观看九九| 美女露出粉嫩尿囗让男人桶| 日韩欧美一区二区三区久久婷婷| 一区二区三欧美| www夜片内射视频日韩精品成人| 婷婷色在线播放| 黄色aaa毛片| 川上优av中文字幕一区二区| 亚洲狠狠爱一区二区三区| 欧美乱大交xxxx| 六月婷婷一区| 亚洲影院免费观看| 一区二区福利视频| 久久国产日韩欧美| 欧美一区免费| 国产伦精品一区二区三区四区视频_| 国产剧情在线观看一区二区| 第四色男人最爱上成人网| 欧美视频在线看| 欧美视频在线观看| 在线观看日韩av先锋影音电影院| 538在线一区二区精品国产| 粉嫩一区二区三区在线观看| 欧美黑人双插| 国产aⅴ2021| 91高潮精品免费porn| 精品资源在线看| 91成人免费观看网站| 先锋影音一区二区三区| 影音先锋电影在线观看| 亚洲成色777777女色窝| 国产呦小j女精品视频| 视频一区二区三区在线| av在线电影院| 亚洲清纯自拍| 欧美激情性做爰免费视频| 欧美重口另类videos人妖| 亚洲成国产人片在线观看| 69久久久久| 亚洲人a成www在线影院| 欧美国产日韩一区| 麻豆视频在线观看免费网站黄| 精品国产乱码久久久久久丨区2区| 韩日欧美一区| 免费v片在线观看| 91美女精品网站| 美国黄色一级毛片| 日本a级片免费| 欧美一区二区三区四| 欧美日韩在线播放视频| 欧亚一区二区三区| 国产女主播一区二区三区| 日本成片免费高清| 一区二区毛片| 神马影视一区二区| 被弄出白浆喷水了视频| 欧美激情综合色| 99riav视频一区二区| 九热视频在线观看| 成人亚洲一区二区一| 国产精品人人做人人爽| 中文字幕中文字幕中文字幕亚洲无线| 中文字幕日韩欧美在线视频| 亚洲专区欧美专区| 亚洲精品国产精品国产| 国产熟妇一区二区三区四区| xxav视频| 国产精品无码专区av免费播放| 国产精品入口夜色视频大尺度| 国产1区2区3区精品美女| 成人久久18免费网站漫画| 亚洲国产精品一| 中文字幕在线免费看线人| 在线成人av网站| 8x8x8x视频在线观看| 天堂中文av在线| 男女啪啪网站视频| 欧美精品一区二区三区很污很色的| 九色在线网站| 成人精品一区二区三区校园激情| 美女一区二区三区视频| 大尺度一区二区| 中文字幕日韩国产| 欧美精品电影在线播放| mm1313亚洲国产精品美女| 久热中文字幕在线精品免费| 国产日韩欧美不卡| 精品日本高清在线播放| 欧美做受高潮电影o| xxxx日本少妇| 一区二区三区无码高清视频| 精品a在线观看| av网在线播放| 精品一区免费观看| 91视频8mav| 天天视频一区二区三区| 特级西西444www大精品视频免费看| 亚洲图片欧美日产| 国产成人综合亚洲欧美在| 欧美日韩在线精品成人综合网| 日韩精品一区在线视频| 成人av在线一区二区三区| 欧美在线免费观看| 色94色欧美sute亚洲线路一久| 日韩电影在线观看完整免费观看| 国产日韩欧美亚洲| 欧美色图17p| 亚洲主播在线| 日韩欧美在线番号| 亚洲一级生活片| 在线日韩欧美视频| 国产精品成人一区二区| 国产三级在线观看视频| 免费观看的av| 国产综合色在线| 亚洲美女性生活视频| 无码国产精品96久久久久| 久久xxxx精品视频| 国产成人成网站在线播放青青| 精品国自产在线观看| 日韩电影免费观看在线观看| 91久久夜色精品国产网站| 亚洲国产又黄又爽女人高潮的| jizz一区二区三区| 亚洲一区在线观看免费观看电影高清| 欧美一级黑人aaaaaaa做受| 色诱视频网站一区| 欧美牲交a欧美牲交aⅴ免费真| 福利在线一区| 一区二区成人在线观看| 台湾佬中文娱乐网欧美电影| 欧美成人精品二区三区99精品| 欧美日免费三级在线| 亚洲婷婷国产精品电影人久久| 国产精品yjizz视频网| 中文欧美在线视频| 亚洲色图综合图区| 黄色片视频免费观看| 国产真实伦在线观看| 亚洲激情图片| av免费观看网站| 老头吃奶性行交视频| 香蕉视频网站在线观看| 色屁屁草草影院ccyycom| 色婷婷av一区二区三区在线观看| 精品人妻一区二区三区麻豆91| 色吊丝在线永久观看最新版本| 成人影院久久久久久影院| 国产精品扒开腿做爽爽爽的视频| 国产专区欧美精品| 欧美videos粗暴高清性| 中文字幕精品—区二区日日骚| 日韩国产成人无码av毛片| 午夜精品一区二区三区在线播放| 免费在线观看视频一区| av电影在线观| 亚洲国产精品无码久久| 99久久精品网| 精品一区二区三区五区六区| 2023av在线| 精品人妻一区二区三区日产乱码| 久久激情免费视频| 国产无遮挡裸体免费久久| 狠狠操狠狠色| 欧美中文日韩| 色呦呦中文字幕| 亚洲精品国产嫩草在线观看| www.亚洲一区二区| 婷婷色一区二区三区| 欧美日韩亚洲在线| 国产精品人人妻人人爽人人牛| 成人在线视频你懂的| 亚洲女同一区二区| 中文视频在线观看| 欧美日韩ab片| 精品欧美一区二区三区精品久久| 久久久久狠狠高潮亚洲精品| 亚洲最大的免费视频网站| 国产精品美女久久久久aⅴ国产馆| 精品嫩草影院久久| 高清一区二区中文字幕| 欧美大片aaaa| 日韩国产亚洲欧美| 91麻豆精品国产无毒不卡在线观看| 亚洲影视在线观看| 黄色在线免费观看网站| 成人综合在线视频| 粉嫩av国产一区二区三区| 欧美精品偷拍| 久久涩涩网站| 在线免费观看一区二区三区| 国产精品国产三级国产普通话99| 在线视频免费一区二区| 久久婷婷综合国产| 超碰97人人射妻| 黑人巨大精品| 成人性生交大片免费| 熟女熟妇伦久久影院毛片一区二区| 亚洲欧美日韩中文在线制服| 国产无套丰满白嫩对白| 综合激情在线| 久久精品一本| 97视频资源在线观看| 欧美第一黄色网| 日韩久久久久久久久久久久| 精品少妇人妻一区二区黑料社区| 久久6免费高清热精品| 久久久免费电影| 日本性视频网| 欧美一级手机免费观看片| 99精品视频网站| 26uuu国产在线精品一区二区| 欧美性生活一区| 黄色av免费在线播放| 亚洲黄色毛片| 日韩理论片av| 国产精品视频观看| 青草青青国产| 久久综合社区| 亚洲免费视频一区二区三区| 性综艺节目av在线播放| 华人av在线| 奇米影视在线99精品| 亚洲国产精品成人精品| 少妇一级淫免费观看| www.性欧美| blacked蜜桃精品一区| 成人免费网址在线| 日韩欧美国产综合在线一区二区三区| 国产激情视频在线观看|