PowerShellin käyttäminen Kokeile Catchia lopuksi käsitelläksesi virheet

15. heinäkuuta 2021 10258 Näkymät Muita tärkeitä tietoja PowerShell Tryistä

PowerShell Yritä saada kiinni lohkoa käytetään PowerShell-komentosarjan virheiden käsittelemiseen. PowerShellia käytettäessä Yritä saada kiinni lohko komentosarjoille, voit saavuttaa seuraavat:





  1. Jatka skriptisi suorittamista virheestä huolimatta
  2. Näytä ja käsittele virheilmoitukset paremmin

Tässä oppaassa opit käyttämään Powershelliä Yritä saada kiinni lohkoja käsittelemään päättyviä virheilmoituksia PowerShellissä. Lisäksi opit sisällyttämään Lopulta lohko a Yritä saada kiinni lohko.



Opas alkaa syntaksilla Yritä saada kiinni lohko.

Selaa viestien aiheita



PowerShell Yritä saada kiinni Syntaksi

PowerShell Kokeile Catch Syntaksia

PowerShellin syntaksi Yritä saada kiinni On…



|_+_|

The Yrittää on se osa lohkosta, jota PowerShellin tarkkailevan virheiden varalta. Tämä on lohko, jossa on alkuperäiset skriptit, jotka voivat palauttaa lopetusvirheen.

Kun Try-lohkossa tapahtuu virhe, PowerShell tallentaa virheen automaattiseen muuttujaan $Error (tästä lisää myöhemmin).



Toisaalta t hän saada kiinni PowerShellin lausunto Yritä saada kiinni block käsittelee try-lohkossa syntyneet virheet. Voit myös määrittää, minkä tyyppisiä virheitä käsitellään Saada kiinni lausekelohko.



The Lopulta lohkoa voidaan käyttää vapauttamaan resursseja, joita komentosarja ei enää tarvitse.

Poikkeusvirheiden yleiset tyypit PowerShellissä Yritä saada kiinni

Virhetyypit PowerShellissä Kokeile Catchia

Voit käsitellä erityyppisiä virheitä PowerShell Try Catch -lohkossa. Voit esimerkiksi käsitellä tiettyjä virheitä.

Lisäksi voit käsitellä yleisiä virheilmoituksia. Tietyntyyppisten virheiden käsittelemiseksi sinun on kuitenkin tiedettävä virheen tyyppi.

Myöhemmin tässä oppaassa opit, että virheilmoitukset tallennetaan automaattiseen $error-muuttujaan. Lisäksi virheet voidaan tallentaa myös liukuhihnamuuttujaan $_.

Lisäksi automaattiseen muuttujaan $error tallennetut virheet tallennetaan taulukkoon. Selvittääksesi tämän, suoritetaan komento, joka palauttaa lopettavan virhesanoman:

Poistaaksesi kaikki aiemmin tallennetut virheet $error automaattinen muuttuja, ennen kuin suoritat alla olevan komennon, suorita ensin $error.Clear() komento. |_+_| Systerr-nimistä tapahtumalokia ei ole, joten Try-lohkon komento antaa virheilmoituksen.

Yllättäen komento ei näyttänyt mitään virheilmoitusta. Joten mitä tapahtui virheilmoitukselle?

Se tallennetaan automaattiseen muuttujaan $error! Jos haluat näyttää virheen viimeisestä komennosta, joka on tallennettu $error-muuttujaan, suorita komento…

|_+_|

Komennon tulos näyttää automaattiseen muuttujaan $error tallennetut virhetiedot. Virhetiedoissa on osio nimeltä FullyQualifiedErrorId .

Tätä erityistä virhettä varten FullyQualifiedErrorId sisältää kaksi tietojoukkoa - System.InvalidOperationException ja Microsoft.PowerShell.Commands.GetEventLogCommand .

Meitä kiinnostavat tiedot ovat System.InvalidOperationException . Tämä on virhetyyppi, jonka voit tehdä saada kiinni PowerShell Try Catch -lohkossa.

Saadaksesi tämän PowerShell-poikkeuksen nimen, suorita alla oleva komento:

|_+_|

Siellä se on, System.InvalidOperationException !

Seuraavissa alaosissa käsittelen yleisiä PowerShell Try Catch Exception -virheitä.

