chyba ve skriptu PowerShell zabrání úspěšnému dokončení. Použití manipulace s chybami s bloky try catch umožňuje správu a reakci na tyto ukončující chyby. V tomto příspěvku se budu zabývat základy try / catch bloků a jak najít a zpracovat konkrétní zprávy o výjimkách.
pochopení syntaxe
syntaxe try catch block je velmi jednoduchá., Skládá se ze dvou částí uzavřených v kudrnatých závorkách s prvním identifikovaným jako blok pokusu a druhým jako blok úlovku.
try { # Statement to try}catch { # What to do with terminating errors}
pokusný blok může mít v sobě tolik výroků, kolik chci; doporučil bych však, aby to bylo co nejméně, pravděpodobně jen jediné prohlášení. Smyslem manipulace s chybami je pracovat s jedním prohlášením najednou a vypořádat se s čímkoli, co s ním nastane.
zde je příklad chyby vyskytující se v konzole PowerShell., Tady jsem vytvoření nového souboru pomocí Nové Položku rutiny a zadání neexistující složku na Cestu:
Pokud by to bylo ve scénáři, tento výstup na obrazovce by odpad nějaký prostor a problém nemusí být ihned viditelné. Pomocí bloku try catch mohu začít manipulovat s výstupem chyby a učinit jej správnějším.
zde je náš stejný příkaz nové položky v bloku try catch. Všimněte si, že na řádku 2 jsem musel přidat parametr Chybyakce s hodnotou Stop do příkazu., Ne všechny chyby jsou považovány za „ukončení“, takže někdy musím přidat tento bit kódu, abych mohl správně ukončit blok úlovku.
Nyní místo bloku na červené rozzlobený vypadající text, mám jednoduchý varovná zpráva, že narazil na problém. Neexistující název Cesty spolu s nutí -ErrorAction Zastavit kapky logiky do bloku catch a zobrazit vlastní upozornění.
použití proměnné $ Error
i když je čitelnější, není to příliš užitečné., Vše, co vím, je, že příkaz nebyl úspěšně dokončen, ale nevím proč. Místo zobrazení vlastní zprávy mohu zobrazit konkrétní chybovou zprávu, ke které došlo namísto celého bloku výjimek červeného textu. Když dojde k chybě v bloku try, uloží se do proměnné s názvem $Error. Proměnná $ Error obsahuje řadu posledních chyb a mohu odkazovat na poslední chybu v poli na indexu 0.,
upozornění výstup je nyní více popisný ukazuje, že příkaz se nezdařilo, protože to nemůže najít součást cesty. Tato zpráva byla součástí naší původní chybové zprávy, ale nyní je stručnější.
pomocí zpráv výjimek
mohu také použít více bloků úlovku v případě, že chci řešit konkrétní chyby jinak. Zde se zobrazí dvě různé vlastní zprávy, jedna pro pokud cesta neexistuje a jedna pro, pokud je v názvu použit nelegální znak., Všimněte si, že na následujícím snímku obrazovky jsem spustil skript dvakrát se dvěma různými příkazy v bloku pokus. Každý příkaz, blok úlovku a konečný výstup jsou označeny oranžovými a zelenými šipkami.
při Pohledu na řádky 14-16, tam je třetí blok catch, aniž výjimku zprávy. Jedná se o“ catch-all “ catch blok, který se spustí v případě, že chyba neodpovídá žádné jiné výjimky catch block., Když jsem tento skript spuštěn a zobrazí zpráva v posledním bloku catch, pak vím, že chyba není týkajících se nepovolené znaky v názvu souboru nebo část cesty není platné.
Jak jsem poznal zprávy o výjimkách, které se mají použít v prvních dvou blocích úlovku? To lze nalézt při pohledu na různé informace připojené k proměnné $ Error. Po selhání příkazu mohu spustit chybu$.Výjimek.GetType ().FullName Chcete-li zobrazit zprávu o výjimce pro poslední chybu, která nastala.,
vraťme se zpět k PowerShell konzole, znovu jsem projel Nová-Položka příkaz s neexistující cestou, pak běžel můj $Error příkaz najít zpráva výjimky.
červený text bezprostředně následující selhal příkaz také obsahuje výjimku zprávu, ale neobsahuje modul, který to je. Při pohledu na proměnné $ Error zobrazuje úplnou zprávu, která má být použita pro blok úlovku.,
použití bloků try/catch poskytuje další sílu při manipulaci s chybami ve skriptu a při provádění různých akcí na základě chyby. Blok úlovku může zobrazit více než jen chybovou zprávu. Může obsahovat logiku, která chybu vyřeší a bude pokračovat v provádění zbytku skriptu.