Kuidas kasutada PowerShelli, proovige lõpuks püüda vigade haldamiseks

15. juuli 2021 10258 Vaated Muu oluline teave PowerShelli proovi kohta

PowerShell Proovige Catchi plokki kasutatakse PowerShelli skriptimise vigade käsitlemiseks. PowerShelli kasutamisel Proovige Catchi skriptimise ploki abil saate saavutada järgmise:





  1. Jätkake oma skripti töötamist hoolimata veast
  2. Kuvage ja käsitlege veateateid paremini

Sellest juhendist saate teada, kuidas Powershelli kasutada Proovige Catchi blokeerib PowerShelli lõpetavate veateadete käsitlemiseks. Lisaks saate teada, kuidas lisada Lõpuks blokk a Proovige Catchi blokk.



Juhend algab süntaksiga Proovige Catchi blokk.

Sirvi postituste teemasid



PowerShell Proovige Catchi Süntaks

PowerShell Proovige Catchi süntaksit

PowerShelli süntaks Proovige Catchi on…



|_+_|

The Proovi on ploki osa, mida soovite, et PowerShell jälgiks vigu. See on algsete skriptidega plokk, mis võib tagastada lõpetamisvea.

Kui prooviplokis ilmneb tõrge, salvestab PowerShell vea automaatsesse muutujasse $Error (sellest lähemalt hiljem).



Seevastu t ta püüda PowerShelli avaldus Proovige Catchi block käsitleb prooviplokis genereeritud vigu. Samuti saate määrata tõrketüübid, mida rakenduses käsitletakse Saagi avalduse plokk.



The Lõpuks blokki võib kasutada ressursside vabastamiseks, mida skript enam ei vaja.

PowerShelli erandvigade levinumad tüübid Proovige Catchi

PowerShelli vigade tüübid Proovige püüda

PowerShelli proovi püüdmise plokis saate käsitleda erinevat tüüpi vigu. Näiteks saate käsitleda konkreetseid vigu.

Lisaks saate käsitleda üldisi veateateid. Teatud tüüpi vigade käsitlemiseks peate siiski teadma vea tüüpi.

Hiljem sellest juhendist saate teada, et veateated salvestatakse automaatsesse muutujasse $error. Lisaks võidakse vead salvestada ka konveieri muutujasse $_.

Veelgi enam, automaatmuutuja $error salvestatud vead salvestatakse massiivi. Selle selgitamiseks käivitame käsu, mis tagastab lõpetava veateate:

Kõigi varem failis salvestatud vigade kustutamiseks $viga automaatne muutuja, enne kui käivitate alloleva käsu, käivitage esmalt $error.Clear() käsk. |_+_| Sündmuste logi nimega Systerr ei ole, seega annab käsk Prooviplokis veateate.

Üllataval kombel ei kuvanud käsk ühtegi veateadet. Niisiis, mis juhtus veateatega?

kas kodi saab panna nutitelerisse

See salvestatakse automaatmuutujas $error! Muutujasse $error salvestatud viimase käsu vea kuvamiseks käivitage käsk…

|_+_|

Käsu tulemus kuvab automaatmuutujas $error salvestatud vea üksikasjad. Veateatel on jaotis nimega FullyQualifiedErrorId .

Selle konkreetse vea puhul on FullyQualifiedErrorId sisaldab kahte teabekomplekti - System.InvalidOperationException ja Microsoft.PowerShell.Commands.GetEventLogCommand .

Teave, mis meid huvitab, on System.InvalidOperationException . See on teatud tüüpi viga, mida saate teha püüda PowerShelli proovi püüdmise plokis.

Selle PowerShelli erandi nime saamiseks käivitage allolev käsk:

|_+_|

Seal see on, System.InvalidOperationException !

Järgmistes alamjaotistes käsitlen levinud PowerShelli proovipüügi erandi tõrkeid.

PowerShell Proovi püüda CommandNotFoundException Viga

Kui käivitate käsu, mida PowerShellis või Microsofti käsuviibas pole, kuvatakse tõrketeade. Näiteks kui käivitate Hangi fail käsk, kuvatakse tõrketeade, kuna see käsk ei ole kehtiv PowerShelli käsk.

Siin on PowerShelli käsu tulemuse ekraanipilt ...

PowerShell Proovi Catch CommandNotFoundException Error

Nagu ekraanipildilt näete, on erandi tüüp (FullyQualifiedErrorId) CommandNotFoundException .

Kuna see on lõpetamisviga, peatab see teie skripti jätkamise. Selle tõrke skripti lõpetamise peatamiseks mähkige käsk a-sse Proovige Catchi blokk.

