Како користити ПоверСхелл Покушајте Цатцх Финалли да бисте решили грешке

15. јул 2021 10258 Погледи Друге важне информације о ПоверСхелл-у Покушајте

ПоверСхелл Покушај да ухватиш блок се користи за руковање грешкама у ПоверСхелл скриптовима. Када користите ПоверСхелл Покушај да ухватиш блок за скриптовање можете постићи следеће:

  1. Нека ваша скрипта настави да ради упркос грешци
  2. Приказујте и боље рукујте порукама о грешкама

У овом водичу ћете научити како да користите Поверсхелл Покушај да ухватиш блокове за руковање порукама о грешкама које се завршавају у ПоверСхелл-у. Поред тога, научићете како да укључите Коначно блок у а Покушај да ухватиш блокирати.

Водич почиње синтаксом Покушај да ухватиш блокирати.

Прегледајте теме постова

ПоверСхелл Покушај да ухватиш Синтакса

ПоверСхелл Покушајте Цатцх синтаксу

Синтакса ПоверСхелл-а Покушај да ухватиш је…

|_+_|

Тхе Покушати је део блока који желите да ПоверСхелл надгледа грешке. Ово је блок са оригиналним скриптама који могу да врате грешку завршетка.

Када дође до грешке у блоку Три, ПоверСхелл чува грешку у аутоматској променљивој $Еррор (више о томе касније).

С друге стране, т он улов изјава ПоверСхелл-а Покушај да ухватиш блок обрађује грешке генерисане у блоку три. Такође можете одредити типове грешака које се обрађују у оквиру Улов блок изјава.

Тхе Коначно блок се може користити за ослобађање свих ресурса који више нису потребни скрипти.

Уобичајени типови грешака изузетака у ПоверСхелл-у Покушај да ухватиш

Врсте грешака у ПоверСхелл-у Покушајте ухватити

Можете да обрађујете различите типове грешака у блоку ПоверСхелл Три Цатцх. На пример, можете да обрађујете одређене грешке.

Поред тога, можете да обрађујете генеричке поруке о грешци. Међутим, да бисте обрадили одређене врсте грешака, морате знати врсту грешке.

касније у овом водичу сазнаћете да се поруке о грешци чувају у аутоматској променљивој $еррор. Поред тога, грешке се такође могу сачувати у променљивој цевовода $_.

Штавише, грешке сачуване у аутоматској променљивој $еррор се чувају у низу. Да бисмо ово објаснили, покренимо команду која враћа поруку о грешци која се завршава:

Да бисте обрисали све грешке претходно сачуване у $еррор аутоматска променљива, пре него што покренете наредбу испод, прво покрените $еррор.Цлеар() команда. |_+_| Не постоји дневник догађаја који се зове Систерр, тако да ће команда у блоку Три избацити поруку о грешци.

Изненађујуће, команда није приказала никакву поруку о грешци. Дакле, шта се догодило са поруком о грешци?

Чува се у аутоматској променљивој $еррор! Да бисте приказали грешку из последње команде, сачувану у променљивој $еррор, покрените команду...

|_+_|

Резултат команде приказује детаље грешке сачуване у аутоматској променљивој $еррор. Информације о грешци имају одељак под називом ФуллиКуалифиедЕррорИд .

За ову специфичну грешку, ФуллиКуалифиедЕррорИд има два скупа информација – Систем.ИнвалидОператионЕкцептион и Мицрософт.ПоверСхелл.Цоммандс.ГетЕвентЛогЦомманд .

Информације које нас занимају су Систем.ИнвалидОператионЕкцептион . Ово је врста грешке коју можете улов у блоку ПоверСхелл Три Цатцх.

Да бисте добили име овог ПоверСхелл изузетка, покрените наредбу у наставку:

|_+_|

Ево га, Систем.ИнвалидОператионЕкцептион !

У наредних неколико пододељака говорићу о уобичајеним грешкама ПоверСхелл Три Цатцх Екцептион.

