One of the key parts of any good PowerShell script is error handling.

    PowerShell errors are of two types. Terminating and Non-Terminating Errors.

    Terminating Error: A terminating error is an error that will halt a function or operation. A serious error during execution that halts the command (or script execution) completely. If you make a syntax error or run out of memory, that is a terminating error. Terminating errors can be caught and handled.
    Examples: non-existent cmdlets, syntax errors that would prevent a cmdlet from running, or other fatal errors.

    PS C:\> do-something
    do-something : The term 'do-something' 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.
    At line:1 char:1
    + do-something
    + ~~~~~~~~~~~~
    + CategoryInfo : ObjectNotFound: (do-something:String) [], CommandNotFoundException
    + FullyQualifiedErrorId : CommandNotFoundException

    Non-Terminating Error: Non-terminating errors allow Powershell to continue and usually come from cmdlets or other managed situations. A non-serious error that allows execution to continue despite the failure. Under normal circumstances they cannot be caught by Try-Catch-Finally.
    Examples: operational errors such file not found, permissions problems, etc.

    PS C:\> Get-ChildItem C:\temp\ -Recurse
     
     
        Directory: C:\temp
     
     
    Mode                LastWriteTime         Length Name
    ----                -------------         ------ ----
    d-----         1/6/2018  11:49 PM                folder1
    d-----         1/6/2018  11:49 PM                folder2
    d-----         1/6/2018  11:50 PM                folder3
    -a----         1/6/2018  11:49 PM              0 file1.txt
    -a----         1/6/2018  11:50 PM              0 file2.txt
    Get-ChildItem : Access to the path 'C:\temp\folder3' is denied.
    At line:1 char:1
    + Get-ChildItem C:\temp\ -Recurse
    + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        + CategoryInfo          : PermissionDenied: (C:\temp\folder3:String) [Get-ChildItem], UnauthorizedAccessException
        + FullyQualifiedErrorId : DirUnauthorizedAccessError,Microsoft.PowerShell.Commands.GetChildItemCommand

    We can catch the non-terminating erros by specifying -ErrorAction Stop on the end of a cmdlet. The available options with -ErrorAction are SilentlyContinue, Stop, Continue, Inquire, Ignore, Suspend.

    Error Action Preference:

    $ErrorActionPreference is a global variable saying how PowerShell will treat non-terminating errors.

    The default value of $ErrorActionPreference is “Continue”. It is not recommended to use $ErrorActionPreference = “SilentlyContinue” as this will suppress all the errors.

    SilentlyContinue – error messages are suppressed and execution continues.
    Stop – forces execution to stop, behaving like a terminating error.
    Continue – the default option. Errors will display and execution will continue.
    Inquire – prompt the user for input to see if we should proceed.
    Ignore – (new in v3) – the error is ignored and not logged to the error stream. Has very restricted usage scenarios.

    Try-catch-finally:

    Catching a Terminating Error:
    We use PowerShell try – catch to catch to catch terminating error.

    Try {
    #Do some stuff
    }
    Catch {
    #Got an error do something else
    }

    try{
        do-something
    }
     
    catch{
        $_.Exception.Message
    }
    The term 'do-something' 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.

    In the above example, only the error is caught. We can store this value to a variable if required. It failed to execute the given command in try block. So exception is caught.

     


     

    Page 9 of 18

    © 2020 WinAdmin.org, All Rights Reserved.

    We use cookies on our website. Some of them are essential for the operation of the site, while others help us to improve this site and the user experience (tracking cookies). You can decide for yourself whether you want to allow cookies or not. Please note that if you reject them, you may not be able to use all the functionalities of the site.