Behandel PowerShell-fouten als een baas met deze tips

Behandel PowerShell-fouten als een baas met deze tips / Programming

Wanneer u voor het eerst begint met scripten in PowerShell, kan het verleidelijk zijn om een ​​reeks opdrachten te verpakken Powershell-cmdlets die uw Windows-beheerdersvaardigheden verbeteren Powershell-cmdlets die uw Windows-beheerdersvaardigheden verbeteren Powershell is gelijkwaardig opdrachtregelprogramma en scripttaal. Het geeft u de mogelijkheid om uw computer te automatiseren via dezelfde opdrachten die u gebruikt om het te beheren. Lees verder . Als uw script echter mislukt, weet u niet waar u het probleem moet oplossen. Om te voorkomen dat u tijd verspilt met proberen te raden waarom uw script is mislukt, moet u foutafhandeling gebruiken.

Er zijn vier onderdelen voor PowerShell-foutafhandeling: de parameter Foutactie, blokken voor Try / Catch, de parameter Error Variable en logboekregistratie.

PowerShell-fout met de eenvoudige manier

De eerste keer dat u fouten wilt afhandelen, is wanneer iets uw script in zijn tracks stopt. Als de fout niet van invloed is op je latere stappen, is het wellicht het beste om hem over te slaan en door te gaan.

Aan de andere kant is het niet altijd duidelijk wanneer een gegeven cmdlet een afsluitende fout genereert. Sommige cmdlets retourneren een fout maar stoppen uw script niet. U kunt dan wachten tot uw script voltooid is terwijl het onzin produceert.

Dit is waar de -ErrorAction parameter komt binnen. U gebruikt dit om een ​​cmdlet te forceren om de fout op de gewenste manier af te handelen. Als u een bestaand script aanpast Verhoog uw productiviteit met Windows PowerShell-scripts Verhoog uw productiviteit met Windows PowerShell Scripts Wat als u de productiviteit van Linux naar Windows zou kunnen brengen? De meeste Linux-distro's worden geleverd met de krachtige Bash-shell. PowerShell is een even krachtige terminal voor Windows. Meer lezen, u voegt het toe aan het einde van de cmdlet-regel.

Get-ChildItem -Path "~ \ Documents \ * .jpg" -Recurse -ErrorAction Stop

Vanzelfsprekend, als u de Get-ChildItem cmdlet op zichzelf, de fout doet niet veel voor u. Als u echter iets met de gegevens wilt doen, is het goed om het script te stoppen, zodat u weet dat de zoekopdracht is mislukt en waarom. Als u meerdere zoekopdrachten uitvoert, wijzigt u de parameter van Hou op naar SilentlyContinue, dus het script gaat door als een zoekopdracht mislukt. Als u wilt zien wat de fout is, kunt u gebruiken Doorgaan met als de parameter in plaats daarvan.

Get-ChildItem -Path "~ \ Documents \ * .jpg" -Recurse -ErrorAction SilentlyLees verder

Als u liever de mogelijkheid heeft te controleren wat er gebeurt elke keer dat uw script wordt uitgevoerd, kunt u dit wijzigen in informeren. Wanneer uw cmdlet een addertje onder het gras raakt, zijn er de volgende opties: Ja, Ja voor allen, opdracht stoppen, onderbreken of Help.

Deze optie is een beetje flexibeler, maar betekent fouten zorgen ervoor dat uw script op uw invoer wacht. Dat is misschien niet iets dat u wilt als u een lang proces 's nachts uitvoert.

Fout bij het afhandelen van de programmeermanier

De ErrorAction parameter adresseert uw fouten op een ongecompliceerde manier. Als u echter op zoek bent naar iets meer controle over fouten, kunt u met PowerShell nog steeds worden beschermd. Gebruik makend van Proberen te vangen, we kunnen het script nu vertakken wanneer cmdlets een fout retourneren.

Zoals de naam al doet vermoeden, Proberen te vangen bestaat uit twee delen. (Er is technisch gezien een derde, maar daar komen we snel bij.) De eerste is de Proberen sectie. Je gaat je normale code gebruiken in dit gedeelte. Je gaat nog steeds het -ErrorAction parameter, maar deze kan alleen worden ingesteld als Hou op. Deze vlag zorgt ervoor dat uw cmdlet de Vangst-zelfs als het geen beëindigende fout heeft.

Probeer Get-Process "Cortana" -ErrorAction Stop

Probeer ook te voorkomen dat andere cmdlets worden uitgevoerd als het zoeken mislukt. In dit geval, als u de Get-Process resultaten voor Stop-proces, een mislukte zoekopdracht voorkomt dat de tweede cmdlet wordt uitgevoerd.

Dus nu u een try-block van cmdlets heeft gemaakt, wat wilt u dan doen als het mislukt? De ... gebruiken Vangst half, je gaat dit definiëren.

Catch Write-Host "Process Not Found"

Zoals met de ErrorAction parameter, wanneer u iets ingewikkelder aan het doen bent 3 Slimme PowerShell-functies na het upgraden naar Windows 10 3 Slimme PowerShell-functies na het upgraden naar Windows 10 Windows 10 brengt ons een nieuwe PowerShell, in wezen Command Prompt op steroïden. Dit artikel laat zien hoe je het anders onmogelijke kunt doen met PowerShell. En het is makkelijker dan je denkt! Lees verder Vangst is nuttig voor meer dan het geven van een taalfout. (In het bovenstaande voorbeeld wordt de fout geforceerd door de app-naam te gebruiken en niet door de procesnaam.) Zorg er dus voor dat je met de game speelt Proberen blokkeren om een ​​zoekopdracht / actie te maken die u nodig hebt. U kunt de Vangst blok voor je script om je een e-mail te sturen als het mislukt.