ПоверСхелл Три Цатцх ЦоммандНотФоундЕкцептион Грешка

Ако покренете команду која не постоји у ПоверСхелл-у или Мицрософт командној линији, добићете поруку о грешци. На пример, ако покренете Гет-Филе команду, добићете поруку о грешци јер ова команда није важећа ПоверСхелл команда.

Ево снимка екрана резултата команде у ПоверСхелл-у...

ПоверСхелл Покушајте ухватити грешку ЦоммандНотФоундЕкцептион

Као што можете видети на снимку екрана, тип изузетка (ФуллиКуалифиедЕррорИд) је ЦоммандНотФоундЕкцептион .

Пошто је ово грешка у прекиду, то ће зауставити наставак ваше скрипте. Да бисте спречили ову грешку да прекине вашу скрипту, умотајте команду у а Покушај да ухватиш блокирати.

Ако ову грешку умотамо у ПоверСхелл Три Цатцх блок, ПоверСхелл ће потиснути грешку. Штавише, то ће спречити да прекине вашу скрипту.

Међутим, иако је грешка потиснута, она се чува у променљивој $еррор. Као и обично, пре него што покренете наредбу у наставку, прво обришите грешке сачуване у променљивој $еррор.

|_+_|

Ако желите да покренете команду у ПоверСхелл-у уместо у ПоверСхелл ИСЕ-у, откуцајте команде у једном реду као што је приказано испод:

|_+_|

Затим, да бисте приказали грешку, покрените...

|_+_|

Као што сам поменуо у главном уводу у овај одељак, да бисте приказали ИД изузетка за ову грешку, покрените наредбу испод:

|_+_|

Пун назив изузетка је Систем.Манагемент.Аутоматион.ЦоммандНотФоундЕкцептион .

ПоверСхелл Три Цатцх МанагементОбјецтНотФоундЕкцептион Грешка

Када покренете команду у удаљеној ПС сесији са погрешним информацијама, ПоверСхелл враћа а МанагементОбјецтНотФоундЕкцептион грешка.

Типичан сценарио је када се повежете на Оффице 365 помоћу ПоверСхелл-а. Затим покрените команду Гет-Усер, али наведите погрешног корисника идентитет .

ПоверСхелл Покушајте ухватити грешку МанагементОбјецтНотФоундЕкцептион

Да бисте ухватили ову грешку помоћу ПоверСхелл-а Три Цатцх, користите команду сличну оној испод:

|_+_| Цатцхинг тхе МанагементОбјецтНотФоундЕкцептион грешка са ПоверСхелл-ом. Покушајте, Цатцх је посебно незгодан. Морате да користите ЕррорАцтион параметар и наведите Зауставити . У супротном, чак и са Три, Цатцх, грешка ће и даље бити приказана.

На крају, да бисте добили име изузетка, користите наредбу у наставку:

|_+_|

Команда враћа тип изузетка као Систем.Манагемент.Аутоматион.РемотеЕкцептион . Дакле, шта је МанагементОбјецтНотФоундЕкцептион ?

МанагементОбјецтНотФоундЕкцептион је разлог за изузетак као што је потврђено наредбом у наставку:

|_+_|

ПоверСхелл Три Цатцх УнаутхоризедАццессЕкцептион Грешка

Још једна уобичајена грешка ПоверСхелл изузетка је УнаутхоризедАццессЕкцептион . Ова врста грешке се јавља када покушате да приступите ставци за коју немате бар дозволу за читање.

Да бих илустровао овај пример, забранио сам аутентификованим корисницима приступ одређеној датотеци на мом рачунару.

ПоверСхелл Покушајте ухватити грешку УнаутхоризедАццессЕкцептион

Сада, ако покушам да приступим датотеци помоћу команде Гет-Цонтент, добијам поруку одбијеног приступа.

|_+_|

