欧美阿v视频在线大全_亚洲欧美中文日韩V在线观看_www性欧美日韩欧美91_亚洲欧美日韩久久精品

主頁(yè) > 知識(shí)庫(kù) > 淺談PowerShell 捕獲錯(cuò)誤

淺談PowerShell 捕獲錯(cuò)誤

熱門標(biāo)簽:真人和電話機(jī)器人對(duì)話 湖州電銷防封卡 使用電話機(jī)器人電銷是否違法 什么渠道可以找外呼系統(tǒng)客戶 金融電銷公司怎么辦理外呼系統(tǒng) 雷霆電話機(jī)器人電話 電話智能外呼系統(tǒng)誠(chéng)信合作 信陽(yáng)話務(wù)外呼系統(tǒng)怎么收費(fèi) 安徽400電話辦理

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

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

設(shè)置 Trap

在 Windows PowerShell 中,Trap 關(guān)鍵字定義一個(gè)錯(cuò)誤處理程序。當(dāng)您的腳本中出現(xiàn)異常時(shí),外殼會(huì)檢查是否已經(jīng)定義 Trap,這意味著它必須在發(fā)生任何異常之前出現(xiàn)在腳本中。對(duì)于本演示,我將整理出一個(gè)會(huì)產(chǎn)生連接性問題的測(cè)試腳本:我將使用 Get-WmiObject 連接網(wǎng)絡(luò)中并不存在的計(jì)算機(jī)名。我的目標(biāo)是讓錯(cuò)誤 Trap 將無(wú)效計(jì)算機(jī)名寫出到一個(gè)文件中,從而為我提供一個(gè)記錄了無(wú)效計(jì)算機(jī)名的文件。我還將加入到兩個(gè)有效計(jì)算機(jī)的連接(我將使用 localhost)。請(qǐng)參見圖 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 所示)與我的期望不符。請(qǐng)注意 "Error connecting to…" 消息不顯示。也沒有創(chuàng)建 Errors.txt 文件。也就是說(shuō),根本沒有執(zhí)行我的 Trap。究竟發(fā)生了什么?

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

停止!

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

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

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

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

在作用域中完成所有操作

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

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

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)在考慮下面這個(gè)略有些不同的作用域示例:

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

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

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

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

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

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

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

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

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

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

斷開

我在前面提到過 Break 關(guān)鍵字。圖 5 顯示了一個(gè)如何運(yùn)用 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!"

以下簡(jiǎn)要概述了執(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ā)生中斷。這將退出當(dāng)前作用域,并將原始異常傳遞至父項(xiàng)。從外殼角度看,這意味著第 19 行產(chǎn)生了異常,并被第 1 行捕獲。Continue 關(guān)鍵字將強(qiáng)制外殼繼續(xù)執(zhí)行第 20 行。

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

為什么要擔(dān)心呢?

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

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

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

您可能感興趣的文章:
  • PowerShell捕獲錯(cuò)誤的2種方法(異常捕獲命令、錯(cuò)誤變量)
  • PowerShell中查詢錯(cuò)誤編號(hào)信息的2個(gè)方法
  • Powershell小技巧之找出腳本中的錯(cuò)誤
  • Powershell小技巧之用變量累積記錄錯(cuò)誤
  • Powershell錯(cuò)誤處理之what-if