Kui mähime selle vea PowerShelli proovi püüdmise plokki, siis PowerShell summutab vea. Lisaks peatab see teie skripti lõpetamise.

Kuid isegi kui viga on summutatud, salvestatakse see muutujasse $error. Nagu tavaliselt, kustutage enne alloleva käsu käivitamist esmalt muutuja $error salvestatud vead.

|_+_|

Kui soovite käsku PowerShelli ISE asemel käivitada PowerShellis, tippige käsud ühele reale, nagu allpool näidatud:

|_+_|

Seejärel käivitage vea kuvamiseks...

|_+_|

Nagu ma selle jaotise peamises sissejuhatuses mainisin, käivitage selle vea erandi ID kuvamiseks allolev käsk:

|_+_|

Erandi täisnimi on System.Management.Automation.CommandNotFoundException .

PowerShell Proovi püüda ManagementObjectNotFoundException Viga

Kui käivitate PS-i kaugseansil vale teabega käsu, tagastab PowerShell a ManagementObjectNotFoundException viga.

Tüüpiline stsenaarium on siis, kui loote PowerShelli abil ühenduse Office 365-ga. Seejärel käivitage käsk Get-User, kuid sisestage vale kasutaja identiteet .

PowerShell Proovige Catch ManagementObjectNotFoundException Error

Selle vea tuvastamiseks rakendusega PowerShell Try Catch kasutage allolevaga sarnast käsku:

|_+_| Püüdes kinni ManagementObjectNotFoundException PowerShell Try viga, Catch on eriti keeruline. Peate kasutama ErrorAction parameeter ja täpsustage Peatus . Vastasel juhul kuvatakse tõrge isegi proovi, püüdmise korral.

Lõpuks kasutage erandi nime saamiseks allolevat käsku:

Logi sisse protsessi initsialiseerimise tõrke aknad 10
|_+_|

Käsk tagastab erandi tüübi kui System.Management.Automation.RemoteException . Niisiis, mis on ManagementObjectNotFoundException ?

ManagementObjectNotFoundException on erandi põhjus, mida kinnitab järgmine käsk:

|_+_|

PowerShell Proovi püüda Unauthorized AccessException Viga

Teine levinud PowerShelli erandi viga on Unauthorized AccessException . Seda tüüpi tõrge kuvatakse, kui proovite pääseda juurde üksusele, millel pole vähemalt lugemisõigust.

Selle näite illustreerimiseks keelasin autentitud kasutajatel juurdepääsu oma arvutis olevale konkreetsele failile.

PowerShell Proovige tabada UnauthorizedAccessException Error

Nüüd, kui proovin failile juurdepääsu käsuga Get-Content, kuvatakse teade juurdepääs keelatud.

|_+_|

Selle vea kuvamise peatamiseks käivitage käsk PowerShelli proovi püüdmise plokis, nagu allpool näidatud...

|_+_|

Kahjuks ei peata ülaltoodud käsk vea kuvamist. Põhjus on selles, et see ei ole lõpetav viga.

Vea kuvamise peatamiseks lisage ErrorAction parameeter ja täpsustage Peatus .

|_+_|

Nüüd summutab käsk vea. Erandi tüübi kuvamiseks käivitage allolev käsk ...

|_+_|

Erandi tüüp on System.UnauthorizedAccessException .

Erandite tõrkeid on rohkem kui selles jaotises käsitletu. Käsitlesin ainult kõige levinumaid erandeid.

Konkreetsete erandite jäädvustamine PowerShelli abil Proovi Catch

Konkreetsete erandite jäädvustamine PowerShelli abil Proovi Catch

Viimases jaotises käsitleti levinud PowerShelli erandeid ja erandi tüübi leidmist. See jaotis käsitleb, kuidas seda teavet kasutada teatud tüüpi veateadete jäädvustamiseks.

Selle juhendi süntaksi jaotises ütlesin, et PowerShell Try Catch Lõpuks üldine süntaks on…

|_+_|

Süntaksi püüdmisplokis näete [vea tüüp]. Siin saate määrata vea tüübi, mida soovite selles plokis tabada.

Näiteks UnauthorizedAccessExceptioni vigade tuvastamiseks kasutage allolevaid avaldusi...

|_+_|

Käsu käitamiseks PowerShellis määrake avaldused ühel real. Avalduse esimene osa – $error.Clear() – kustutab kõik muutujasse $error salvestatud vead.

|_+_|

Kuidas lisada mitu Saagi Plokid PowerShellis Proovige Catchi avaldus