Да бисте зауставили приказивање ове грешке, покрените команду унутар блока ПоверСхелл Три Цатцх као што је приказано у наставку...

|_+_|

Нажалост, горња команда не зауставља приказивање грешке. Разлог је тај што то није грешка у прекиду.

Да бисте зауставили приказивање грешке, укључите ЕррорАцтион параметар и наведите Зауставити .

|_+_|

Сада команда потискује грешку. Да бисте приказали тип изузетка, покрените наредбу испод...

|_+_|

Тип изузетка је Систем.УнаутхоризедАццессЕкцептион .

Постоји више типова грешака изузетака од онога што је покривено у овом одељку. Покрио сам само најчешће врсте изузетака.

Како ухватити одређене изузетке помоћу ПоверСхелл-а Покушајте Цатцх

Како ухватити одређене изузетке помоћу ПоверСхелл-а Покушајте Цатцх

У последњем одељку се расправљало о уобичајеним ПоверСхелл изузецима и како пронаћи тип изузетка. Овај одељак ће покрити како да користите те информације за снимање одређених типова порука о грешци.

У одељку о синтакси овог водича, рекао сам да је општа синтакса ПоверСхелл-а Три Цатцх Финалли…

|_+_|

У блоку цатцх синтаксе, можете видети [тип грешке]. Овде одређујете тип грешке коју желите да ухватите у овом блоку.

На пример, да бисте ухватили грешке УнаутхоризедАццессЕкцептион, користите изјаве у наставку...

|_+_|

Да бисте покренули команду у ПоверСхелл-у, наведите исказе у једном реду. Први део наредбе – $еррор.Цлеар() – брише све грешке сачуване у променљивој $еррор.

|_+_|

Како додати више Улов Блокови у ПоверСхелл-у Покушај да ухватиш Изјава

У уводу овог одељка, показао сам вам како да ухватите одређену врсту изузетка у Улов блокирати. Можете навести више

Ево примера…

|_+_|

У овом примеру, први улов блок обрађује наведене типове изузетака. Штавише, други улов блок ручке обрађују генеричке грешке.

Како издвојити изузетак грешке помоћу ПоверСхелл-а Покушајте Цатцх

Последњи пододељак је покрио како да наведете више блокова цатцх за руковање различитим типовима изузетака. У овом пододељку ћете научити како да издвојите детаље грешке у изузетку.

Да бих ово илустровао, користићу пример који сам раније користио. Покрените ову ПоверСхелл наредбу у ПоверСхелл-у.

|_+_|

Сада само покрените $еррор…

|_+_|

Иако је више информација сачувано у променљивој $еррор, стварна порука о грешци је истакнута на снимку екрана испод.

Како издвојити детаље о грешци помоћу ПоверСхелл-а Покушајте Цатцх

Ако желите да евидентирате ову грешку у текстуалној датотеци, потребно је да евидентирате само стварне детаље грешке. Да бисте издвојили ову грешку, користите наредбу испод:

|_+_|

Команда издваја стварну поруку о грешци Приступ путањи „Д:ПС-Туториалфолдер-намес.ткт“ је одбијен.

Ову поруку о грешци можете записати у датотеку евиденције тако што ћете укључити а Оут-Филе команду у блоку Цатцх.

|_+_| Укључио сам Додати параметар у Оут-Филе наредба за омогућавање евидентирања више уноса без преписивања претходних уноса.

Да бих лакше разумео последњу команду, поново ћу је написати у формату скрипте испод...

|_+_|

Како укључити А Коначно Блокирај у ПоверСхелл Покушај да ухватиш Изјава

Како укључити Финалли Блоцк у ПоверСхелл Три Цатцх изјаву

Можете укључити а Коначно блокирајте на ПоверСхелл Покушај да ухватиш Изјава. Синтакса је

|_+_|

Тхе коначно блок се може користити за ослобађање свих ресурса који више нису потребни скрипти.

