virhe PowerShell script estää sitä suorittamasta onnistuneesti. Käyttämällä virheenkäsittelyä try catch-lohkoilla voit hallita ja vastata näihin päättyviin virheisiin. Tässä viestissä käsittelen try / catch-lohkojen perusteet ja sen, miten löytää ja käsitellä erityisiä poikkeusviestejä.
syntaksin
ymmärtäminen try catch block syntaksi on hyvin yksinkertaista., Se koostuu kahdesta osasta suljettu aaltosulkeisiin kanssa ensimmäinen tunnistettu koska yrittää estää ja toinen kuin catch-lohkon.
try { # Statement to try}catch { # What to do with terminating errors}
yritä lohko voi olla niin monta lausuntoja sen haluan; kuitenkin, suosittelen pitämällä se mahdollisimman vähän, todennäköisesti vain yhden lausunnon. Virheenkäsittelyn tarkoitus on työskennellä yhdellä lausumalla kerrallaan ja käsitellä kaikkea, mitä siinä tapahtuu.
tässä on esimerkki PowerShell-konsolissa tapahtuvasta virheestä., Täällä olen luoda uuden tiedoston käyttämällä Uusi-Kohde-cmdlet-komentoa ja määritellään olematon kansion Polku:
Jos tämä oli kirjoitus, syöttöä, että tämä näyttö olisi jätettä tilaa ja ongelmaa ei välttämättä ole heti näkyvissä. Käyttämällä yrittää saalis lohko, voin alkaa manipuloida virhe ulostulo ja tehdä siitä admin ystävällinen.
tässä on sama uuden kohteen komento try catch Blockissa. Huomaa, että rivillä 2 jouduin lisäämään komentoon ErrorAction-parametrin, jonka arvo on Stop., Kaikkia virheitä ei ole, pidetään ”päättämisestä”, joten joskus minun täytyy lisätä tämä koodi hieman, jotta kunnolla lopettaa osaksi catch-lohkon.
Nyt sen sijaan, että lohko on punainen vihainen näköinen teksti, minulla on yksinkertainen varoitus viestin, että se törmäsi ongelma. Olematon Polku yhdessä pakottaa -ErrorAction Lopettaa tippaa logiikka osaksi catch ja näyttö vastaa my custom varoitus.
käyttämällä $Error-muuttujaa
, mutta luettavammin tämä ei ole kovin hyödyllistä., Tiedän vain, että käsky ei onnistunut, mutta en tiedä miksi. Sen sijaan, että näyttäisin mukautetun viestini, voin näyttää tietyn virheviestin, joka tapahtui koko punaisen tekstin poikkeuslohkon sijaan. Kun try-lohkossa tapahtuu virhe, se tallennetaan muuttujaan nimeltä $Error. $Error muuttuja sisältää joukon viime virheitä, ja voin viitata viimeisin virhe array indeksissä 0.,
varoitus ulostulo on nyt kuvaavampi osoittaa, että komento epäonnistui, koska se ei voinut löytää osa polkua. Tämä viesti oli osa alkuperäistä virheilmoitustamme, mutta on nyt tiiviimpi.
Käyttämällä Poikkeus Viestejä
voin käyttää myös useita catch-lohkoja, jos haluan käsitellä erityisiä virheitä eri tavalla. Tässä aion näyttää kaksi erilaista mukautettuja viestejä, yksi jos polku ei ole olemassa ja yksi jos laitonta merkkiä käytetään nimessä., Huomaa, että seuraavassa kuvakaappauksessa suoritin skriptin kahdesti kahdella eri komennolla try-lohkossa. Jokainen komento, catch block, ja lopullinen lähtö on merkitty oranssi ja vihreä nuolet.
tarkastellaan rivit 14-16, siellä on kolmas catch ilman poikkeus viesti. Tämä on ”catch-all” catch-lohko, joka suoritetaan, jos virhe ei vastaa mitään muuta catch poikkeus., Jos olen käynnissä tämän käsikirjoituksen ja nähdä viestin viimeinen catch-lohkossa, niin tiedän, että virhe ei liity laiton merkki tiedoston nimi tai osa polku ei ole voimassa.
Nyt miten tiedän ottamatta viestejä, käyttää kahdessa ensimmäisessä catch-lohkoja? Tämä löytyy katsomalla erilaisia tietoja liitteenä $virhe muuttuja. Epäonnistuneen komennon jälkeen voin suorittaa $ – virheen.Poikkeus.GetType().FullName nähdäksesi poikkeusviestin tapahtuneeseen viimeiseen virheeseen.,
Mene takaisin PowerShell-konsoli, tarkistin Uusi-Item-komento olematon polku, sitten juoksi minun $Virhe command löytää poikkeus viesti.
punaista tekstiä välittömästi epäonnistui komento sisältää myös poikkeuksen viesti, mutta ei sisällä moduuli, joka se on peräisin. $Error-muuttujan katsominen näyttää koko viestin, jota käytetään saalislohkoon.,
try / catch-lohkojen käyttö antaa lisätehoa komentosarjan virheiden käsittelyssä ja virheisiin perustuvien erilaisten toimien toteuttamisessa. Catch block voi näyttää muutakin kuin virheviestin. Se voi sisältää logiikkaa, joka ratkaisee virheen ja jatkaa muun skriptin suorittamista.