Selle jaotise sissejuhatuses näitasin teile, kuidas tuvastada konkreetset tüüpi erand Saagi blokk. Saate määrata mitu

Siin on näide…

|_+_|

Selles näites esimene püüda block käsitleb määratud tüüpi erandeid. Pealegi teine püüda block käepidemed käsitleb üldisi vigu.

Kuidas PowerShelli abil veaerandit ekstraheerida Proovi Catch

Viimane alajaotis käsitles mitme püügiploki määramist erinevat tüüpi erandite käsitlemiseks. Selles alajaotises saate teada, kuidas erandis vea üksikasju ekstraheerida.

Selle illustreerimiseks kasutan näidet, mida kasutasin varem. Käivitage see PowerShelli avaldus PowerShellis.

|_+_|

Nüüd käivitage $error üksi…

|_+_|

Kuigi muutujasse $error salvestatakse mitu teavet, on tegelik veateade alloleval ekraanipildil esile tõstetud.

Kuidas PowerShelli abil vea üksikasju ekstraheerida Proovi Catch

Kui soovite selle vea tekstifaili logida, peate logima ainult tegelikud vea üksikasjad. Selle vea ekstraktimiseks kasutage allolevat käsku:

|_+_|

Käsk ekstraktib tegeliku veateate Juurdepääs teele „D:PS-Tutorialfolder-names.txt” on keelatud.

Saate selle tõrketeate kirjutada logifaili, lisades a Väljaspool fail käsk Catch plokis.

|_+_| Lisasin Lisa parameetris Väljaspool fail käsk mitme kirje logimiseks ilma eelnevaid kirjeid üle kirjutamata.

Viimase käsu mõistmise hõlbustamiseks kirjutan selle uuesti allolevas skriptivormingus ...

|_+_|

Kuidas lisada A Lõpuks Blokeeri PowerShelliga Proovige Catchi avaldus

Kuidas kaasata PowerShelli lõplik plokk Proovi püüdmise avaldus

Võite lisada a Lõpuks blokeeri PowerShelli Proovige Catchi avaldus. Süntaks on

|_+_|

The lõpuks blokki võib kasutada ressursside vabastamiseks, mida skript enam ei vaja.

Lõpuks blokk töötab isegi siis, kui kasutate skripti peatamiseks klahvikombinatsiooni CTRL+C. Plokk käivitub ka siis, kui märksõna Väljumine peatab skripti püüdmisplokis.

Viimases näites oli mul avaldus, mis kirjutab vealogi tekstifaili failis Saagi blokk. Parim koht selle avalduse saamiseks on aga a Lõpuks blokk.

Vaadake muudetud skripti allpool ...

kas ipad toetab mkv-d
|_+_|

Kasulik lisateave PowerShelli Try Catchi kohta

Muu oluline teave PowerShelli proovi kohta

Selles jaotises jagan lihtsat, kuid kasulikku teavet PowerShell Try Catchi kohta.

PowerShelli kustutamine Proovige püüda automaatset muutujat $Error

Automaatmuutujal $error on a Selge meetod. Selle meetodi abil saate kustutada kõik automaatmuutujas $error salvestatud vead.

Kõigi praeguse PowerShelli seansi automaatmuutuja $error salvestatud vigade kustutamiseks käivitage allolev käsk.

|_+_|

Kuidas kuvada PowerShellis kohandatud tõrketeade Proovi püüda blokki

PowerShelli proovivõtuplokis kohandatud tõrketeate kuvamiseks kasutage sõna Viska. Siin on näide…

|_+_|

Siin on selle PowerShelli ISE skripti tulemus.

Kuidas kuvada PowerShellis kohandatud tõrketeade Proovi püüda blokki

Kuidas saada PowerShellis veakategooriateavet Proovige püüda

Automaatsel muutujal $error on atribuut nimega CategoryInfo. Selle atribuudi ja muude atribuutide ja meetodite vaatamiseks käivitage allolev käsk…

|_+_|

Kutsutakse välja üks viimase käsuga tagastatud atribuutidest Kategooriateave .

Selle teabe juurde pääsemiseks käivitage allolev käsk.

|_+_|

See käsk tagastab mitu alamatribuuti.

Kuidas saada PowerShellis veakategooriateavet Proovige püüda

Kõigile nendele alamatribuutidele pääseb juurde, lisades alamatribuutide nime pärast punkti. Näiteks alamatribuutide Põhjus kuvamiseks käivitage allolev käsk.

|_+_|

Kuidas kasutada Write-Hosti PowerShellis tõrketeadete kuvamiseks Proovige Catchi