Блок Финалли се покреће чак и ако користите ЦТРЛ+Ц да зауставите скрипту. Блок ће се такође покренути ако кључна реч Екит заустави скрипту унутар Цатцх блока.

У последњем примеру, имао сам изјаву која уписује евиденцију грешака у текстуалну датотеку у Улов блокирати. Међутим, најбоље место за ту изјаву је у а Коначно блокирати.

Погледајте модификовану скрипту испод…

|_+_|

Додатне корисне информације о ПоверСхелл-у Три Цатцх

Друге важне информације о ПоверСхелл-у Покушајте

У овом одељку ћу поделити неке једноставне, али корисне информације о ПоверСхелл Три Цатцх.

Како да обришете ПоверСхелл Покушајте ухватити аутоматску променљиву $Еррор

Аутоматска променљива $еррор има а Јасно Метод. Можете користити овај метод да обришете све грешке сачуване у аутоматској променљивој $еррор.

Да бисте обрисали све грешке сачуване у аутоматској променљивој $еррор за тренутну ПоверСхелл сесију, покрените наредбу испод.

|_+_|

Како приказати прилагођену поруку о грешци у ПоверСхелл-у Покушајте Цатцх Блоцк

Да бисте приказали прилагођену поруку о грешци у ПоверСхелл Три Цатцх блоку, користите реч Тхров. Ево примера…

|_+_|

Ево резултата ове скрипте у ПоверСхелл ИСЕ.

Како приказати прилагођену поруку о грешци у ПоверСхелл-у Покушајте Цатцх Блоцк

Како добити информације о категорији грешака у ПоверСхелл-у Покушајте Цатцх

Аутоматска променљива $еррор има својство под називом ЦатегориИнфо. Да бисте видели ово својство и друга својства и методе, покрените наредбу испод...

|_+_|

Позива се једно од својстава које је вратила последња команда ЦатегориИнфо .

Да бисте приступили овим информацијама, покрените наредбу испод.

|_+_|

Ова команда враћа више под-особина.

Како добити информације о категорији грешака у ПоверСхелл-у Покушајте Цатцх

Сваком од ових под-својстава може се приступити додавањем назива под-особине након тачке. На пример, да бисте приказали под-особине разлога, покрените наредбу испод.

|_+_|

Како користити Врите-Хост за приказ порука о грешкама у ПоверСхелл-у Покушајте Цатцх

Као и својство ЦатегориИнфо у последњем пододељку, аутоматска променљива $еррор такође има својство под називом Изузетак . Да бисте приказали изузетак у грешци, покрените наредбу у наставку:

|_+_|

Нажалост, ако покушате да прикажете ове информације помоћу команде Врите-Хост, то неће радити како се очекивало.

|_+_|

Ево резултата ове команде у ПоверСхелл-у…

Како користити Врите-Хост за приказ порука о грешкама у ПоверСхелл-у Покушајте Цатцх

Као што видите, команда приказује гомилу других информација. Добра вест је да $еррор.Екцептион има још једно својство под називом Порука .

Можете позвати ово под-својство тако што ћете га додати $еррор.Екцептион , овако…

|_+_|

Поред тога, можете користити Врите-Хост команда за приказ ове информације о грешци...

|_+_|

Последња команда сада приказује стварну поруку о грешци...

Осим што постоји посебан разлог за коришћење Врите-Хост као што је приказано у последњој команди, можете једноставно приказати исту поруку о грешци са $еррор.Екцептион команда.

Како направити хасхтабле у ПоверСхелл-у Покушајте Цатцх Блоцк

Постоје два уобичајена начина на које можете креирати а ПоверСхелл хеш-табела у блоку Три Цатцх.

  1. Можете креирати хеш-табелу са више парова кључ/вредност унутар блока Три
  2. Алтернативно, можете креирати једну хеш табелу кључа/вредности са Кључ изван Пробајте Цатц х блок и вредност унутар Пробајте Цатц х блок.

