@@ -160,7 +160,18 @@ private string _ErrorMessage
160160 return Localization . LocalizationHost . Read ( "PSFramework" , "FlowControl.Invoke-PSFProtectedCommand.Failed" , new object [ ] { _Message } ) ;
161161 }
162162 }
163- #endregion Private Fields
163+
164+ /// <summary>
165+ /// script used to write horrible errors on screen
166+ /// </summary>
167+ private string _ErrorScript = @"
168+ param (
169+ $__PSFramework__Parameters
170+ )
171+ Stop-PSFFunction @__PSFramework__Parameters
172+ return
173+ " ;
174+ #endregion Private Fields
164175
165176 #region Cmdlet Implementation
166177 /// <summary>
@@ -243,7 +254,7 @@ protected override void ProcessRecord()
243254 Thread . Sleep ( nextWait ) ;
244255 nextWait = ( int ) ( ( double ) nextWait * RetryWaitEscalation ) ;
245256 }
246-
257+
247258 }
248259 #endregion Cmdlet Implementation
249260
@@ -267,30 +278,30 @@ private void Terminate(Exception error)
267278 )
268279 ) ;
269280 }
270-
281+
271282 if ( Continue )
272283 DoContinue ( ContinueLabel ) ;
273284 return ;
274285 }
275286
276- using ( PowerShell ps = PowerShell . Create ( RunspaceMode . CurrentRunspace ) )
277- {
278- ps . AddCommand ( "PSFramework \\ Stop-PSFFunction" )
279- . AddParameter ( "Message" , _ErrorMessage )
280- . AddParameter ( "Exception" , error )
281- . AddParameter ( "Target" , Target )
282- . AddParameter ( "Continue" , Continue )
283- . AddParameter ( "FunctionName" , _Caller . CallerFunction )
284- . AddParameter ( "ModuleName" , _Caller . CallerModule )
285- . AddParameter ( "File" , _Caller . CallerFile )
286- . AddParameter ( "Line" , _Caller . CallerLine )
287- . AddParameter ( "Cmdlet" , PSCmdlet )
288- . AddParameter ( "EnableException" , EnableException ) ;
289- if ( ! String . IsNullOrEmpty ( ContinueLabel ) )
290- ps . AddParameter ( "ContinueLabel" , ContinueLabel ) ;
291-
292- ps . Invoke ( ) ;
293- }
287+ Hashtable parameters = new Hashtable ( StringComparer . OrdinalIgnoreCase ) ;
288+ parameters [ "Message" ] = _ErrorMessage ;
289+ parameters [ "Exception" ] = error ;
290+ parameters [ "Target" ] = Target ;
291+ parameters [ "Continue" ] = Continue ;
292+ if ( ! String . IsNullOrEmpty ( ContinueLabel ) )
293+ parameters [ "ContinueLabel" ] = ContinueLabel ;
294+ parameters [ "FunctionName" ] = _Caller . CallerFunction ;
295+ parameters [ "ModuleName" ] = _Caller . CallerModule ;
296+ parameters [ "File" ] = _Caller . CallerFile ;
297+ parameters [ "Line" ] = _Caller . CallerLine ;
298+ parameters [ "Cmdlet" ] = PSCmdlet ;
299+ parameters [ "EnableException" ] = EnableException ;
300+ parameters [ "StepsUpward" ] = 1 ;
301+
302+ ScriptBlock errorBlock = ScriptBlock . Create ( _ErrorScript ) ;
303+ object [ ] arguments = new object [ ] { parameters } ;
304+ PSCmdlet . InvokeCommand . InvokeScript ( false , errorBlock , null , arguments ) ;
294305 }
295306
296307 private void ErrorEventAction ( Exception error )
@@ -301,7 +312,8 @@ private void ErrorEventAction(Exception error)
301312 object errorRecord = error ;
302313 if ( error is RuntimeException )
303314 errorRecord = ( ( RuntimeException ) error ) . ErrorRecord ;
304- try {
315+ try
316+ {
305317 WriteMessage ( Localization . LocalizationHost . Read ( "PSFramework.FlowControl.Invoke-PSFProtectedCommand.ErrorEvent" , new object [ ] { _Message , Target } ) , Level , _Caller . CallerFunction , _Caller . CallerModule , _Caller . CallerFile , _Caller . CallerLine , Tag , Target ) ;
306318 table [ "Result" ] = PSCmdlet . InvokeCommand . InvokeScript ( false , ErrorEvent , null , errorRecord ) ;
307319 WriteMessage ( Localization . LocalizationHost . Read ( "PSFramework.FlowControl.Invoke-PSFProtectedCommand.ErrorEvent.Success" , new object [ ] { _Message , Target } ) , Level , _Caller . CallerFunction , _Caller . CallerModule , _Caller . CallerFile , _Caller . CallerLine , Tag , Target , table ) ;
@@ -313,4 +325,4 @@ private void ErrorEventAction(Exception error)
313325 }
314326 }
315327 }
316- }
328+ }
0 commit comments