Sarnaselt viimase alajaotise atribuudile CategoryInfo on ka automaatsel muutujal $error atribuut nimega Erand . Erandi kuvamiseks vea korral käivitage allolev käsk:

|_+_|

Kahjuks, kui proovite seda teavet kuvada käsuga Write-Host, ei tööta see ootuspäraselt.

|_+_|

Siin on selle käsu tulemus PowerShellis ...

Kuidas kasutada Write-Hosti PowerShellis tõrketeadete kuvamiseks Proovige Catchi

Nagu näete, kuvab käsk hunniku muud teavet. Hea uudis on see $error.Exception on veel üks vara nimega Sõnum .

Sellele alamvarale saate helistada, lisades selle $error.Exception , nagu nii…

|_+_|

Lisaks saate kasutada Write-Host käsk selle veateabe kuvamiseks...

|_+_|

Viimane käsk kuvab nüüd tegeliku veateate ...

Välja arvatud see, et kasutamiseks on konkreetne põhjus Write-Host nagu näidatud viimases käsus, saate lihtsalt kuvada sama veateate $error.Exception käsk.

Kuidas luua PowerShellis räsitabelit Proovige Catch Blocki

A. loomiseks on kaks levinumat viisi PowerShelli räsitabel proovi püüdmise plokis.

  1. Prooviplokis saate luua mitme võtme/väärtuse paariga räsitabeli
  2. Teise võimalusena saate luua ühe võtme/väärtuse räsitabeli Võti väljaspool Proovi Catc h plokk ja väärtus sees Proovi Catc h plokk.

Siin on näide esimesest meetodist…

|_+_|

Nagu näete, on kiirustabel sees Proovi Catc h blokk…

Teisest küljest saate luua ühe räsitava võtme, mille väärtus on määratletud a-s Proovi Catc h plokk. Siin on näide…

|_+_|

Kinnitamaks, et viimane skript toodab PowerShelli räsitabeli, kutsusin pärast skripti käivitamist muutuja $hashtable salvestatud väärtused.

Nagu viimase käsu tulemusest näha, on sellel nimi/väärtus paar!

PowerShelli proovi püüdmise näited

PowerShelli proovi püüdmise näited

Viimases jaotises käsitlen mitmeid näiteid PowerShell Try Catchi rakendusest.

Kuidas PowerShelli kasutada Proovige Catchi Get-Childitemiga

Käsk Get-Childitem võib tagastada mitu viga. Kahe levinud vea illustreerimiseks kasutan kahte allolevat käsku:

|_+_|

Viimases käsus kasutatud tekstifaili õige tee on D:PS-Tutorialfilelist.txt.

Kuid esimeses käsus lisasin pärast D:PS-Tutorial tühiku. Selle tulemuseks oli tõrge (selgitame vea üksikasjad peagi).

Samuti määrasin teises käsus õige tee, kuid kasutasin vale failinime. Selle tulemusena tekkis viga.

|_+_| PowerShelli kasutamine Proovige Catchi Get-Childitemiga

Nende vigade kohta lisateabe saamiseks käivitan käsud PowerShellis Proovige Catchi blokk.

|_+_|

Meie esimene ülesanne on määrata käskude tagastatud veatüübid. Selle teabe saamiseks käivitage allolevad käsud ...

|_+_|

Siin on käskude tulemused…

PowerShelli kasutamine Proovige Export-csv abil Get-WMIObjecti vigade eksportimiseks CatchiAutomaatmuutujas $error salvestatud vead salvestatakse PowerShelli massiivi . Igale massiivi objektile pääseb juurde, lisades massiivi lõppu [0], [1]. 0 tähistab massiivi esimest üksust, samas kui 1 tähistab teist üksust ja nii edasi.

Tagasi lisateabe saamiseks rakenduse tekitatud vigade kohta Get-Childitem veatüüpide põhjal saame muuta oma Proovi püüdmise plokki, et tabada neid kahte tüüpi tõrkeid…

|_+_|

Meie teine ​​ülesanne on kuvada tegelikud veateated. See käsk täidab järgmise töö:

|_+_|

Käsk kuvab kaks veateadet ...

Kuidas PowerShelli kasutada Proovige Catchi Get-WMIObjecti vigade eksportimiseks Export-csv-ga

Selles alajaotises ekspordin käivitamisel tekkinud vead Hangi-WMIObject kaugarvutis CSV-faili koos Ekspordi-csv käsk.

Esiteks vaatame vea üksikasju, mis tekivad, kui proovite luua ühenduse võrguühenduseta kaugarvutiga Hangi-WMIObject . Selle illustreerimiseks käivitage allolev käsk ...