PowerShell Kokeile Catchia CommandNotFoundException Virhe

Jos suoritat komennon, jota ei ole PowerShellissä tai Microsoft Command Promptissa, näyttöön tulee virhesanoma. Esimerkiksi, jos käytät Hanki tiedosto -komento, saat virhesanoman, koska tämä komento ei ole kelvollinen PowerShell-komento.

Tässä on kuvakaappaus komennon tuloksesta PowerShellissä…

PowerShell Try Catch CommandNotFoundException Error

Kuten kuvakaappauksesta näet, poikkeuksen tyyppi (FullyQualifiedErrorId) on CommandNotFoundException .

nvidia-kilven selain

Koska tämä on lopetusvirhe, se estää skriptiäsi jatkamasta. Voit estää tämän virheen lopettamasta skriptiäsi rivittämällä komennon a-kenttään Yritä saada kiinni lohko.

Jos käärimme tämän virheen PowerShell Try Catch -lohkoon, PowerShell estää virheen. Lisäksi se estää sen lopettamasta skriptiäsi.

Kuitenkin, vaikka virhe on estetty, se tallennetaan $error-muuttujaan. Kuten tavallista, ennen kuin suoritat alla olevan komennon, tyhjennä ensin $error-muuttujaan tallennetut virheet.

|_+_|

Jos haluat suorittaa komennon PowerShellissä PowerShell ISE:n sijaan, kirjoita komennot yhdelle riville alla olevan kuvan mukaisesti:

|_+_|

Näytä sitten virhe suorittamalla…

|_+_|

Kuten mainitsin tämän osan pääjohdossa, näytä tämän virheen poikkeustunnus suorittamalla alla oleva komento:

|_+_|

Poikkeuksen koko nimi on System.Management.Automation.CommandNotFoundException .

PowerShell Kokeile Catchia ManagementObjectNotFoundException Virhe

Kun suoritat komennon PS-etäistunnossa väärillä tiedoilla, PowerShell palauttaa a ManagementObjectNotFoundException virhe.

Tyypillinen tilanne on, kun muodostat yhteyden Office 365:een PowerShellin avulla. Suorita sitten Get-User-komento, mutta anna väärä käyttäjä identiteetti .

PowerShell Try Catch ManagementObjectNotFoundException Error

Voit havaita tämän virheen PowerShell Try Catchin avulla käyttämällä alla olevan kaltaista komentoa:

|_+_| Ottaa kiinni ManagementObjectNotFoundException Virhe PowerShell Tryssä, Catch on erityisen hankala. Sinun on käytettävä ErrorAction parametri ja määritä Lopettaa . Muussa tapauksessa virhe näkyy edelleen, vaikka yrität saada kiinni.

Lopuksi saadaksesi poikkeuksen nimen, käytä alla olevaa komentoa:

|_+_|

Komento palauttaa poikkeuksen tyypin muodossa System.Management.Automation.RemoteException . Eli mikä on ManagementObjectNotFoundException ?

ManagementObjectNotFoundException on syy poikkeukseen, kuten alla oleva komento vahvistaa:

|_+_|

PowerShell Kokeile Catchia Unauthorized AccessException Virhe

Toinen yleinen PowerShell-poikkeusvirhe on Unauthorized AccessException . Tämäntyyppinen virhe ilmenee, kun yrität käyttää kohdetta, jolla sinulla ei ole ainakaan lukuoikeutta.

Tämän esimerkin havainnollistamiseksi kielsin todennetuilta käyttäjiltä pääsyn tiettyyn tiedostoon tietokoneellani.

PowerShell Try Catch UnauthorizedAccessException Error

Jos nyt yritän käyttää tiedostoa Get-Content-komennolla, saan pääsy kielletty -viestin.

|_+_|

Jos haluat lopettaa tämän virheen näyttämisen, suorita komento PowerShell Try Catch -lohkossa alla olevan kuvan mukaisesti...

|_+_|

Valitettavasti yllä oleva komento ei pysäytä virheen näyttämistä. Syynä on, että se ei ole lopetusvirhe.

Jos haluat lopettaa virheen näyttämisen, sisällytä ErrorAction parametri ja määritä Lopettaa .

|_+_|