Ево примера прве методе…

|_+_|

Као што видите, хасттабле је унутар Пробајте Цатц х блок…

С друге стране, можете креирати један кључ хеш табеле са вредношћу дефинисаном унутар а Пробајте Цатц х блок. Ево примера…

|_+_|

Да бих потврдио да последња скрипта производи ПоверСхелл хеш табелу, након покретања скрипте, позвао сам вредности сачуване у променљивој $хасхтабле.

Као што можете видети из резултата последње команде, она има пар Име/Вредност!

ПоверСхелл Пробајте Цатцх примере

ПоверСхелл Пробајте Цатцх примере

У овом последњем одељку покрићу више примера примене ПоверСхелл Три Цатцх.

Како се користи ПоверСхелл Покушај да ухватиш Са Гет-Цхилдитем

Команда Гет-Цхилдитем може да врати више грешака. Да бих илустровао две уобичајене грешке, користићу две команде у наставку:

|_+_|

Тачна путања до текстуалне датотеке коришћене у последњој команди је Д:ПС-Туториалфилелист.ткт.

Међутим, у прву команду укључио сам размак после Д:ПС-Туториал. Ово је довело до грешке (ускоро ћемо утврдити детаље о грешци).

Такође, у другој команди сам навео тачну путању, али сам користио погрешно име датотеке. Ово је резултирало грешком.

|_+_| Како да користите ПоверСхелл Покушајте ухватити помоћу Гет-Цхилдитем

Да наставим даље, да бих добио више информација о овим грешкама, покренућу команде у ПоверСхелл-у Покушај да ухватиш блокирати.

|_+_|

Наш први задатак је да одредимо типове грешака које враћају команде. Да бисте добили ове информације, покрените наредбе испод...

|_+_|

Ево резултата команди...

Како користити ПоверСхелл Покушајте Цатцх да извезете Гет-ВМИОбјецт грешке помоћу Екпорт-цсвГрешке сачуване у аутоматској променљивој $еррор се чувају у ПоверСхелл низу. Сваком објекту у низу се приступа додавањем [0], [1] на крају низа. 0 представља прву ставку у низу, док 1 представља другу ставку и тако даље.

Назад на добијање више информација о грешкама које је бацио Гет-Цхилдитем команде, на основу типова грешака, можемо да изменимо наш блок Три Цатцх да бисмо ухватили ове 2 врсте грешака...

|_+_|

Наш други задатак је да прикажемо стварне поруке о грешци. Ова команда ће обавити посао:

|_+_|

Команда приказује две поруке о грешци...

Како се користи ПоверСхелл Покушај да ухватиш Да бисте извезли Гет-ВМИОбјецт грешке помоћу Екпорт-цсв

У овом пододељку извешћу грешке генерисане приликом покретања Гет-ВМИОбјецт на удаљеном рачунару у ЦСВ датотеку са Екпорт-цсв команда.

Прво, да видимо детаље грешке генерисане када покушате да се повежете са удаљеним рачунаром ван мреже са Гет-ВМИОбјецт . Да бисте ово илустровали, покрените наредбу испод…

|_+_|

Команда је генерисала поруку о грешци јер рачунар није важеће име рачунара.

Како ухватити грешке Гет-Процесс помоћу ПоверСхелл-а Покушајте Цатцх Статемент

Настављајући даље, да бих управљао грешком, покренућу команду унутар Покушати блок а Покушај да ухватиш изјава.

|_+_|

У првом реду од Покушати блок, дефинисао сам променљиву $ЦомпутерНаме. Затим, у другом реду, покренуо сам Гет-ВмиОбјецт команда.

Штавише, у Улов блок, направио сам детаље о грешци и извезао сам их у ЦСВ датотеку са Екпорт-цсв .

