ett fel i ett PowerShell-skript kommer att förhindra att det slutförs framgångsrikt. Med hjälp av felhantering med försök fångstblock kan du hantera och svara på dessa avslutande fel. I det här inlägget kommer jag att täcka grunderna i försök / fångstblock och hur man hittar och hanterar specifika undantagsmeddelanden.

förstå syntaxen

försök catch block syntax är mycket enkel., Den består av två sektioner inneslutna i lockiga fästen med den första identifierade som försöksblocket och den andra som fångstblocket.

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

försöksblocket kan ha så många uttalanden I det som jag vill, men jag rekommenderar att du håller det så få som möjligt, förmodligen bara ett enda uttalande. Poängen med felhantering är att arbeta med ett uttalande i taget och hantera allt som uppstår med det.

här är ett exempel på ett fel som uppstår i PowerShell-konsolen., Här skapar jag en ny fil med det nya objektet cmdlet och anger en obefintlig mapp för sökväg:

om det var i ett skript skulle utmatning av detta till skärmen slösa lite utrymme och problemet kanske inte vara omedelbart synligt. Med hjälp av ett försök fångstblock kan jag börja manipulera felutmatningen och göra den mer adminvänlig.

här är vår samma nya objekt kommando i ett försök catch block. Observera att på rad 2 var jag tvungen att lägga till erroraction-parametern med ett värde av stopp till kommandot., Inte alla fel anses vara ”avslutande”, så ibland måste jag lägga till den här koden för att korrekt avsluta i fångstblocket.

nu istället för ett block av röd arg utseende text, har jag ett enkelt varningsmeddelande om att det sprang in i ett problem. Det obefintliga sökvägsnamnet tillsammans med att tvinga-ErrorAction Stop släpper logiken i fångstblocket och visar min anpassade varning.

använda $Error Variable

Även om det är mer läsbart är det inte till stor hjälp., Allt jag vet är att kommandot inte slutfördes framgångsrikt men jag vet inte varför. I stället för att visa mitt anpassade meddelande kan jag visa det specifika felmeddelandet som inträffade istället för hela det röda textundantagsblocket. När ett fel uppstår i försöksblocket sparas det i variabeln $Error. $ Error-variabeln innehåller en rad senaste fel, och jag kan referera till det senaste felet i matrisen vid index 0.,

varningsutgången är nu mer beskrivande och visar att kommandot misslyckades eftersom det inte kunde hitta en del av sökvägen. Detta meddelande var en del av vårt ursprungliga felmeddelande men är nu mer kortfattat.

använda Undantagsmeddelanden

Jag kan också använda flera fångstblock om jag vill hantera specifika fel annorlunda. Här ska jag visa två olika anpassade meddelanden, en för om Sökvägen inte existerar och en för om en olaglig karaktär används i namnet., Observera att i följande skärmdump körde jag skriptet två gånger med två olika kommandon i försöksblocket. Varje kommando, fångstblock och slutproduktion indikeras av de orange och gröna pilarna.

om man tittar på linjerna 14-16 finns det ett tredje fångstblock utan ett undantagsmeddelande. Detta är ett” catch-all ” fångstblock som körs om felet inte matchar något annat fångstblock undantag., Om jag kör det här skriptet och ser meddelandet i det sista fångstblocket vet jag att felet inte är relaterat till ett olagligt tecken i filnamnet eller delen av sökvägen som inte är giltig.

nu Hur visste jag undantagsmeddelanden att använda i de två första fångstblocken? Detta kan hittas genom att titta på den olika informationen som bifogas $Felvariabeln. När ett misslyckat kommando inträffar kan jag köra $ – fel.Undantag.GetType().Fullständigt namn för att visa undantagsmeddelandet för det senaste felet som uppstod.,

gå tillbaka till PowerShell-konsolen, jag omdirigerar kommandot Nytt objekt med en obefintlig sökväg och körde sedan mitt $-felkommando för att hitta undantagsmeddelandet.

den röda texten omedelbart efter det misslyckade kommandot innehåller också undantagsmeddelandet men innehåller inte vilken modul den är från. Om man tittar på $ Felvariabeln visar hela meddelandet som ska användas för ett fångstblock.,

användning av försök / fångstblock ger ytterligare kraft vid hantering av fel i ett skript och olika åtgärder baserade på felet. Fångstblocket kan visa mer än bara ett felmeddelande. Den kan innehålla logik som löser felet och fortsätter att köra resten av skriptet.