hiba egy PowerShell script, megakadályozza befejezése sikeresen. A hibakezelés használata a try catch blocks segítségével lehetővé teszi a megszüntető hibák kezelését és megválaszolását. Ebben a bejegyzésben fogom fedezni az alapokat a try / catch blokkok, valamint hogyan kell megtalálni és kezelni konkrét kivétel üzeneteket.

A

szintaxis megértése nagyon egyszerű., Ez áll a két szakasz zárt göndör zárójelben az első azonosított, mint a try blokk, a második pedig a fogás blokk.

try { # Statement to try}catch { # What to do with terminating errors}

a próbablokk annyi állítást tartalmazhat benne, amennyit csak akarok; azonban azt javaslom, hogy a lehető legkevesebb legyen, valószínűleg csak egyetlen nyilatkozat. A hibakezelés lényege, hogy egyszerre egy nyilatkozattal dolgozzunk, és foglalkozzunk mindennel, ami vele történik.

itt egy példa a PowerShell konzolban előforduló hibára., Itt vagyok létre egy új fájlt használja az Új-Elem parancsmagot, meghatározva azt, hogy egy nem létező mappa elérési Út:

Ha ez a forgatókönyv, ha átküldjük a képernyőn hulladék egy kis helyet a probléma, lehet, hogy nem azonnal látható. Egy próbát catch blokk, tudom kezdeni, hogy manipulálják a hiba kimenet, hogy ez több admin barátságos.

itt van ugyanaz az új elem parancs egy try catch blokk. Ne feledje, hogy a 2.sorban hozzá kellett adnom az ErrorAction paramétert a Stop értékkel a parancshoz., Nem minden hibát tekintünk “megszüntetésnek”, ezért néha hozzá kell adnom ezt a kódot, hogy megfelelően befejezzem a fogási blokkot.

most a piros dühös szöveg blokkja helyett egy egyszerű figyelmeztető üzenetem van, hogy problémába ütközött. A nem létező elérési út neve, valamint a kényszerítő-ErrorAction Stop a logikát a fogási blokkba dobja, majd megjeleníti az egyéni figyelmeztetésemet.

A $Error Variable

míg olvashatóbb, ez nem túl hasznos., Csak azt tudom, hogy a parancs nem fejeződött be sikeresen, de nem tudom, miért. Az egyéni üzenetem megjelenítése helyett a teljes piros szövegkivétel blokk helyett megjeleníthetem az adott hibaüzenetet. Ha hiba lép fel a try blokkban,akkor a $Error nevű változóba menti. A $Error változó egy sor legutóbbi hibát tartalmaz, a tömb legutóbbi hibáját pedig a 0. Indexen tudom hivatkozni.,

a figyelmeztető kimenet most leíróbb, ami azt mutatja, hogy a parancs nem sikerült, mert nem találta az útvonal egy részét. Ez az üzenet része volt az eredeti hibaüzenetnek, de most tömörebb.

Kivételüzenetek használata

Több fogási blokkot is használhatok, ha másképp szeretnék kezelni a konkrét hibákat. Itt két különböző egyéni üzenetet fogok megjeleníteni, az egyik az, ha az elérési út nem létezik, a másik pedig az, ha egy illegális karaktert használnak a névben., Ne feledje, hogy a következő képernyőképen kétszer futtattam a szkriptet két különböző parancsmal a próbablokkban. Minden parancsot, fogási blokkot és végső kimenetet a narancssárga és zöld nyilak jelölnek.

a 14-16 sorokat nézve kivétel nélkül van egy harmadik fogási blokk. Ez egy “catch-all” fogási blokk, amely akkor fut, ha a hiba nem egyezik meg más fogási blokk kivételével., Ha futtatom ezt a szkriptet, és látom az üzenetet az utolsó fogási blokkban, akkor tudom, hogy a hiba nem kapcsolódik a fájlnév illegális karakteréhez vagy az elérési út egy részéhez, amely nem érvényes.

most honnan tudtam az első két fogási blokkban használt kivételüzeneteket? Ez megtalálható a $Error változóhoz csatolt különböző információk megtekintésével. Miután egy sikertelen parancs történik, tudok futtatni $Error.Kivétel.GetType ().Teljes név az utolsó hiba kivétel üzenetének megtekintéséhez.,

visszatérve a PowerShell konzolra, átirányítom az új elem parancsot egy nem létező elérési úttal, majd futtattam a $Error parancsot a kivétel üzenet megkereséséhez.

a sikertelen parancsot közvetlenül követő piros szöveg tartalmazza a kivétel üzenetet is, de nem tartalmazza, hogy melyik modulból származik. Nézi a $Error változó mutatja a teljes üzenetet kell használni a fogás blokk.,

A try/catch blokkok használata további erőt ad a szkript hibáinak kezelésében, valamint a hiba alapján különböző műveletek végrehajtásában. A fogási blokk nem csak hibaüzenetet jeleníthet meg. Tartalmazhat olyan logikát, amely megoldja a hibát, majd folytatja a szkript többi részének végrehajtását.