標(biāo)簽:湛江 運(yùn)城 濟(jì)南 山南 德州 六盤水 鶴崗 岳陽(yáng)

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《淺談PowerShell 捕獲錯(cuò)誤》,本文關(guān)鍵詞  淺談,PowerShell,捕獲,錯(cuò)誤,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《淺談PowerShell 捕獲錯(cuò)誤》相關(guān)的同類信息!
  • 本頁(yè)收集關(guān)于淺談PowerShell 捕獲錯(cuò)誤的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    欧美阿v视频在线大全_亚洲欧美中文日韩V在线观看_www性欧美日韩欧美91_亚洲欧美日韩久久精品
  • <rt id="w000q"><acronym id="w000q"></acronym></rt>
  • <abbr id="w000q"></abbr>
    <rt id="w000q"></rt>
    欧美在线不卡视频| 亚洲图片自拍偷拍| 国精品**一区二区三区在线蜜桃 | 欧美日本韩国一区二区三区视频| 国产精品拍天天在线| 国产精品一区三区| 99自拍偷拍视频| 国产亚洲短视频| 国产麻豆精品在线观看| 亚洲一二三精品| 国产校园另类小说区| 国内精品久久久久影院薰衣草| 久久精品无码一区| 精品国产精品网麻豆系列| 美女网站色91| www.99热| 欧美激情自拍偷拍| 国产成人综合视频| 中文字幕求饶的少妇| 国产精品蜜臀在线观看| 成人app网站| 欧洲精品一区二区三区在线观看| 伊人性伊人情综合网| 少妇丰满尤物大尺度写真| 欧美精品在线一区二区三区| 日日欢夜夜爽一区| av女人的天堂| 国产亚洲婷婷免费| 成人性色生活片| 综合五月激情网| 亚洲精品中文字幕在线观看| 在线观看欧美一区二区| 欧美高清hd18日本| 毛片av一区二区| 免费一级suv好看的国产网站| 国产精品伦一区| 91视频免费播放| 91精品免费在线| 国内精品视频一区二区三区八戒| 中文字幕无码日韩专区免费| 亚洲人成在线播放网站岛国 | 国产人成一区二区三区影院| 成人性生交大片免费看中文| 欧美亚洲另类激情小说| 爽爽淫人综合网网站 | 午夜欧美电影在线观看| 国产精品成人一区二区三区电影毛片| 久久一二三国产| 不卡视频免费播放| 91精品福利在线一区二区三区| 久久福利资源站| 日本精品在线免费观看| 亚洲一区二区三区四区在线| 毛片网站免费观看| 国产精品的网站| 日批在线观看视频| 国产日韩av一区| 91免费视频大全| 日韩欧美精品在线| 成人高清免费观看| 91精品国产aⅴ一区二区| 国产精品69毛片高清亚洲| 欧美性感一区二区三区| 久久er精品视频| 欧美在线看片a免费观看| 美女网站色91| 91成人看片片| 黄网站免费久久| 欧美伊人久久久久久午夜久久久久| 男男成人高潮片免费网站| 国产97免费视频| 蜜臀av性久久久久蜜臀aⅴ四虎| 五月天av网站| 日本不卡在线视频| 色综合久久久久久久久| 日本伊人色综合网| 色欧美乱欧美15图片| 另类小说视频一区二区| 欧美伊人久久久久久午夜久久久久| 久久精工是国产品牌吗| 欧美在线free| 福利电影一区二区| 欧美大片国产精品| 91丨国产丨九色丨pron| 久久精品亚洲一区二区三区浴池| 日韩黄色一区二区| 国产精品久久久久久久久免费桃花| 国产精品嫩草av| 亚洲精选视频免费看| 中国美女黄色一级片| 日本中文一区二区三区| 欧美亚洲图片小说| 国产超碰在线一区| 精品福利在线导航| 欲求不满的岳中文字幕| 亚洲精品videosex极品| 999久久久国产| 六月丁香婷婷久久| 欧美一个色资源| 91麻豆免费视频| 国产精品久久久久毛片软件| 中文字幕国产综合| 亚洲成人av免费| 在线观看一区日韩| 懂色中文一区二区在线播放| 亚洲精品一区二区三区福利| 国产草草浮力影院| 亚洲一二三区不卡| 欧美午夜精品久久久久久超碰| 成人综合在线视频| 日本一区二区三区四区| 免费网站在线高清观看| 久久福利资源站| 欧美不卡123| 亚洲国产欧美视频| 日韩高清欧美激情| 欧美人妖巨大在线| 欧美成人精品一区二区综合免费| 亚洲欧美日韩在线不卡| 破处女黄色一级片| 成人免费视频视频在线观看免费| 欧美极品aⅴ影院| 美女av免费看| 国产二区国产一区在线观看| 欧美极品aⅴ影院| √天堂中文官网8在线| 丁香婷婷综合五月| 国产精品久久久久久久久图文区| 神马久久精品综合| 成人免费视频caoporn| 国产精品久久久久婷婷二区次| 免费成人深夜夜行网站| 丁香天五香天堂综合| 亚洲欧美综合在线精品| 91成人看片片| 欧美熟妇精品一区二区| 亚洲国产精品久久久男人的天堂| 欧美三级中文字幕| 四虎精品一区二区| 日韩av成人高清| 久久婷婷国产综合国色天香| 阿v天堂2014| 国产999精品久久久久久绿帽| 国产精品网站导航| 色综合一区二区三区| 91啦中文在线观看| 亚洲成av人片在线| 日韩精品一区二区在线| 少妇av片在线观看| 成人性色生活片| 一区二区三区在线视频免费观看| 欧美日韩亚洲不卡| 国产特黄级aaaaa片免| 国产在线国偷精品免费看| 国产精品卡一卡二| 欧美网站大全在线观看| 日韩aaaaa| 韩国女主播成人在线观看| 国产精品麻豆欧美日韩ww| 在线观看91精品国产入口| 国产精品手机在线观看| 久久国产精品99久久久久久老狼| 国产精品美女久久久久aⅴ国产馆| 色哦色哦哦色天天综合| 国产性生活毛片| 激情综合网天天干| 中文字幕一区二区三区在线不卡| 精品视频999| 六月婷婷七月丁香| www.日本不卡| 日本成人在线网站| 国产精品免费av| 91精品午夜视频| 国产探花在线视频| 中国特级黄色大片| 国产精品自在在线| 一区二区欧美视频| 26uuu成人网一区二区三区| 玖玖爱这里只有精品| 国产草草浮力影院| 成人综合在线视频| 日韩av高清在线观看| 国产精品久久久久精k8| 4hu四虎永久在线影院成人| 在线观看亚洲大片短视频| 91麻豆免费看片| 国产在线播放一区二区三区| 亚洲精品久久久蜜桃| 亚洲精品一区二区三区蜜桃下载 | 亚洲精品成人少妇| 久久亚洲一区二区三区明星换脸| 一道本成人在线| 日本高清www| 97se亚洲国产综合自在线不卡| 免费看黄色91| 亚洲三级久久久| 久久无码av三级| 91精品婷婷国产综合久久竹菊| 色欲人妻综合网| 中文字幕 自拍|