Het derde deel is handig als u iets wilt laten draaien, ongeacht of uw cmdlet slaagt of niet. Hiervoor kunt u de Tenslotte blok. Je voegt dit toe na Try and Catch en log wanneer een deel van je script eindigt.

De foutvariabele en logging

Uw script bepaalt nu hoe het fouten verwerkt en hoe het daarop reageert. U kunt het gebruiken als een geplande taak of het ten minste uitvoeren als u niet achter uw bureau zit. 5 Redenen die u moet gebruiken PowerShell in plaats van Batch-scripting 5 Redenen waarom u PowerShell zou moeten gebruiken In plaats van Batch Scripting PowerShell is wat u zou krijgen als u stak de Command Prompt met Batch Scripting over, gooide wat extra functies in en schopte het allemaal verschillende inkepingen op. Hier zijn verschillende redenen waarom je het zou moeten proberen. Lees verder . Hoe kun je echter een mislukt script onderzoeken? Met de -ErrorVariable parameter de fouten van uw cmdlet schrijven naar een aangepaste variabele. Dit is een alternatief voor het systeem $ Error variabele, die alle fouten uit de huidige sessie bevat.

Uw cmdlet moet iets langer worden. Definieer eerst een variabele, iets als $ SearchError zal voor het voorbeeld doen. Wanneer je belt SearchError in de ErrorVariable parmeter, je gebruikt het dollarteken niet. Ook al roep je een variabele aan die je hebt gemaakt, vanwege de manier waarop de parameter werkt, noem je deze zonder het dollarteken. Voeg dat toe aan het einde van de regel.

Get-ChildItem -Path "~ \ Documents \ * .jpg" -Recurse -ErrorAction Continue -ErrorVariable SearchError

Als u een toevoegt + vóór de naam van de variabele, kunt u deze toevoegen aan de variabele in plaats van deze te vervangen. Dat levert hetzelfde gedrag op als de globale foutvariabele. In plaats daarvan kunt u deze uitgang en gebruiken Proberen te vangen om aangepaste uitvoer te schrijven, en tijdstempel het.

Om dit te laten werken, maakt u een tekstbestand direct nadat u de foutvariabele hebt ingesteld. Doe dit met de Nieuw item cmdlet. Misschien wilt u de informeren optie voor de ErrorAction parameter. Hiermee kunt u toevoegen aan een bestaand logboek wanneer het Nieuw item cmdlet mislukt.

$ SearchLog = New-Item "~ \ SearchLog.txt" -type bestand -ErrorAction Informeer

Nu wanneer u uw bouwt Proberen te vangen blok, je kunt de gebruiken Vangst om in een tekstbestand te loggen. Je gebruikt Krijg datum om de tijdstempel te maken. De opmaak kan lastig zijn, dus zorg dat je dat kopieert van het voorbeeld.

Probeer Get-ChildItem -Path "~ \ Documents \ *. Jpg" -Recurse -ErrorAction Stop -ErrorVariable SearchError Catch Add-Content -Path $ SearchLog -Value "$ (Get-Date -Format dd-MM-yy- hh_mm_ss) Bestanden niet gevonden, geretourneerde fout: $ SearchError "

Herhaal dat zo nodig voor al uw cmdlets 15 Geavanceerde taken PowerShell kan overweg met Windows 10 15 Geavanceerde taken PowerShell kan overweg met Windows 10 PowerShell lijkt op de opdrachtprompt, maar beter. Het is een krachtige tool voor systeembeheer. We hebben 15 taken samengesteld, sommige eenvoudig, sommige complex, die profiteren van de magie van PowerShell. Lees Meer en je hebt nu een aardig logboek van eventuele fouten. Als u dingen wilt bijhouden die met succes worden uitgevoerd, kunt u een soortgelijke toevoegen Content toevoegen aan het einde van de Proberen blok. Dit loggen wordt alleen uitgevoerd als uw Proberen cmdlet slaagt. U kunt dan uw fouten en successen registreren met tijdstempels. Het loggen laat je nu alles weten wat je script heeft gedaan, succes of mislukking.

De kracht van code

PowerShell gebruiken op de opdrachtregel Opdrachtprompt vs. Windows PowerShell: wat is het verschil? Opdrachtprompt versus Windows PowerShell: wat is het verschil? Windows-gebruikers kunnen zich redden zonder de Command Prompt of PowerShell te gebruiken. Maar met Windows 10 en nieuwe functies om de hoek, misschien is het hoog tijd dat we het hebben geleerd. Lees Meer is een krachtige manier om uw systeem te beheren. U kunt dezelfde opdrachten samen rijgen op een manier die krachtige automatisering mogelijk maakt. Een juiste afhandeling van fouten is nodig om ervoor te zorgen dat uw scripts alleen doen wat u wilt. Als u alles registreert, kunt u tijd besparen bij het oplossen van problemen.

Is er een tijd dat het verwerken van fouten je spek heeft bespaard? Bestaat er een PowerShell-script dat een betere foutafhandeling kan gebruiken? Wat is uw volgende PowerShell-project? Laat het ons weten in de comments.

Ontdek meer over: PowerShell.