Nyt komento vaimentaa virheen. Näytä poikkeuksen tyyppi suorittamalla alla oleva komento…

|_+_|

Poikkeuksen tyyppi on System.UnauthorizedAccessException .

Poikkeusvirheitä on enemmän kuin mitä tässä osiossa käsitellään. Käsittelin vain yleisimmät poikkeukset.

Tiettyjen poikkeuksien vangitseminen PowerShell Try Catchin avulla

Tiettyjen poikkeuksien vangitseminen PowerShell Try Catchin avulla

Viimeisessä osassa käsiteltiin yleisiä PowerShell-poikkeuksia ja poikkeuksen tyypin löytämistä. Tässä osiossa kerrotaan, kuinka näitä tietoja käytetään tietyntyyppisten virheilmoitusten kaappaamiseen.

Tämän oppaan syntaksiosiossa sanoin, että PowerShell Try Catch Lopuksi -ohjelman yleinen syntaksi on…

|_+_|

Syntaksin catch-lohkossa näet [error type]. Tässä voit määrittää virhetyypin, jonka haluat havaita tässä lohkossa.

Esimerkiksi UnauthorizedAccessException-virheiden havaitsemiseksi käytä alla olevia lauseita…

|_+_|

Jos haluat suorittaa komennon PowerShellissä, määritä lausekkeet yhdellä rivillä. Käskyn ensimmäinen osa – $error.Clear() – poistaa kaikki $error-muuttujaan tallennetut virheet.

|_+_|

Kuinka lisätä useita Saada kiinni Lohkot PowerShellissä Yritä saada kiinni lausunto

Tämän osion johdannossa näytin sinulle, kuinka voit saada kiinni tietyntyyppisen poikkeuksen Saada kiinni lohko. Voit määrittää useita

Tässä on esimerkki…

|_+_|

Tässä esimerkissä ensimmäinen saada kiinni block käsittelee määritetyt poikkeukset. Lisäksi toinen saada kiinni block handles käsittelee yleisiä virheitä.

Virhepoikkeuksen purkaminen PowerShellin avulla Kokeile Catchin avulla

Viimeisessä alajaksossa käsiteltiin useiden kiinnityslohkojen määrittämistä erityyppisten poikkeusten käsittelemiseksi. Tässä alaosassa opit poimimaan virheen tiedot poikkeuksesta.

Tämän havainnollistamiseksi käytän aiemmin käyttämäni esimerkkiä. Suorita tämä PowerShell-lauseke PowerShellissä.

|_+_|

Suorita nyt $error yksin…

kuinka purkaa omenakello icloudista
|_+_|

Vaikka $error-muuttujaan on tallennettu useita tietoja, todellinen virheilmoitus on korostettu alla olevassa kuvakaappauksessa.

Virhetietojen purkaminen PowerShellin avulla Kokeile Catchia

Jos haluat kirjata tämän virheen tekstitiedostoon, sinun tarvitsee vain kirjata todelliset virheen tiedot. Pura tämä virhe käyttämällä alla olevaa komentoa:

|_+_|

Komento poimii todellisen virhesanoman Pääsy polkuun 'D:PS-Tutorialfolder-names.txt' on estetty.

Voit kirjoittaa tämän virheilmoituksen lokitiedostoon lisäämällä a Out-tiedosto komento Catch-lohkossa.

|_+_| otin mukaan Liitä parametri kohdassa Out-tiedosto -komento sallii useiden merkintöjen kirjaamisen ilman aiempien merkintöjen korvaamista.

Jotta viimeinen komento olisi helppo ymmärtää, kirjoitan sen uudelleen alla olevaan komentosarjamuotoon…

|_+_|

Kuinka sisällyttää A Lopulta Estä PowerShelliin Yritä saada kiinni lausunto

Lopullisen lohkon sisällyttäminen PowerShelliin Kokeile Catch Statementia

Voit sisällyttää a Lopulta estää PowerShellin Yritä saada kiinni lausunto. Syntaksi on

|_+_|

The vihdoinkin lohkoa voidaan käyttää vapauttamaan resursseja, joita komentosarja ei enää tarvitse.

Lopuksi lohko suoritetaan, vaikka pysäytät skriptin painamalla CTRL+C. Lohko suoritetaan myös, jos Exit-avainsana pysäyttää skriptin Catch-lohkon sisällä.