Ево детаљног објашњења скрипте у Покушати блокирати:

  1. У реду 1, направио сам променљиву $патх која одређује где желим да сачувам ЦСВ датотеку
  2. Затим, у реду 2, користио сам команду Гет-Дате да креирам име датотеке за ЦСВ датотеку. Име датотеке је у формату, ииииММдд_ХХммсс.цсв
  3. У реду 3, направио сам празан објекат сачуван у променљивој која се зове $дата
  4. Затим, у реду 4 додао сам колону „Назив рачунара“ у објекат који сам направио у реду 3. Колона узима променљиву $ЦомпутерНаме
  5. У реду 5, додао сам волумен „Поруке о грешци“ који ће сачувати поруке о грешци, $еррор.Екцептион.Мессаге
  6. Затим, у реду 6, направио сам променљиву $цсвфилепатх која комбинује променљиве $патх и $цсвфиленаме да бих направио пуну путању до ЦСВ датотеке
  7. Коначно, у реду 7, проследио сам информације сачуване у променљивој $дата ($ЦомпутерНаме и $еррор.Екцептион.Мессаге) у Екпорт-цсв и сачувао датотеку у $цсвфилепатх
Тхе НоТипеИнформатион параметар у команди Екпорт-цсв уклања информације о типу. Тор сазнајте више, прочитајте наш водич, Поверсхелл НоТипеИнформатион: Апликације и примери

Снимак екрана испод приказује ЦСВ креиран помоћу скрипте...

Како ухватити грешке Гет-Процесс помоћу ПоверСхелл-а Покушај да ухватиш Изјава

Ако покренете команду Гет-Процесс са ИД-ом процеса који не постоји, вратиће а Мицрософт.ПоверСхелл.Цоммандс.ПроцессЦоммандЕкцептион грешка.

Да бисте ухватили ову специфичну врсту изузетка, покрените команду сличну оној испод:

|_+_|

Ево резултата скрипте у ПоверСхелл ИСЕ.

Алтернативно, можете дефинисати прилагођену поруку о грешци тако што ћете модификовати скрипту као што је приказано у наставку...

|_+_|

Сада скрипта враћа прилагођену поруку о грешци...

Како ухватити грешке Гет-Маилбок-а помоћу ПоверСхелл-а Покушај да ухватиш Изјава

Ако се повежете на Оффице 365 ПоверСхелл и покренете Гет-Маилбок против корисника који не постоји, добићете поруку о грешци. Неки корисници су пријавили да имају проблема са снимањем поруке о грешци Гет-Маилбок команда.

Да бисте тестирали овај сценарио, након повезивања на наш Оффице 365 налог преко ПоверСхелл-а, покренуо сам скрипту испод:

|_+_| Корисник Пиус не постоји на нашем Оффице 365 налогу.

Скрипта је вратила поруку о грешци Операција није могла да се изврши јер објекат „Пиус“ није могао да се пронађе на „АМ6ПР05А05ДЦ002.ЕУРПР05А005.ПРОД.ОУТЛООК.ЦОМ '.

Ево снимка екрана…

Међутим, ако Покушај да ухватиш ухвати грешку, покушајте да додате тип изузетка као што је приказано у модификованој команди испод:

|_+_|

То је то – наш свеобухватан и ажуриран водич о ПоверСхелл-у Покушајте Цатцх Финал ли! Надам се да вам је било од помоћи?

Ако вам је било од помоћи, љубазно гласајте да на питање Да ли је овај пост био користан у наставку.

Алтернативно, можете поставити питање, оставити коментар или дати додатне повратне информације помоћу обрасца Оставите одговор који се налази на крају ове странице.

Коначно, за више ПоверСхелл техничких С зона, посетите нашу страницу водича за Виндовс ПоверСхелл Хов-То. Можда ће вам такође бити од велике помоћи наша страница Рад од куће.

Референце и даље читање

  1. О Три Цатцх Финалли
  2. О Трапу
  3. ПоверСхелл низ и додавање у низ: апликације и примери
  4. Објашњење Поверсхелл-а за петљу: синтакса и примери