Selittää Try/Catch/Lopuksi lohko PowerShell

Try/Catch-lohkon PowerShell on käsitellä virheitä, jotka on tuotettu käsikirjoitus. Jotta virheet olisivat täsmällisiä, niiden pitäisi olla virheiden lopettamista. Lopuksi lohko PowerShell ei ole pakko kirjoittaa joka kerta yhdessä Try/Catch-mutta se toteutetaan riippumatta siitä, onko virhe vai ei.

joten Kokeilulohkoa käytettäessä Saalislohko on pakollinen, mutta ei lopulta lohko.

  • Try/Catch-lohko Päättämisestä virhe − Alla on esimerkki Päättämisestä virhe ilman, että vihdoin lohko.,

Esimerkki

try{ This is not allowed "This is Allowed"}catch{ Write-Host "Error occured" -BackgroundColor DarkRed}

Tulokset

yllä olevassa esimerkissä, meillä on palauttaa jotain mikä ei ole sallittua, mutta seuraava rivi oli aito vaikka se ei voinut suorittaa, koska päättämisestä virhe.

tavoitteemme on napata Try-lohkossa syntynyt poikkeus-ja Virheilmoitus. Kuten tiedämme, virhe tallennetaan $ Error-muuttujaan. Jos tarkistat $error-muuttujan tuotoksen, saat koko näkymän, mutta aina kun suoritat minkä tahansa skriptin ja käsittelet virheitä, varmista, että poistat vanhat virheet käyttämällä $error.,tyhjennä () komento tai käytä uutta PowerShell-konsolia. Jos tiedät erityinen virhe muuttujan sijainti array voit suoraan käyttää sitä. Esimerkiksi, $virhe

Voimme nähdä, mitä kaikki ominaisuudet $Virhe muuttuja.

PS C:\WINDOWS\system32> $Error | Get-Member | Select Name, MemberTypeName MemberType---- ----------Equals MethodGetHashCode MethodGetObjectData MethodGetType MethodToString MethodCategoryInfo PropertyErrorDetails PropertyException PropertyFullyQualifiedErrorId PropertyInvocationInfo PropertyPipelineIterationInfo PropertyScriptStackTrace PropertyTargetObject PropertyPSMessageDetails ScriptProperty

On olemassa muutamia ominaisuuksia edellä ovat hyödyllisiä löytää poikkeus ja virhe yksityiskohtia. Katsotaan niitä, niin voimme hyödyntää niitä myös Saalislohkossa.

ensimmäinen InvocationInfo-ominaisuus., Voit myös käyttää $Error, mutta tämä on ainoa tähän mennessä luotu virhe, joten käytämme suoraan $Error, mutta et voi saada AutoSuggestion ponnahdusikkunan kanssa $error muuttuja suoraan.

tarkemmat tiedot saat linjasta ja Positionmessagesta kuten alla on esitetty.

Tarkista nyt Poikkeusominaisuudet.

PS C:\WINDOWS\system32> $Error.ExceptionThe term 'This' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling of the name, or if a path was included, verify that the path is correct and try again.

Poikkeus Viestin,

PS C:\WINDOWS\system32>$error.Exception.MessageThe term 'This' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling of the name, or if a path was included, verify that the path is correct and try again.

Voit käyttää muita ominaisuuksia, jotka luulet on hyödyllistä näyttää virheilmoituksen. Aiomme käyttää muutamia näistä Catch block kiinni virhe., Koska työskentelemme nykyisen virheen käytämme $_. käsitellä nykyistä virhettä / poikkeusta.

Tulokset

Error Message: The term 'This' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling of the name, or if a path was included, verify that the path is correct and try again.Error in Line: This is not allowedError in Line Number: 3Error Item Name:

Kuten olemme nähneet edellä, ei ollut Lopulta estää, mutta Try/Catch jatkoi työtä. Voit lisätä lopuksi lohko tyhjentää muuttujia ja virheitä ja näyttää mitään viestiä.

  • Try / Catch block with Non-Terminating error.,

Kuten olemme nähneet edellisessä esimerkissä, että Päättämisestä virheet voidaan ohjata Try/Catch-lohkossa, mutta Ei-Päättämisestä virheet voi, koska ne ovat rakennettu-in cmdlets ja toimintoja, syntyy virheitä ja oletuksena parempana Virhe, toiminta on Edelleen ja näin ollen seuraava komento jatkuu, vaikka virhe ei käsitellä.

PS C:\WINDOWS\system32> $ErrorActionPreferenceContinue

– pakottaa Ei-Päättämisestä virhe Päättämisestä virhe, meidän täytyy muuttaa joko $ErrorActionPreference muuttuja Lopettaa tai täytyy käyttää ErrorAction parametrin Stop-arvon., Tässä, aiomme käyttää ErrorAction parametri, koska tarvitsemme sitä tietyn komennon eikä koko komentosarjan.

Esimerkki

Tulokset

Error Message: Cannot find any service with service name 'WhichService'.Error in Line: Get-Service WhichService -ErrorAction StopError in Line Number: 4Error Item Name:This is going to run anyway

Kuten voitte nähdä edellä esimerkiksi Get-Palvelun tuottaa ei-päättämisestä virhe ja voimme muuntaa sen päättämisestä virhe –ErrorAction Lopettaa parametri ja sama poikkeus on ollut kiinni Catch-Lohkon.

  • Manuaalisesti Käsittely Erityinen Poikkeus,

Jos haluat käsitellä tietyn tyyppinen poikkeus sitten voit tarjota ottamatta nimi catch-lohkon., Tietää nimen ottamatta sinun täytyy saada omaisuutta $Virhe muuttuja ja se on GetType(). Alla olevassa esimerkissä meidän täytyy löytää poikkeuksen nimi alla olevasta virheulosteesta.

esimerkki

Oletetaan, että virhe on tallennettu $Error-muuttujaan, sinun täytyy ajaa komennon alapuolella saadaksesi poikkeuksen nimen käytettäväksi catch Blockiin.

$Error.Exception.GetType().FullName
PS C:\WINDOWS\system32> $Error.Exception.GetType().FullNameSystem.Management.Automation.MethodInvocationException

Sinulla on poikkeus tyyppi nimi edellä komento, voit käyttää sama catch niin saalis lohko on kiinni vain, että erityinen poikkeus.,

Lähtö

  • saalis moninkertainen Poikkeusvoima.

Voit myös napata useita poikkeuksia Powershellissa. Siihen, voit käyttää yhden yrittää lohko ja useita saalis lohkot.

Esimerkki

Tulokset

Cannot find path 'C:\temp\cominfo1.html' because it does not exist.Setting up ErrorActionPreference to the Default value

Tässä ensimmäinen komento, itse virhe syntyy, joten seuraava komento ei toteuttaa. Jos ensimmäinen komento ei luo mitään virhettä sitten seuraava komento tarkistetaan ja jos poikkeus tapahtuu, sitten Kiinni, että erityinen poikkeus, lohko suoritetaan.,

Jos et halua käsitellä useita poikkeuksia ja vielä tarvitset joitakin komentoja virheitä voidaan jättää huomiotta, mutta ei pitäisi kulkea catch-lohkossa, joten seuraava komento voisi suorittaa sitten voit käyttää Ohita tai SilentlyIgnore vuonna ErrorAction Parametri.

Julkaistu 06-Jun-2020 16:36:12

Mainokset

Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *

Siirry työkalupalkkiin