Parametry -ErrorAction a -ErrorVariable

Tyto velice zajímavé parametry cmdletů v Powershellu umožňují ovlivnit chování při výskytu chyby. Jde o tzv. common parametry, které jsou dostupné u všech cmdletů.

Pomocí následujícího cmdletu můžeme zjistit o Commonparametrs více:

PS C:\> Get-Help about_CommonParameters

Parametr -ErrorAction

Parametr -ErrorAction umožňuje ovlivnit chování Powershellu při výskytu chyby. Parametr může nabývat následujících hodnot:

  • Continue [Default] – cmdlet vypíše chybu a pokračuje dále
  • Stop – cmdlet vypíše chyby a ukončí se
  • SilentlyContinue – cmdlet chybu nevypíše a pokračuje dále
  • Inquire – cmdlet se pozastaví a dotáže se, jak má pokračovat

Použití parametru si můžeme vyzkoušet na následujících příkladech. Pokusíme se zastavit služby, která neexistují:

PS C:\> Stop-Service neznama, neexistujici

Stop-Service : Cannot find any service with service name 'neznama'.

At line:1 char:13

+ stop-service <<<<  neznama, neexistujici

+ CategoryInfo          : ObjectNotFound: (neznama:String) [Stop-Service], ServiceCommandException

+ FullyQualifiedErrorId : NoServiceFoundForGivenName,Microsoft.PowerShell.Commands.StopServiceCommand

Stop-Service : Cannot find any service with service name 'neexistujici'.

At line:1 char:13

+ stop-service <<<<  neznama, neexistujici

+ CategoryInfo          : ObjectNotFound: (neexistujici:String) [Stop-Service], ServiceCommandException

+ FullyQualifiedErrorId : NoServiceFoundForGivenName,Microsoft.PowerShell.Commands.StopServiceCommand

Cmdlet se pokusil zastavit službu neznama, ale protože taková služba neexistuje, vypsal chybu a pokračoval dále, pokusil se zastavit službu neexistující, ale protože ta také neexistuje, opět vypsal chybu.

PS C:\> Stop-Service neznama, neexistujici -ErrorAction stop

Stop-Service : Cannot find any service with service name 'neznama'.

At line:1 char:13

+ stop-service <<<<  neznama, neexistujici -ErrorAction stop

+ CategoryInfo          : ObjectNotFound: (neznama:String) [Stop-Service], ServiceCommandException

+ FullyQualifiedErrorId : NoServiceFoundForGivenName,Microsoft.PowerShell.Commands.StopServiceCommand

Cmdlet se pokusil zastavit službu neznama, ale protože taková služba neexistuje, vypsal chybu a ukončil se. Zastavit službu neexistující se cmdlet již nepokouší.

PS C:\> Stop-Service neznama, neexistujici -ErrorAction SilentlyContinue

Cmdlet nevypsal žádnou chybu a to ani přesto, že se evidentně vyskytla.

PS C:\> Stop-Service neznama, neexistujici -ErrorAction Inquire

Confirm

Cannot find any service with the service name 'neznama'.

[Y] Yes  [A] Yes to All  [H] Halt Command  [S] Suspend  [?] Help (default is "Y"):h

Cmdlet se při výskytu chyby zeptá, co má dělat. Můžeme tedy sami rozhodnout, jak se bude pokrčovat. Yes v tomto případě znamená Continue, Halt Command vypíše chybu a cmdlet ukončí a Suspend cmdlet ukončí bez výpisu chyby.

Parametr -ErrorVariable

Tento parametr umožňuje chyba zapsat do proměnné. Tedy například:

PS C:\> Stop-Service neznama -ErrorVariable err

PS C:\> $err

Stop-Service : Cannot find any service with service name 'neznama'.

At line:1 char:13

+ stop-service <<<<  neznama

+ CategoryInfo          : ObjectNotFound: (neznama:String) [Stop-Service], ServiceCommandException>

+ FullyQualifiedErrorId : NoServiceFoundForGivenName,Microsoft.PowerShell.Commands.StopServiceCommand

Chyby se do proměnné v tomto parametru přidávají, takže pokud se vyskytne v cmdletu více chyb je jich více zapsaných i v proměnné. Počet chyb je možné zjistit následujícím způsobem.

PS C:\> $err.Count

Jednotlivé chyby pak můžeme vypisovat následovně:

PS C:\>$err[0]

Komentáře nejsou povoleny.