Viimeisessä esimerkissä minulla oli lauseke, joka kirjoittaa virhelokin tekstitiedostoon Saada kiinni lohko. Kuitenkin paras paikka lausua on a Lopulta lohko.

Katso muokattu skripti alta…

|_+_|

Hyödyllistä lisätietoa PowerShell Try Catchista

Muita tärkeitä tietoja PowerShell Tryistä

Tässä osiossa jaan joitain yksinkertaisia ​​mutta hyödyllisiä tietoja PowerShell Try Catchista.

PowerShellin tyhjentäminen Kokeile Catch $Error automaattista muuttujaa

$error automaattisessa muuttujassa on a Asia selvä Menetelmä. Voit käyttää tätä menetelmää poistaaksesi kaikki automaattiseen muuttujaan $error tallennetut virheet.

Voit poistaa kaikki nykyisen PowerShell-istunnon automaattiseen muuttujaan $error tallennetut virheet suorittamalla alla olevan komennon.

|_+_|

Mukautetun virheviestin näyttäminen PowerShellissä Yritä Catch Block

Voit näyttää mukautetun virhesanoman PowerShell Try Catch Blockissa käyttämällä Throw-sanaa. Tässä on esimerkki…

|_+_|

Tässä on tämän PowerShell ISE:n komentosarjan tulos.

Mukautetun virheviestin näyttäminen PowerShellissä Yritä Catch Block

Virhekategoriatietojen saaminen PowerShellissä Kokeile Catchia

$error automaattisella muuttujalla on ominaisuus nimeltä CategoryInfo. Näet tämän ominaisuuden ja muut ominaisuudet ja menetelmät suorittamalla alla olevan komennon…

|_+_|

Yksi viimeisen komennon palauttamista ominaisuuksista kutsutaan Luokkatiedot .

Voit käyttää näitä tietoja suorittamalla alla olevan komennon.

|_+_|

Tämä komento palauttaa useita aliominaisuuksia.

Virhekategoriatietojen saaminen PowerShellissä Kokeile Catchia

Jokaiseen näistä aliominaisuuksista pääsee käsiksi lisäämällä aliominaisuuksien nimi pisteen jälkeen. Jos haluat esimerkiksi näyttää syy-aliominaisuudet, suorita alla oleva komento.

|_+_|

Write-Hostin käyttäminen virheilmoitusten näyttämiseen PowerShellissä Kokeile Catchia

Kuten CategoryInfo-ominaisuudessa viimeisessä alaosassa, myös automaattisessa $error muuttujassa on ominaisuus nimeltä Poikkeus . Jos haluat näyttää poikkeuksen virheessä, suorita alla oleva komento:

|_+_|

Valitettavasti, jos yrität näyttää nämä tiedot Write-Host-komennolla, se ei valitettavasti toimi odotetulla tavalla.

|_+_|

Tässä on tämän komennon tulos PowerShellissä…

Write-Hostin käyttäminen virheilmoitusten näyttämiseen PowerShellissä Kokeile Catchia

Kuten näet, komento näyttää joukon muita tietoja. Hyvä uutinen on se $error.Exception on toinen omaisuus nimeltä Viesti .

Voit kutsua tätä aliomaisuutta liittämällä sen $error.Exception , kuten tämä…

|_+_|

Lisäksi voit käyttää Kirjoitus-isäntä komento näyttää nämä virhetiedot...

|_+_|

Viimeinen komento näyttää nyt todellisen virheilmoituksen…

Paitsi, että käyttöön on erityinen syy Kirjoitus-isäntä kuten viimeisessä komennossa näkyy, voit yksinkertaisesti näyttää saman virheilmoituksen komennolla $error.Exception komento.

Hashtablen luominen PowerShellissä Kokeile Catch Blockia

Voit luoda a PowerShell hashtable Try Catch -lohkossa.

  1. Voit luoda hajataulukon, jossa on useita avain/arvo-pareja Try-lohkossa
  2. Vaihtoehtoisesti voit luoda yksittäisen avain-/arvohajataulukon Avain ulkopuolella Kokeile Catc h-lohko ja arvo sisällä Kokeile Catc h lohko.

Tässä on esimerkki ensimmäisestä menetelmästä…