|_+_|

Käsk genereeris veateate, kuna Arvuti ei ole kehtiv arvuti nimi.

Get-Process Vigade tuvastamine PowerShelli abil Proovi Catch Statement

Edasi liikudes käivitan vea haldamiseks käsu rakenduses Proovi plokk a Proovige Catchi avaldus.

|_+_|

Esimesel real Proovi plokk, määratlesin muutuja $ComputerName. Siis, teisel real, jooksin Hangi-WmiObject käsk.

Veelgi enam, aastal Saagi blokki, lõin vea üksikasjad ja eksportisin selle CSV-faili Ekspordi-csv .

Siin on skripti üksikasjalik selgitus Proovi plokk:

  1. 1. real lõin muutuja $path, mis määrab, kuhu ma tahan CSV-faili salvestada
  2. Seejärel kasutasin real 2 käsku Get-Date, et luua CSV-failile failinimi. Faili nimi on vormingus, yyyyMMdd_HHmmss.csv
  3. 3. real lõin tühja objekti, mis on salvestatud muutujasse nimega $data
  4. Seejärel lisasin real 4 veeru „Arvuti nimi” real 3 loodud objektile. Veerg võtab muutuja $ComputerName
  5. 5. reale lisasin veateate, mis salvestab veateated, $error.Exception.Message
  6. Seejärel lõin real 6 muutuja $csvfilepath, mis ühendab muutujad $path ja $csvfilename, et luua CSV-faili täielik tee
  7. Lõpuks sisestasin real 7 muutujas $data salvestatud teabe ($ComputerName ja $error.Exception.Message) Ekspordi-csv ja salvestas faili kausta $csvfilepath
The NoTypeInformation parameeter käsus Export-csv eemaldab tüübiteabe. Lisateabe saamiseks lugege meie juhendit Powershell NoTypeInformation: rakendused ja näited

Allolev ekraanipilt näitab skripti loodud CSV-d…

märkus 8 snapdragon bootloaderi avamine

Kuidas PowerShelliga hankimisprotsessi vigu tuvastada Proovige Catchi avaldus

Kui käivitate käsu Get-Process protsessi ID-ga, mida pole olemas, tagastab see a Microsoft.PowerShell.Commands.ProcessCommandException viga.

Seda konkreetset tüüpi erandi jäädvustamiseks käivitage allolevaga sarnane käsk:

|_+_|

Siin on PowerShelli ISE skripti tulemus.

Teise võimalusena saate määratleda kohandatud veateate, muutes skripti, nagu allpool näidatud...

|_+_|

Nüüd tagastab skript kohandatud veateate ...

Kuidas PowerShelliga hankida postkasti vigu Proovige Catchi avaldus

Kui loote ühenduse Office 365 PowerShelliga ja käivitate Hangi postkast kasutaja vastu, keda pole olemas, kuvatakse tõrketeade. Mõned kasutajad on teatanud, et neil on probleeme veateate salvestamisega Hangi postkast käsk.

Selle stsenaariumi testimiseks pärast meiega ühenduse loomist Office 365 konto PowerShelli kaudu käivitasin alloleva skripti:

|_+_| Kasutajat Piust meie Office 365 kontol ei eksisteeri.

Skript tagastas veateate Toimingut ei saanud sooritada, kuna saidilt AM6PR05A05DC002.EURPR05A005.PROD.OUTLOOK.COM ei leitud objekti 'Pius' '.

Siin on ekraanipilt…

Kui aga Proovige Catchi tabab vea, proovige lisada erandi tüüp, nagu on näidatud allolevas muudetud käsus:

|_+_|

See on kõik – meie põhjalik ja ajakohastatud juhend PowerShelli kohta Proovige Catch Finali ly! Loodan, et leidsite sellest abi?

Kui leidsite sellest abi, hääletage lahkesti Jah Kas see postitus oli kasulik allpool olevale küsimusele.

Teise võimalusena võite esitada küsimuse, jätta kommentaari või anda rohkem tagasisidet, kasutades selle lehe lõpus asuvat vormi Jäta vastus.

Lõpuks, rohkemate PowerShelli tehniliste S-tsoonide vaatamiseks külastage meie Windows PowerShelli juhendi lehte. Samuti võib teile palju abi olla meie lehelt Work from Home.

Viited ja lisalugemine

  1. Teave Proovi püüda lõpuks
  2. Trapi kohta
  3. PowerShelli massiiv ja massiivi lisamine: rakendused ja näited
  4. Powershell for Loop Explained: süntaks ja näited