<span style="color: #00008b;">function</span><span style="color: #000000;"> </span><span style="color: #8a2be2;">New-ErrorRecord</span><span style="color: #000000;"> </span><span style="color: #000000;">{</span>
<span style="color: #000000;"> </span><span style="color: #00008b;">param</span><span style="color: #000000;">(</span>
<span style="color: #000000;"> </span><span style="color: #a9a9a9;">[</span><span style="color: #add8e6;">Parameter</span><span style="color: #000000;">(</span><span style="color: #000000;">Mandatory</span><span style="color: #000000;"> </span><span style="color: #a9a9a9;">=</span><span style="color: #000000;"> </span><span style="color: #ff4500;">$true</span><span style="color: #a9a9a9;">,</span><span style="color: #000000;"> </span><span style="color: #000000;">Position</span><span style="color: #000000;"> </span><span style="color: #a9a9a9;">=</span><span style="color: #000000;"> </span><span style="color: #800080;">0</span><span style="color: #000000;">)</span><span style="color: #a9a9a9;">]</span>
<span style="color: #000000;"> </span><span style="color: #008080;">[System.String]</span>
<span style="color: #000000;"> </span><span style="color: #ff4500;">$Exception</span><span style="color: #a9a9a9;">,</span>
<span style="color: #000000;"> </span><span style="color: #a9a9a9;">[</span><span style="color: #add8e6;">Parameter</span><span style="color: #000000;">(</span><span style="color: #000000;">Mandatory</span><span style="color: #000000;"> </span><span style="color: #a9a9a9;">=</span><span style="color: #000000;"> </span><span style="color: #ff4500;">$true</span><span style="color: #a9a9a9;">,</span><span style="color: #000000;"> </span><span style="color: #000000;">Position</span><span style="color: #000000;"> </span><span style="color: #a9a9a9;">=</span><span style="color: #000000;"> </span><span style="color: #800080;">1</span><span style="color: #000000;">)</span><span style="color: #a9a9a9;">]</span>
<span style="color: #000000;"> </span><span style="color: #a9a9a9;">[</span><span style="color: #add8e6;">Alias</span><span style="color: #000000;">(</span><span style="color: #8b0000;">'ID'</span><span style="color: #000000;">)</span><span style="color: #a9a9a9;">]</span>
<span style="color: #000000;"> </span><span style="color: #008080;">[System.String]</span>
<span style="color: #000000;"> </span><span style="color: #ff4500;">$ErrorId</span><span style="color: #a9a9a9;">,</span>
<span style="color: #000000;"> </span><span style="color: #a9a9a9;">[</span><span style="color: #add8e6;">Parameter</span><span style="color: #000000;">(</span><span style="color: #000000;">Mandatory</span><span style="color: #000000;"> </span><span style="color: #a9a9a9;">=</span><span style="color: #000000;"> </span><span style="color: #ff4500;">$true</span><span style="color: #a9a9a9;">,</span><span style="color: #000000;"> </span><span style="color: #000000;">Position</span><span style="color: #000000;"> </span><span style="color: #a9a9a9;">=</span><span style="color: #000000;"> </span><span style="color: #800080;">2</span><span style="color: #000000;">)</span><span style="color: #a9a9a9;">]</span>
<span style="color: #000000;"> </span><span style="color: #a9a9a9;">[</span><span style="color: #add8e6;">Alias</span><span style="color: #000000;">(</span><span style="color: #8b0000;">'Category'</span><span style="color: #000000;">)</span><span style="color: #a9a9a9;">]</span>
<span style="color: #000000;"> </span><span style="color: #008080;">[System.Management.Automation.ErrorCategory]</span>
<span style="color: #000000;"> </span><span style="color: #a9a9a9;">[</span><span style="color: #add8e6;">ValidateSet</span><span style="color: #000000;">(</span><span style="color: #8b0000;">'NotSpecified'</span><span style="color: #a9a9a9;">,</span><span style="color: #000000;"> </span><span style="color: #8b0000;">'OpenError'</span><span style="color: #a9a9a9;">,</span><span style="color: #000000;"> </span><span style="color: #8b0000;">'CloseError'</span><span style="color: #a9a9a9;">,</span><span style="color: #000000;"> </span><span style="color: #8b0000;">'DeviceError'</span><span style="color: #a9a9a9;">,</span>
<span style="color: #000000;"> </span><span style="color: #8b0000;">'DeadlockDetected'</span><span style="color: #a9a9a9;">,</span><span style="color: #000000;"> </span><span style="color: #8b0000;">'InvalidArgument'</span><span style="color: #a9a9a9;">,</span><span style="color: #000000;"> </span><span style="color: #8b0000;">'InvalidData'</span><span style="color: #a9a9a9;">,</span><span style="color: #000000;"> </span><span style="color: #8b0000;">'InvalidOperation'</span><span style="color: #a9a9a9;">,</span>
<span style="color: #000000;"> </span><span style="color: #8b0000;">'InvalidResult'</span><span style="color: #a9a9a9;">,</span><span style="color: #000000;"> </span><span style="color: #8b0000;">'InvalidType'</span><span style="color: #a9a9a9;">,</span><span style="color: #000000;"> </span><span style="color: #8b0000;">'MetadataError'</span><span style="color: #a9a9a9;">,</span><span style="color: #000000;"> </span><span style="color: #8b0000;">'NotImplemented'</span><span style="color: #a9a9a9;">,</span>
<span style="color: #000000;"> </span><span style="color: #8b0000;">'NotInstalled'</span><span style="color: #a9a9a9;">,</span><span style="color: #000000;"> </span><span style="color: #8b0000;">'ObjectNotFound'</span><span style="color: #a9a9a9;">,</span><span style="color: #000000;"> </span><span style="color: #8b0000;">'OperationStopped'</span><span style="color: #a9a9a9;">,</span><span style="color: #000000;"> </span><span style="color: #8b0000;">'OperationTimeout'</span><span style="color: #a9a9a9;">,</span>
<span style="color: #000000;"> </span><span style="color: #8b0000;">'SyntaxError'</span><span style="color: #a9a9a9;">,</span><span style="color: #000000;"> </span><span style="color: #8b0000;">'ParserError'</span><span style="color: #a9a9a9;">,</span><span style="color: #000000;"> </span><span style="color: #8b0000;">'PermissionDenied'</span><span style="color: #a9a9a9;">,</span><span style="color: #000000;"> </span><span style="color: #8b0000;">'ResourceBusy'</span><span style="color: #a9a9a9;">,</span>
<span style="color: #000000;"> </span><span style="color: #8b0000;">'ResourceExists'</span><span style="color: #a9a9a9;">,</span><span style="color: #000000;"> </span><span style="color: #8b0000;">'ResourceUnavailable'</span><span style="color: #a9a9a9;">,</span><span style="color: #000000;"> </span><span style="color: #8b0000;">'ReadError'</span><span style="color: #a9a9a9;">,</span><span style="color: #000000;"> </span><span style="color: #8b0000;">'WriteError'</span><span style="color: #a9a9a9;">,</span>
<span style="color: #000000;"> </span><span style="color: #8b0000;">'FromStdErr'</span><span style="color: #a9a9a9;">,</span><span style="color: #000000;"> </span><span style="color: #8b0000;">'SecurityError'</span><span style="color: #000000;">)</span><span style="color: #a9a9a9;">]</span>
<span style="color: #000000;"> </span><span style="color: #ff4500;">$ErrorCategory</span><span style="color: #a9a9a9;">,</span>
<span style="color: #000000;"> </span><span style="color: #a9a9a9;">[</span><span style="color: #add8e6;">Parameter</span><span style="color: #000000;">(</span><span style="color: #000000;">Mandatory</span><span style="color: #000000;"> </span><span style="color: #a9a9a9;">=</span><span style="color: #000000;"> </span><span style="color: #ff4500;">$true</span><span style="color: #a9a9a9;">,</span><span style="color: #000000;"> </span><span style="color: #000000;">Position</span><span style="color: #000000;"> </span><span style="color: #a9a9a9;">=</span><span style="color: #000000;"> </span><span style="color: #800080;">3</span><span style="color: #000000;">)</span><span style="color: #a9a9a9;">]</span>
<span style="color: #000000;"> </span><span style="color: #008080;">[System.Object]</span>
<span style="color: #000000;"> </span><span style="color: #ff4500;">$TargetObject</span><span style="color: #a9a9a9;">,</span>
<span style="color: #000000;"> </span><span style="color: #a9a9a9;">[</span><span style="color: #add8e6;">Parameter</span><span style="color: #000000;">(</span><span style="color: #000000;">)</span><span style="color: #a9a9a9;">]</span>
<span style="color: #000000;"> </span><span style="color: #008080;">[System.String]</span>
<span style="color: #000000;"> </span><span style="color: #ff4500;">$Message</span><span style="color: #a9a9a9;">,</span>
<span style="color: #000000;"> </span><span style="color: #a9a9a9;">[</span><span style="color: #add8e6;">Parameter</span><span style="color: #000000;">(</span><span style="color: #000000;">)</span><span style="color: #a9a9a9;">]</span>
<span style="color: #000000;"> </span><span style="color: #008080;">[System.Exception]</span>
<span style="color: #000000;"> </span><span style="color: #ff4500;">$InnerException</span>
<span style="color: #000000;"> </span><span style="color: #000000;">)</span>
<span style="color: #000000;"> </span><span style="color: #00008b;">begin</span><span style="color: #000000;"> </span><span style="color: #000000;">{</span>
<span style="color: #000000;"> </span><span style="color: #006400;"># check for required function, if not defined...</span>
<span style="color: #000000;"> </span><span style="color: #00008b;">if</span><span style="color: #000000;"> </span><span style="color: #000000;">(</span><span style="color: #a9a9a9;">-not</span><span style="color: #000000;"> </span><span style="color: #000000;">(</span><span style="color: #0000ff;">Test-Path</span><span style="color: #000000;"> </span><span style="color: #8a2be2;">function:Get-AvailableExceptionsList</span><span style="color: #000000;">)</span><span style="color: #000000;">)</span><span style="color: #000000;"> </span><span style="color: #000000;">{</span>
<span style="color: #000000;"> </span><span style="color: #ff4500;">$message1</span><span style="color: #000000;"> </span><span style="color: #a9a9a9;">=</span><span style="color: #000000;"> </span><span style="color: #8b0000;">"The required function Get-AvailableExceptionsList is not defined. "</span><span style="color: #000000;"> </span><span style="color: #a9a9a9;">+</span>
<span style="color: #000000;"> </span><span style="color: #8b0000;">"Please define it in the same scope as this function's and try again."</span>
<span style="color: #000000;"> </span><span style="color: #ff4500;">$exception1</span><span style="color: #000000;"> </span><span style="color: #a9a9a9;">=</span><span style="color: #000000;"> </span><span style="color: #0000ff;">New-Object</span><span style="color: #000000;"> </span><span style="color: #8a2be2;">System.OperationCanceledException</span><span style="color: #000000;"> </span><span style="color: #ff4500;">$message1</span>
<span style="color: #000000;"> </span><span style="color: #ff4500;">$errorID1</span><span style="color: #000000;"> </span><span style="color: #a9a9a9;">=</span><span style="color: #000000;"> </span><span style="color: #8b0000;">'RequiredFunctionNotDefined'</span>
<span style="color: #000000;"> </span><span style="color: #ff4500;">$errorCategory1</span><span style="color: #000000;"> </span><span style="color: #a9a9a9;">=</span><span style="color: #000000;"> </span><span style="color: #8b0000;">'OperationStopped'</span>
<span style="color: #000000;"> </span><span style="color: #ff4500;">$targetObject1</span><span style="color: #000000;"> </span><span style="color: #a9a9a9;">=</span><span style="color: #000000;"> </span><span style="color: #8b0000;">'Get-AvailableExceptionsList'</span>
<span style="color: #000000;"> </span><span style="color: #ff4500;">$errorRecord1</span><span style="color: #000000;"> </span><span style="color: #a9a9a9;">=</span><span style="color: #000000;"> </span><span style="color: #0000ff;">New-Object</span><span style="color: #000000;"> </span><span style="color: #8a2be2;">Management.Automation.ErrorRecord</span><span style="color: #000000;"> </span><span style="color: #ff4500;">$exception1</span><span style="color: #a9a9a9;">,</span><span style="color: #000000;"> </span><span style="color: #ff4500;">$errorID1</span><span style="color: #a9a9a9;">,</span>
<span style="color: #000000;"> </span><span style="color: #ff4500;">$errorCategory1</span><span style="color: #a9a9a9;">,</span><span style="color: #000000;"> </span><span style="color: #ff4500;">$targetObject1</span>
<span style="color: #000000;"> </span><span style="color: #006400;"># ...report a terminating error to the user</span>
<span style="color: #000000;"> </span><span style="color: #ff4500;">$PSCmdlet</span><span style="color: #a9a9a9;">.</span><span style="color: #000000;">ThrowTerminatingError</span><span style="color: #000000;">(</span><span style="color: #ff4500;">$errorRecord1</span><span style="color: #000000;">)</span>
<span style="color: #000000;"> </span><span style="color: #000000;">}</span>
<span style="color: #000000;"> </span><span style="color: #006400;"># required function is defined, get "available" exceptions</span>
<span style="color: #000000;"> </span><span style="color: #ff4500;">$exceptions</span><span style="color: #000000;"> </span><span style="color: #a9a9a9;">=</span><span style="color: #000000;"> </span><span style="color: #0000ff;">Get-AvailableExceptionsList</span>
<span style="color: #000000;"> </span><span style="color: #ff4500;">$exceptionsList</span><span style="color: #000000;"> </span><span style="color: #a9a9a9;">=</span><span style="color: #000000;"> </span><span style="color: #ff4500;">$exceptions</span><span style="color: #000000;"> </span><span style="color: #a9a9a9;">-join</span><span style="color: #000000;"> </span><span style="color: #8b0000;">"`r`n"</span>
<span style="color: #000000;"> </span><span style="color: #000000;">}</span>
<span style="color: #000000;"> </span><span style="color: #00008b;">process</span><span style="color: #000000;"> </span><span style="color: #000000;">{</span>
<span style="color: #000000;"> </span><span style="color: #006400;"># trap for any of the "exceptional" Exception objects that made through the filter</span>
<span style="color: #000000;"> </span><span style="color: #00008b;">trap</span><span style="color: #000000;"> </span><span style="color: #008080;">[Microsoft.PowerShell.Commands.NewObjectCommand]</span><span style="color: #000000;"> </span><span style="color: #000000;">{</span>
<span style="color: #000000;"> </span><span style="color: #ff4500;">$PSCmdlet</span><span style="color: #a9a9a9;">.</span><span style="color: #000000;">ThrowTerminatingError</span><span style="color: #000000;">(</span><span style="color: #ff4500;">$_</span><span style="color: #000000;">)</span>
<span style="color: #000000;"> </span><span style="color: #000000;">}</span>
<span style="color: #000000;"> </span><span style="color: #006400;"># verify input exception is "available". if so...</span>
<span style="color: #000000;"> </span><span style="color: #00008b;">if</span><span style="color: #000000;"> </span><span style="color: #000000;">(</span><span style="color: #ff4500;">$exceptions</span><span style="color: #000000;"> </span><span style="color: #a9a9a9;">-match</span><span style="color: #000000;"> </span><span style="color: #8b0000;">"^(System\.)?$Exception$"</span><span style="color: #000000;">)</span><span style="color: #000000;"> </span><span style="color: #000000;">{</span>
<span style="color: #000000;"> </span><span style="color: #006400;"># ...build and save the new Exception depending on present arguments, if it...</span>
<span style="color: #000000;"> </span><span style="color: #ff4500;">$_exception</span><span style="color: #000000;"> </span><span style="color: #a9a9a9;">=</span><span style="color: #000000;"> </span><span style="color: #00008b;">if</span><span style="color: #000000;"> </span><span style="color: #000000;">(</span><span style="color: #ff4500;">$Message</span><span style="color: #000000;"> </span><span style="color: #a9a9a9;">-and</span><span style="color: #000000;"> </span><span style="color: #ff4500;">$InnerException</span><span style="color: #000000;">)</span><span style="color: #000000;"> </span><span style="color: #000000;">{</span>
<span style="color: #000000;"> </span><span style="color: #006400;"># ...includes a custom message and an inner exception</span>
<span style="color: #000000;"> </span><span style="color: #0000ff;">New-Object</span><span style="color: #000000;"> </span><span style="color: #ff4500;">$Exception</span><span style="color: #000000;"> </span><span style="color: #ff4500;">$Message</span><span style="color: #a9a9a9;">,</span><span style="color: #000000;"> </span><span style="color: #ff4500;">$InnerException</span>
<span style="color: #000000;"> </span><span style="color: #000000;">}</span><span style="color: #000000;"> </span><span style="color: #00008b;">elseif</span><span style="color: #000000;"> </span><span style="color: #000000;">(</span><span style="color: #ff4500;">$Message</span><span style="color: #000000;">)</span><span style="color: #000000;"> </span><span style="color: #000000;">{</span>
<span style="color: #000000;"> </span><span style="color: #006400;"># ...includes a custom message only</span>
<span style="color: #000000;"> </span><span style="color: #0000ff;">New-Object</span><span style="color: #000000;"> </span><span style="color: #ff4500;">$Exception</span><span style="color: #000000;"> </span><span style="color: #ff4500;">$Message</span>
<span style="color: #000000;"> </span><span style="color: #000000;">}</span><span style="color: #000000;"> </span><span style="color: #00008b;">else</span><span style="color: #000000;"> </span><span style="color: #000000;">{</span>
<span style="color: #000000;"> </span><span style="color: #006400;"># ...is just the exception full name</span>
<span style="color: #000000;"> </span><span style="color: #0000ff;">New-Object</span><span style="color: #000000;"> </span><span style="color: #ff4500;">$Exception</span>
<span style="color: #000000;"> </span><span style="color: #000000;">}</span>
<span style="color: #000000;"> </span><span style="color: #006400;"># now build and output the new ErrorRecord</span>
<span style="color: #000000;"> </span><span style="color: #0000ff;">New-Object</span><span style="color: #000000;"> </span><span style="color: #8a2be2;">Management.Automation.ErrorRecord</span><span style="color: #000000;"> </span><span style="color: #ff4500;">$_exception</span><span style="color: #a9a9a9;">,</span><span style="color: #000000;"> </span><span style="color: #ff4500;">$ErrorID</span><span style="color: #a9a9a9;">,</span>
<span style="color: #000000;"> </span><span style="color: #ff4500;">$ErrorCategory</span><span style="color: #a9a9a9;">,</span><span style="color: #000000;"> </span><span style="color: #ff4500;">$TargetObject</span>
<span style="color: #000000;"> </span><span style="color: #000000;">}</span><span style="color: #000000;"> </span><span style="color: #00008b;">else</span><span style="color: #000000;"> </span><span style="color: #000000;">{</span>
<span style="color: #000000;"> </span><span style="color: #006400;"># Exception argument is not "available";</span>
<span style="color: #000000;"> </span><span style="color: #006400;"># warn the user, provide a list of "available" exceptions and...</span>
<span style="color: #000000;"> </span><span style="color: #0000ff;">Write-Warning</span><span style="color: #000000;"> </span><span style="color: #8b0000;">"Available exceptions are:`r`n$exceptionsList"</span><span style="color: #000000;"> </span>
<span style="color: #000000;"> </span><span style="color: #ff4500;">$message2</span><span style="color: #000000;"> </span><span style="color: #a9a9a9;">=</span><span style="color: #000000;"> </span><span style="color: #8b0000;">"Exception '$Exception' is not available."</span>
<span style="color: #000000;"> </span><span style="color: #ff4500;">$exception2</span><span style="color: #000000;"> </span><span style="color: #a9a9a9;">=</span><span style="color: #000000;"> </span><span style="color: #0000ff;">New-Object</span><span style="color: #000000;"> </span><span style="color: #8a2be2;">System.InvalidOperationExceptionn</span><span style="color: #000000;"> </span><span style="color: #ff4500;">$message2</span>
<span style="color: #000000;"> </span><span style="color: #ff4500;">$errorID2</span><span style="color: #000000;"> </span><span style="color: #a9a9a9;">=</span><span style="color: #000000;"> </span><span style="color: #8b0000;">'BadException'</span>
<span style="color: #000000;"> </span><span style="color: #ff4500;">$errorCategory2</span><span style="color: #000000;"> </span><span style="color: #a9a9a9;">=</span><span style="color: #000000;"> </span><span style="color: #8b0000;">'InvalidOperation'</span>
<span style="color: #000000;"> </span><span style="color: #ff4500;">$targetObject2</span><span style="color: #000000;"> </span><span style="color: #a9a9a9;">=</span><span style="color: #000000;"> </span><span style="color: #8b0000;">'Get-AvailableExceptionsList'</span>
<span style="color: #000000;"> </span><span style="color: #ff4500;">$errorRecord2</span><span style="color: #000000;"> </span><span style="color: #a9a9a9;">=</span><span style="color: #000000;"> </span><span style="color: #0000ff;">New-Object</span><span style="color: #000000;"> </span><span style="color: #8a2be2;">Management.Automation.ErrorRecord</span><span style="color: #000000;"> </span><span style="color: #ff4500;">$exception2</span><span style="color: #a9a9a9;">,</span><span style="color: #000000;"> </span><span style="color: #ff4500;">$errorID2</span><span style="color: #a9a9a9;">,</span>
<span style="color: #000000;"> </span><span style="color: #ff4500;">$errorCategory2</span><span style="color: #a9a9a9;">,</span><span style="color: #000000;"> </span><span style="color: #ff4500;">$targetObject2</span>
<span style="color: #000000;"> </span><span style="color: #006400;"># ...report a terminating error to the user</span>
<span style="color: #000000;"> </span><span style="color: #ff4500;">$PSCmdlet</span><span style="color: #a9a9a9;">.</span><span style="color: #000000;">ThrowTerminatingError</span><span style="color: #000000;">(</span><span style="color: #ff4500;">$errorRecord2</span><span style="color: #000000;">)</span>
<span style="color: #000000;"> </span><span style="color: #000000;">}</span>
<span style="color: #000000;"> </span><span style="color: #000000;">}</span>
<span style="color: #000000;"> </span><span style="color: #006400;"><# .Synopsis Creates an custom ErrorRecord that can be used to report a terminating or non-terminating error. .Description Creates an custom ErrorRecord that can be used to report a terminating or non-terminating error. .Parameter Exception The Exception that will be associated with the ErrorRecord. .Parameter ErrorID A scripter-defined identifier of the error. This identifier must be a non-localized string for a specific error type. .Parameter ErrorCategory An ErrorCategory enumeration that defines the category of the error. .Parameter TargetObject The object that was being processed when the error took place. .Parameter Message Describes the Exception to the user. .Parameter InnerException The Exception instance that caused the Exception association with the ErrorRecord. .Example # advanced functions for testing function Test-1 { [CmdletBinding()] param( [Parameter(Mandatory = $true, ValueFromPipeline = $true)] [String] $Path ) process { foreach ($_path in $Path) { $content = Get-Content -LiteralPath $_path -ErrorAction SilentlyContinue if (-not $content) { $errorRecord = New-ErrorRecord InvalidOperationException FileIsEmpty InvalidOperation $_path -Message "File '$_path' is empty." $PSCmdlet.ThrowTerminatingError($errorRecord) } } } } function Test-2 { [CmdletBinding()] param( [Parameter(Mandatory = $true, ValueFromPipeline = $true)] [String] $Path ) process { foreach ($_path in $Path) { $content = Get-Content -LiteralPath $_path -ErrorAction SilentlyContinue if (-not $content) { $errorRecord = New-ErrorRecord InvalidOperationException FileIsEmptyAgain InvalidOperation $_path -Message "File '$_path' is empty again." -InnerException $Error[0].Exception $PSCmdlet.ThrowTerminatingError($errorRecord) } } } } # code to test the custom terminating error reports Clear-Host $null = New-Item -Path .\MyEmptyFile.bak -ItemType File -Force -Verbose Get-ChildItem *.bak | Where-Object {-not $_.PSIsContainer} | Test-1 Write-Host System.Management.Automation.ErrorRecord -ForegroundColor Green $Error[0] | Format-List * -Force Write-Host Exception -ForegroundColor Green $Error[0].Exception | Format-List * -Force Get-ChildItem *.bak | Where-Object {-not $_.PSIsContainer} | Test-2 Write-Host System.Management.Automation.ErrorRecord -ForegroundColor Green $Error[0] | Format-List * -Force Write-Host Exception -ForegroundColor Green $Error[0].Exception | Format-List * -Force Remove-Item .\MyEmptyFile.bak -Verbose Description =========== Both advanced functions throw a custom terminating error when an empty file is being processed. -Function Test-2's custom ErrorRecord includes an inner exception, which is the ErrorRecord reported by function Test-1. The test code demonstrates this by creating an empty file in the curent directory -which is deleted at the end- and passing its path to both test functions. The custom ErrorRecord is reported and execution stops for function Test-1, then the ErrorRecord and its Exception are displayed for quick analysis. Same process with function Test-2; after analyzing the information, compare both ErrorRecord objects and their corresponding Exception objects. -In the ErrorRecord note the different Exception, CategoryInfo and FullyQualifiedErrorId data. -In the Exception note the different Message and InnerException data. .Example $errorRecord = New-ErrorRecord System.InvalidOperationException FileIsEmpty InvalidOperation $Path -Message "File '$Path' is empty." $PSCmdlet.ThrowTerminatingError($errorRecord) Description =========== A custom terminating ErrorRecord is stored in variable 'errorRecord' and then it is reported through $PSCmdlet's ThrowTerminatingError method. The $PSCmdlet object is only available within advanced functions. .Example $errorRecord = New-ErrorRecord System.InvalidOperationException FileIsEmpty InvalidOperation $Path -Message "File '$Path' is empty." Write-Error -ErrorRecord $errorRecord Description =========== A custom non-terminating ErrorRecord is stored in variable 'errorRecord' and then it is reported through the Write-Error Cmdlet's ErrorRecord parameter. .Inputs System.String .Outputs System.Management.Automation.ErrorRecord .Link Write-Error Get-AvailableExceptionsList .Notes Name: New-ErrorRecord Author: Robert Robelo LastEdit: 08/24/2011 12:35 #></span>
<span style="color: #000000;">}</span>