|_+_|

Kuten näette, kiireinen on sisällä Kokeile Catc h lohko…

Toisaalta voit luoda yhden hashtable-avaimen, jonka arvo on määritetty kohdassa a Kokeile Catc h lohko. Tässä on esimerkki…

tehtävänhallinta ei pysty lopettamaan prosessia
|_+_|

Vahvistaakseni, että viimeinen komentosarja tuottaa PowerShell-hashtable, kutsuin komentosarjan suorittamisen jälkeen $hashtable-muuttujaan tallennettuja arvoja.

Kuten näet viimeisen komennon tuloksesta, sillä on Nimi/arvo-pari!

PowerShell Kokeile Catch -esimerkkejä

PowerShell Kokeile Catch -esimerkkejä

Tässä viimeisessä osiossa käsittelen useita esimerkkejä PowerShell Try Catchin sovelluksesta.

Kuinka käyttää PowerShellia Yritä saada kiinni Get-Childitemin kanssa

Get-Childitem-komento voi palauttaa useita virheitä. Havainnollistaakseni kahta yleistä virhettä käytän kahta alla olevaa komentoa:

|_+_|

Viimeisessä komennossa käytetyn tekstitiedoston oikea polku on D:PS-Tutorialfilelist.txt.

Ensimmäisessä komennossa lisäsin kuitenkin välilyönnin D:PS-Tutorialin jälkeen. Tämä johti virheeseen (tarkistamme virheen tiedot pian).

Lisäksi toisessa komennossa määritin oikean polun, mutta käytin väärää tiedostonimeä. Tämä johti virheeseen.

|_+_| PowerShellin käyttäminen Kokeile Catchia Get-Childitemin avulla

Jatkossa, saadakseni lisätietoja näistä virheistä, suoritan komennot PowerShellissä Yritä saada kiinni lohko.

|_+_|

Ensimmäinen tehtävämme on määrittää komentojen palauttamat virhetyypit. Saat nämä tiedot suorittamalla alla olevat komennot…

|_+_|

Tässä on komentojen tulokset…

PowerShellin käyttäminen Kokeile Catchia viedäksesi Get-WMIObject-virheet Export-csv:n avulla$error automaattiseen muuttujaan tallennetut virheet tallennetaan PowerShell-taulukkoon. Jokaista taulukon objektia pääsee käsiksi lisäämällä [0], [1] taulukon loppuun. 0 edustaa ensimmäistä kohdetta taulukossa, kun taas 1 edustaa toista kohdetta ja niin edelleen.

Takaisin saadaksesi lisätietoja virheistä Get-Childitem -komentoa, virhetyyppien perusteella, voimme muokata Try Catch -lohkoamme kaapataksemme nämä kaksi virhetyyppiä…

|_+_|

Toinen tehtävämme on näyttää todelliset virheilmoitukset. Tämä komento suorittaa tehtävän:

|_+_|

Komento näyttää kaksi virheilmoitusta…

Kuinka käyttää PowerShellia Yritä saada kiinni Get-WMIObject-virheiden vieminen Export-csv:llä

Tässä alaosiossa vietän suorituksen aikana syntyneet virheet Hanki-WMIObject etätietokoneessa CSV-tiedostoon Vie-csv komento.

Katsotaan ensin virhetiedot, jotka syntyvät, kun yrität muodostaa yhteyden offline-etätietokoneeseen Hanki-WMIObject . Tämän havainnollistamiseksi suorita alla oleva komento…

|_+_|

Komento loi virheilmoituksen, koska Tietokone ei ole kelvollinen PC-nimi.

Get-Process-virheiden havaitseminen PowerShellin avulla Kokeile Catch Statementia

Jatketaan virheen hallitsemiseksi suorittamalla komennon sisällä Yrittää lohko a Yritä saada kiinni lausunto.

|_+_|

Ensimmäisellä rivillä Yrittää lohko, määritin $ComputerName-muuttujan. Sitten, toisella rivillä, juoksin Hanki-WmiObject komento.

Lisäksi vuonna Saada kiinni lohko, loin virhetiedot ja vienin sen CSV-tiedostoon Vie-csv .

mikä on suoratoistotila ristiriidoissa

