Kako uporabljati PowerShell Poskusite Catch Finally za obravnavo napak
PowerShell Poskusite Catch blok se uporablja za obravnavo napak pri skriptiranju PowerShell. Ko uporabljate PowerShell Poskusite Catch blok za skriptiranje lahko dosežete naslednje:
- Naj se vaš skript kljub napaki še naprej izvaja
- Bolje prikazujte in obravnavajte sporočila o napakah
V tem priročniku se boste naučili uporabljati Powershell Poskusite Catch bloki za obdelavo sporočil o prekinitvi napake v PowerShell. Poleg tega se boste naučili, kako vključiti končno blok v a Poskusite Catch blok.
Vodnik se začne s sintakso Poskusite Catch blok.
Brskajte po temah objav
- PowerShell Preizkusite sintakso Catch
- Pogoste vrste izjemnih napak v PowerShell Poskusite Catch
- Kako zajeti posebne izjeme s PowerShell Poskusite Catch
- Kako vključiti končni blok v izjavo PowerShell Try Catch
- Dodatne uporabne informacije o PowerShell Poskusite Catch
- Kako počistiti PowerShell Poskusite ujeti samodejno spremenljivko $Error
- Kako prikazati sporočilo o napaki po meri v PowerShell Poskusite Catch Block
- Kako pridobiti informacije o kategorijah napak v PowerShell Poskusite Catch
- Kako uporabljati Write-Host za prikaz sporočil o napakah v PowerShell Poskusite Catch
- Kako ustvariti Hashtable v PowerShell Poskusite Catch Block
- PowerShell Poskusite Catch Primere
- Reference in dodatno branje
PowerShell Poskusite Catch Sintaksa
Sintaksa PowerShell Poskusite Catch je…
|_+_|
The Poskusi je del bloka, za katerega želite, da PowerShell spremlja napake. To je blok z izvirnimi skripti, ki lahko vrne napako pri zaključku.
Ko pride do napake v bloku Try, PowerShell shrani napako v samodejno spremenljivko $Error (več o tem kasneje).
Po drugi strani pa t on ujeti izjavo PowerShell Poskusite Catch blok obravnava napake, ustvarjene v bloku try. Določite lahko tudi vrste napak, ki se obravnavajo znotraj Ujemi izjavni blok.
The končno blok se lahko uporabi za sprostitev vseh virov, ki jih skript ne potrebuje več.
kako brezžično polniti opomba 8
Pogoste vrste izjemnih napak v PowerShell Poskusite Catch
V bloku PowerShell Try Catch lahko obravnavate različne vrste napak. Na primer, lahko obravnavate določene napake.
Poleg tega lahko upravljate s splošnimi sporočili o napakah. Vendar pa morate za obravnavanje določenih vrst napak poznati vrsto napake.
kasneje v tem priročniku boste izvedeli, da so sporočila o napakah shranjena v samodejni spremenljivki $error. Poleg tega se lahko napake shranijo tudi v spremenljivko cevovoda $_.
Poleg tega so napake, shranjene v avtomatski spremenljivki $error, shranjene v matriki. Za pomoč pri razlagi tega, zaženimo ukaz, ki vrne sporočilo o končani napaki:
Če želite počistiti vse prej shranjene napake v $napaka samodejno spremenljivko, preden zaženete spodnji ukaz, najprej zaženite $error.Clear() ukaz. |_+_| Dnevnika dogodkov z imenom Systerr ni, zato bo ukaz v bloku Try poslal sporočilo o napaki.Presenetljivo je, da ukaz ni prikazal nobenega sporočila o napaki. Torej, kaj se je zgodilo s sporočilom o napaki?
Shranjen je v avtomatski spremenljivki $error! Če želite prikazati napako iz zadnjega ukaza, shranjeno v spremenljivki $error, zaženite ukaz ...
|_+_|Rezultat ukaza prikaže podrobnosti o napaki, shranjene v avtomatski spremenljivki $error. Informacije o napaki imajo razdelek z imenom FullyQualifiedErrorId .
Za to specifično napako, FullyQualifiedErrorId ima dva sklopa informacij – System.InvalidOperationException in Microsoft.PowerShell.Commands.GetEventLogCommand .
Informacije, ki nas zanimajo, so System.InvalidOperationException . To je vrsta napake, ki jo lahko ujeti v bloku PowerShell Try Catch.
Če želite dobiti ime te izjeme PowerShell, zaženite spodnji ukaz:
|_+_|Tukaj je, System.InvalidOperationException !
V naslednjih nekaj pododdelkih bom razpravljal o pogostih napakah PowerShell Try Catch Exception.
PowerShell Poskusite Catch CommandNotFoundException Napaka
Če zaženete ukaz, ki ne obstaja v PowerShell ali Microsoftovem ukaznem pozivu, boste prejeli sporočilo o napaki. Na primer, če zaženete Get-File ukaz, boste prejeli sporočilo o napaki, ker ta ukaz ni veljaven ukazni ukaz PowerShell.
Tukaj je posnetek zaslona rezultata ukaza v PowerShell ...
Kot lahko vidite na posnetku zaslona, je vrsta izjeme (FullyQualifiedErrorId) CommandNotFoundException .
Ker je to napaka pri zaključku, bo preprečila nadaljevanje vašega skripta. Če želite preprečiti, da bi ta napaka končala vaš skript, ovijte ukaz v a Poskusite Catch blok.
Če to napako zavijemo v blok PowerShell Try Catch, bo PowerShell preprečil napako. Poleg tega bo preprečil prekinitev vašega skripta.
Kljub temu, da je napaka potlačena, je shranjena v spremenljivko $error. Kot običajno, preden zaženete spodnji ukaz, najprej počistite napake, shranjene v spremenljivki $error.
|_+_|Če želite zagnati ukaz v PowerShell namesto v PowerShell ISE, vnesite ukaze v eno vrstico, kot je prikazano spodaj:
|_+_|Nato za prikaz napake zaženite ...
|_+_|
Kot sem omenil v glavnem uvodu v ta razdelek, za prikaz ID-ja izjeme za to napako zaženite spodnji ukaz:
|_+_|Polno ime izjeme je System.Management.Automation.CommandNotFoundException .
PowerShell Poskusite Catch ManagementObjectNotFoundException Napaka
Ko zaženete ukaz v oddaljeni seji PS z napačnimi informacijami, PowerShell vrne a ManagementObjectNotFoundException napaka.
Tipičen scenarij je, ko se povežete s Office 365 s PowerShell. Nato zaženite ukaz Get-User, vendar navedite napačnega uporabnika identiteto .
Če želite ujeti to napako s PowerShell Try Catch, uporabite ukaz, podoben spodnjemu:
|_+_| Lovljenje ManagementObjectNotFoundException napaka s PowerShell Poskusite, Catch je še posebej zapleten. Uporabiti morate ErrorAction parameter in določite Ustavi se . V nasprotnem primeru bo napaka še vedno prikazana tudi pri možnostih Try, Catch.Končno, da dobite ime izjeme, uporabite spodnji ukaz:
|_+_|Ukaz vrne vrsto izjeme kot System.Management.Automation.RemoteException . Torej, kaj je ManagementObjectNotFoundException ?
ManagementObjectNotFoundException je razlog za izjemo, kot potrjuje spodnji ukaz:
|_+_|
PowerShell Poskusite Catch UnauthorizedAccessException Napaka
Druga pogosta napaka izjeme PowerShell je UnauthorizedAccessException . Ta vrsta napake se pojavi, ko poskušate dostopati do elementa, za katerega nimate vsaj dovoljenja za branje.
Za ponazoritev tega primera sem preverjenim uporabnikom zavrnil dostop do določene datoteke v mojem računalniku.
Zdaj, če poskušam dostopati do datoteke z ukazom Get-Content, prejmem sporočilo o zavrnjenem dostopu.
|_+_|
Če želite ustaviti prikaz te napake, zaženite ukaz v bloku PowerShell Try Catch, kot je prikazano spodaj ...
|_+_|Na žalost zgornji ukaz ne ustavi prikaza napake. Razlog je v tem, da ne gre za zaključno napako.
Če želite ustaviti prikazovanje napake, vključite ErrorAction parameter in določite Ustavi se .
|_+_|Zdaj ukaz zaduši napako. Če želite prikazati vrsto izjeme, zaženite spodnji ukaz ...
|_+_|Vrsta izjeme je System.UnauthorizedAccessException .
Obstaja več vrst napak izjem, kot je opisano v tem razdelku. Zajel sem le najpogostejše vrste izjem.Kako zajeti posebne izjeme s PowerShell Poskusite Catch
Zadnji razdelek je obravnaval pogoste izjeme PowerShell in kako najti vrsto izjeme. V tem razdelku je opisano, kako uporabiti te informacije za zajemanje posebnih vrst sporočil o napakah.
V razdelku o sintaksi tega priročnika sem rekel, da je splošna sintaksa PowerShell Try Catch Finally …
|_+_|V bloku catch sintakse lahko vidite [vrsta napake]. Tukaj določite vrsto napake, ki jo želite ujeti v tem bloku.
kodi addons kitajski filmi
Če želite na primer ujeti napake UnauthorizedAccessException, uporabite spodnje izjave ...
|_+_|Če želite zagnati ukaz v PowerShell, podajte stavke v eni vrstici. Prvi del stavka – $error.Clear() – počisti vse napake, shranjene v spremenljivki $error.
|_+_|Kako dodati več Ujemi Bloki v PowerShell Poskusite Catch Izjava
V uvodu tega razdelka sem vam pokazal, kako ujeti določeno vrsto izjem v Ujemi blok. Določite lahko več
Tukaj je primer…
|_+_|V tem primeru je prvi ujeti blok obravnava določene vrste izjem. Poleg tega drugo ujeti blok ročaji obravnavajo splošne napake.
Kako ekstrahirati izjemo napak s PowerShell Poskusite Catch
Zadnji pododdelek je pokrival, kako določiti več blokov catch za obravnavanje različnih vrst izjem. V tem pododdelku se boste naučili, kako ekstrahirati podrobnosti o napaki v izjemi.
Za ponazoritev tega bom uporabil primer, ki sem ga uporabil prej. Zaženite ta stavek PowerShell v PowerShell.
|_+_|Zdaj zaženite samo $error ...
|_+_|Čeprav je v spremenljivki $error shranjenih več informacij, je dejansko sporočilo o napaki poudarjeno na spodnjem posnetku zaslona.
Če želite to napako prijaviti v besedilno datoteko, morate zabeležiti le dejanske podrobnosti o napaki. Če želite izločiti to napako, uporabite spodnji ukaz:
|_+_|Ukaz izvleče dejansko sporočilo o napaki. Dostop do poti 'D:PS-Tutorialfolder-names.txt' je zavrnjen.
To sporočilo o napaki lahko zapišete v datoteko dnevnika, tako da vključite a Out-File ukaz v bloku Catch.
|_+_| Vključil sem Pripni parameter v Out-File ukaz za omogočanje beleženja več vnosov brez prepisanja prejšnjih vnosov.Da bi lažje razumeli zadnji ukaz, ga bom ponovno napisal v skriptni obliki spodaj ...
|_+_|Kako vključiti A končno Blokiraj v PowerShell Poskusite Catch Izjava
Vključite lahko a končno blokirajte v PowerShell Poskusite Catch Izjava. Sintaksa je
|_+_|The končno blok se lahko uporabi za sprostitev vseh virov, ki jih skript ne potrebuje več.
Blok Finally se zažene tudi, če za zaustavitev skripta uporabite CTRL+C. Blok se bo zagnal tudi, če ključna beseda Exit zaustavi skript znotraj bloka Catch.V zadnjem primeru sem imel stavek, ki zapiše dnevnik napak v besedilno datoteko v Ujemi blok. Vendar pa je najboljše mesto za to izjavo v a končno blok.
Spodaj si oglejte spremenjen skript ...
|_+_|Dodatne uporabne informacije o PowerShell Poskusite Catch
V tem razdelku bom delil nekaj preprostih, a uporabnih informacij o PowerShell Try Catch.
Kako počistiti PowerShell Poskusite ujeti samodejno spremenljivko $Error
Samodejna spremenljivka $error ima a Jasno Metoda. S to metodo lahko počistite vse napake, shranjene v samodejni spremenljivki $error.
Če želite počistiti vse napake, shranjene v avtomatski spremenljivki $error za trenutno sejo PowerShell, zaženite spodnji ukaz.
|_+_|Kako prikazati sporočilo o napaki po meri v PowerShell Poskusite Catch Block
Če želite prikazati sporočilo o napaki po meri v PowerShell Try Catch Block, uporabite besedo Throw. Tukaj je primer…
|_+_|Tukaj je rezultat tega skripta v PowerShell ISE.
Kako pridobiti informacije o kategorijah napak v PowerShell Poskusite Catch
Samodejna spremenljivka $error ima lastnost, imenovano CategoryInfo. Če si želite ogledati to lastnost ter druge lastnosti in metode, zaženite spodnji ukaz ...
|_+_|Ena od lastnosti, ki jih vrne zadnji ukaz, se kliče Informacije o kategoriji .
Za dostop do teh informacij zaženite spodnji ukaz.
|_+_|Ta ukaz vrne več podlastnosti.
Do vsake od teh podlastnosti lahko dostopate tako, da po piki dodate ime podlastnosti. Če želite na primer prikazati podlastnosti Razloga, zaženite spodnji ukaz.
|_+_|
Kako uporabljati Write-Host za prikaz sporočil o napakah v PowerShell Poskusite Catch
Tako kot lastnost CategoryInfo v zadnjem pododdelku ima tudi samodejna spremenljivka $error lastnost, imenovana Izjema . Če želite prikazati izjemo v napaki, zaženite spodnji ukaz:
|_+_|
Na žalost, če poskušate prikazati te informacije z ukazom Write-Host, ne deluje po pričakovanjih.
|_+_|Tukaj je rezultat tega ukaza v PowerShell...
Kot lahko vidite, ukaz prikaže kup drugih informacij. Dobra novica je to $error.Exception ima še eno lastnost imenovano Sporočilo .
To podlastnost lahko pokličete tako, da jo dodate $error.Exception , Všečkaj to…
korenski samsung sm-n950u|_+_|
Poleg tega lahko uporabite Write-Host ukaz za prikaz te informacije o napaki ...
|_+_|Zadnji ukaz zdaj prikaže dejansko sporočilo o napaki ...
Razen, da obstaja poseben razlog za uporabo Write-Host kot je prikazano v zadnjem ukazu, lahko preprosto prikažete isto sporočilo o napaki z $error.Exception ukaz.Kako ustvariti Hashtable v PowerShell Poskusite Catch Block
Obstajata dva pogosta načina, kako lahko ustvarite a PowerShell hashtable v bloku Try Catch.
- V bloku Try lahko ustvarite hashtable z več pari ključ/vrednost
- Lahko pa ustvarite eno samo razpredelnico ključa/vrednosti z Ključ zunaj Poskusite Catc h blok in vrednost znotraj Poskusite Catc h blok.
Tukaj je primer prve metode ...
|_+_|Kot lahko vidite, je hasttable znotraj Poskusite Catc h blok...
Po drugi strani pa lahko ustvarite en sam ključ razpršene tabele z vrednostjo, definirano znotraj a Poskusite Catc h blok. Tukaj je primer…
|_+_|Za potrditev, da zadnji skript ustvari hashtable PowerShell, sem po zagonu skripta poklical vrednosti, shranjene v spremenljivki $hashtable.
Kot lahko vidite iz rezultata zadnjega ukaza, ima par Ime/Vrednost!
PowerShell Poskusite Catch Primere
V tem zadnjem razdelku bom obravnaval več primerov uporabe PowerShell Try Catch.
Kako uporabljati PowerShell Poskusite Catch Z Get-Childitem
Ukaz Get-Childitem lahko vrne več napak. Za ponazoritev dveh pogostih napak bom uporabil spodnja dva ukaza:
|_+_|Pravilna pot do besedilne datoteke, uporabljene v zadnjem ukazu, je D:PS-Tutorialfilelist.txt.
Vendar sem v prvi ukaz vključil presledek za D:PS-Tutorial. To je povzročilo napako (podrobnosti napake bomo določili kmalu).
paradižnik dd-wrt
Tudi v drugem ukazu sem navedel pravilno pot, vendar sem uporabil napačno ime datoteke. To je povzročilo napako.
|_+_|
Če želite dobiti več informacij o teh napakah, bom zagnal ukaze v PowerShell Poskusite Catch blok.
|_+_|Naša prva naloga je določiti vrste napak, ki jih vrnejo ukazi. Če želite dobiti te informacije, zaženite spodnje ukaze ...
|_+_|Tukaj so rezultati ukazov ...
Napake, shranjene v avtomatski spremenljivki $error, so shranjene v polju PowerShell. Do vsakega predmeta v matriki se dostopa z dodajanjem [0], [1] na koncu matrike. 0 predstavlja prvi element v matriki, medtem ko 1 predstavlja drugi element in tako naprej.Nazaj k pridobivanju več informacij o napakah, ki jih vrže Get-Childitem ukaz, na podlagi vrst napak, lahko spremenimo naš blok Try Catch, da zajame ti dve vrsti napak ...
|_+_|Naša druga naloga je prikazati dejanska sporočila o napakah. Ta ukaz bo opravil nalogo:
|_+_|Ukaz prikaže dve sporočili o napaki ...
Kako uporabljati PowerShell Poskusite Catch Če želite izvoziti napake Get-WMIObject z Export-csv
V tem pododdelku bom izvozil napake, ustvarjene med zagonom Get-WMIObject na oddaljenem računalniku v datoteko CSV z Izvozi-csv ukaz.
Najprej si oglejmo podrobnosti o napaki, ustvarjene, ko se poskusite povezati z oddaljenim računalnikom brez povezave z Get-WMIObject . Za ponazoritev tega zaženite spodnji ukaz ...
|_+_|Ukaz je ustvaril sporočilo o napaki, ker Računalnik ni veljavno ime računalnika.
Za obvladovanje napake bom zagnal ukaz znotraj Poskusi blok a Poskusite Catch izjava.
|_+_|V prvi vrstici Poskusi blok, sem definiral spremenljivko $ComputerName. Nato sem v drugi vrstici pognal Get-WmiObject ukaz.
Poleg tega v Ujemi blok, sem ustvaril podrobnosti o napaki in jih izvozil v datoteko CSV z Izvozi-csv .
Tukaj je podrobna razlaga scenarija v Poskusi blok:
- V 1. vrstici sem ustvaril spremenljivko $path, ki določa, kam želim shraniti datoteko CSV
- Nato sem v 2. vrstici uporabil ukaz Get-Date, da sem ustvaril ime datoteke za datoteko CSV. Ime datoteke je v obliki, llllMMdd_HHmmss.csv
- V 3. vrstici sem ustvaril prazen predmet, shranjen v spremenljivki, imenovani $data
- Nato sem v 4. vrstici dodal stolpec »Ime računalnika« v objekt, ki sem ga ustvaril v 3. vrstici. Stolpec prevzame spremenljivko $ComputerName
- V 5. vrstici sem dodal nosilec »Sporočilo o napaki«, ki bo shranil sporočila o napakah, $error.Exception.Message
- Nato sem v 6. vrstici ustvaril spremenljivko $csvfilepath, ki združuje spremenljivki $path in $csvfilename, da ustvari celotno pot do datoteke CSV
- Končno sem v vrstici 7 podatke, shranjene v spremenljivki $data ($ComputerName in $error.Exception.Message), prestavil v Izvozi-csv in shranil datoteko v $csvfilepath
Spodnji posnetek zaslona prikazuje CSV, ki ga je ustvaril skript ...
Kako ujeti napake Get-Process s PowerShell Poskusite Catch Izjava
Če zaženete ukaz Get-Process z ID-jem procesa, ki ne obstaja, bo vrnil a Microsoft.PowerShell.Commands.ProcessCommandException napaka.
Če želite zajeti to posebno vrsto izjeme, zaženite ukaz, podoben spodnjemu:
|_+_|Tukaj je rezultat skripta v PowerShell ISE.
Lahko pa določite sporočilo o napaki po meri tako, da spremenite skript, kot je prikazano spodaj…
|_+_|Zdaj skript vrne sporočilo o napaki po meri ...
Kako ujeti napake Get-Mailbox s PowerShell Poskusite Catch Izjava
Če se povežete z Office 365 PowerShell in zaženete Get-poštni predal proti uporabniku, ki ne obstaja, boste prejeli sporočilo o napaki. Nekateri uporabniki so poročali, da imajo težave pri zajemanju sporočila o napaki Get-poštni predal ukaz.
Če želite preizkusiti ta scenarij, potem ko se povežete z našim Račun Office 365 prek PowerShell-a sem zagnal spodnji skript:
|_+_| Uporabnik Pius ne obstaja v našem računu Office 365.Skript je vrnil sporočilo o napaki Operacije ni bilo mogoče izvesti, ker predmeta »Pius« ni bilo mogoče najti na »AM6PR05A05DC002.EURPR05A005.PROD.OUTLOOK.COM '.
Tukaj je posnetek zaslona…
Vendar, če Poskusite Catch ali ujame napako, poskusite dodati vrsto izjeme, kot je prikazano v spremenjenem ukazu spodaj:
|_+_|To je to – naš izčrpen in posodobljen vodnik o PowerShell Poskusite Catch Final ly! Upam, da vam je bilo v pomoč?
Če se vam zdi v pomoč, vljudno glasujte da na spodnje vprašanje Ali je bila ta objava koristna.
Lahko pa postavite vprašanje, pustite komentar ali pošljete več povratnih informacij z obrazcem za pustite odgovor na koncu te strani.
Nazadnje, za več PowerShell tech S con obiščite našo stran z navodili za Windows PowerShell. Morda vam bo v veliko pomoč tudi naša stran Delo od doma.
Reference in dodatno branje
- O storitvi Try Catch Finally
- O Trapu
- Polje PowerShell in Dodaj v matriko: aplikacije in primeri
- Pojasnilo zanke Powershell For: sintaksa in primeri


