5

If I have a piece of code that throws an exception I get an error message, but I have no idea how to correctly catch (or determine) the exception that is being thrown. Normally I'll just catch System.Exception which is a bad idea.

Here is an example... I'm trying to create a folder on a drive that doesn't exist:

PS <dir> .\myScript.ps1 z:\test
mkdir : Cannot find drive. A drive with the name 'z' does not exist.
At <dir>myScript.ps1:218 char:7
+       mkdir $args[0] 1> $null
+       ~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : ObjectNotFound: (z:String) [New-Item], DriveNotFoundExc
   eption
    + FullyQualifiedErrorId : DriveNotFound,Microsoft.PowerShell.Commands.NewItemComm
   and

I've tried catching System.DriveNotFoundException, but rerunning my script still produces the uncaught exception.

Are there any tips as to effectively handling any type of exception?

1 Answer 1

5

Right after running the command inspect the contents of $error[0]. Look at the Exception property e.g.:

$error[0] | fl * -force

writeErrorStream      : True
PSMessageDetails      :
Exception             : System.Management.Automation.DriveNotFoundException: Cannot find drive. A drive with the name
                        'z' does not exist.
                           at System.Management.Automation.SessionStateInternal.GetDrive(String name, Boolean
                        automount)
                           at System.Management.Automation.SessionStateInternal.GetDrive(String name, Boolean

That particular exception would be [System.Management.Automation.DriveNotFoundException].

BTW if you want to "catch" that exception, you will need to convert the non-terminating error into a terminating error using -EA Stop in order for it to generate an exception that you can catch e.g.:

PS> try {mkdir z:\foo -ea Stop} catch {$_.Exception.GetType().FUllname}
System.Management.Automation.DriveNotFoundException
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.