Tässä on yksityiskohtainen selitys käsikirjoituksesta Yrittää lohko:

  1. Rivillä 1 loin $path-muuttujan, joka määrittää, minne haluan tallentaa CSV-tiedoston
  2. Sitten rivillä 2 käytin Get-Date-komentoa luodakseni tiedostonimen CSV-tiedostolle. Tiedoston nimi on muodossa, vvvvKKpp_HHmmss.csv
  3. Rivillä 3 loin tyhjän objektin, joka on tallennettu muuttujaan nimeltä $data
  4. Sitten riville 4 lisäsin 'Computer Name' -sarakkeen rivillä 3 luomaani objektiin. Sarake ottaa muuttujan $ComputerName
  5. Riville 5 lisäsin 'Error Message' -taltion, joka tallentaa virheilmoitukset, $error.Exception.Message
  6. Sitten riville 6 loin $csvfilepath-muuttujan, joka yhdistää muuttujat $path ja $csvfilename luodakseen täydellisen polun CSV-tiedostoon
  7. Lopuksi rivillä 7 siirsin $data-muuttujaan ($ComputerName ja $error.Exception.Message) tallennetut tiedot Vie-csv ja tallensi tiedoston kansioon $csvfilepath
The EiTypeInformation Parametri Export-csv-komennossa poistaa tyyppitiedot. Saat lisätietoja lukemalla oppaamme Powershell NoTypeInformation: Sovellukset ja esimerkit

Alla olevassa kuvakaappauksessa näkyy skriptin luoma CSV…

Get-Process-virheiden havaitseminen PowerShellillä Yritä saada kiinni lausunto

Jos suoritat Get-Process-komennon prosessitunnuksella, jota ei ole olemassa, se palauttaa a Microsoft.PowerShell.Commands.ProcessCommandException virhe.

Voit kaapata tämän tietyntyyppisen poikkeuksen suorittamalla alla olevan kaltaisen komennon:

|_+_|

Tässä on PowerShell ISE:n komentosarjan tulos.

Vaihtoehtoisesti voit määrittää mukautetun virheilmoituksen muokkaamalla komentosarjaa alla olevan kuvan mukaisesti...

|_+_|

Nyt komentosarja palauttaa mukautetun virheilmoituksen…

Get-Mailbox-virheiden havaitseminen PowerShellillä Yritä saada kiinni lausunto

Jos muodostat yhteyden Office 365 PowerShelliin ja suoritat Hanki-postilaatikko käyttäjää vastaan, jota ei ole olemassa, saat virheilmoituksen. Jotkut käyttäjät ovat ilmoittaneet, että heillä on ongelmia virheilmoituksen tallentamisessa Hanki-postilaatikko komento.

Testaaksesi tätä skenaariota yhteyden muodostamisen jälkeen Office 365 -tili PowerShellin kautta suoritin alla olevan skriptin:

|_+_| Käyttäjää Pius ei ole Office 365 -tilillämme.

Skripti palautti virheilmoituksen Toimintoa ei voitu suorittaa, koska objektia 'Pius' ei löytynyt osoitteesta 'AM6PR05A05DC002.EURPR05A005.PROD.OUTLOOK.COM '.

Tässä kuvakaappaus…

Kuitenkin jos Yritä saada kiinni havaitsee virheen, yritä lisätä poikkeustyyppi alla olevan muokatun komennon mukaisesti:

|_+_|

Siinä se – kattava ja päivitetty PowerShell-oppaamme Kokeile Catch Finalia ly! Toivottavasti siitä oli apua?

Jos koit sen hyödylliseksi, äänestä ystävällisesti Joo Oliko tämä viesti Hyödyllinen kysymys alla.

Vaihtoehtoisesti voit esittää kysymyksen, jättää kommentin tai antaa lisää palautetta tämän sivun lopusta löytyvällä Vastaa -lomakkeella.

Lopuksi lisää PowerShell tech S Zones -alueita Windows PowerShell -ohjesivullamme. Saatat myös pitää Work from Home -sivustamme erittäin hyödyllisenä.

Viitteet ja lisätietoa

  1. Tietoja Try Catch Lopulta
  2. Tietoja Trapista
  3. PowerShell Array ja Add to Array: Sovellukset ja esimerkit
  4. Powershell for Loop selitys: Syntaksi ja esimerkit