Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
Allen White wrote this handy blogpost on how to handle error message and get more information out of an error record:
https://sqlblog.com/blogs/allen_white/archive/2009/06/08/handling-errors-in-powershell.aspx
There is an addtional method to get more information available. I found myself sending this little code snippet in email to many, and almost always I get the response that it saved that person with a ton of work, as new users to PowerShell are often left bewildered by the sparse error information; I had colleagues grabbing for the debugger to find the more detailed error messages...
An example; let's generate a simple error (recreate master will not work on most systems):
$db = new Microsoft.SqlServer.Management.Smo.Database
$db.Name = "master"
$db.Parent = get-item .
$db.Create()
Exception calling "Create" with "0" argument(s): "Create failed for Database 'master'. "
At line:1 char:11
+ $db.Create( <<<< )
Not very helpful is it?
Here is where this little gem comes in:
$error[0]|format-list -force
Now let's take a look at the details this emits:
Exception : System.Management.Automation.MethodInvocationException:
Exception calling "Create" with "0" argument(s): "Crea
te failed for Database 'master'. " ---> Microsoft.SqlSe
rver.Management.Smo.FailedOperationException: Create fa
iled for Database 'master'. ---> Microsoft.SqlServer.M
anagement.Common.ExecutionFailureException: An exceptio
n occurred while executing a Transact-SQL statement or
batch. ---> System.Data.SqlClient.SqlException: Databas
e 'master' already exists. Choose a different database
name.
at System.Data.SqlClient.SqlConnection.OnError(SqlEx
<cutting middle part out>
TargetObject :
CategoryInfo : NotSpecified: (:) [], MethodInvocationException
FullyQualifiedErrorId : DotNetMethodTargetInvocation
ErrorDetails :
InvocationInfo : System.Management.Automation.InvocationInfo
Well, now THAT's more like it!
As you can see the -force flag does a couple of nice things.
- It concatenates the error messages into a somewhat understandable result.
- It dumps stack information + all other error information avalable.
Generally it's a time saver as you have this command readily available for you at the command line.
Do you have any tips on error handling? I'd love to hear about it.
-Michiel