/// <summary> /// block the ps thread until ACK message or Error happened. /// </summary> private void WaitForAckMessage() { DebugHelper.WriteLogEx(); this.ackedEvent.Wait(); if (this.exception != null) { DebugHelper.WriteLogEx("error happened", 0); if (this.Cmdlet != null) { DebugHelper.WriteLogEx("Throw Terminating error", 1); // throw terminating error ErrorRecord errorRecord = ErrorToErrorRecord.ErrorRecordFromAnyException( new InvocationContext(this.TargetComputerName, null), this.exception, null); this.Cmdlet.ThrowTerminatingError(errorRecord); } else { DebugHelper.WriteLogEx("Throw exception", 1); // throw exception out throw this.exception; } } DebugHelper.WriteLogEx("ACK happened", 0); }
public override void Execute(CmdletOperationBase cmdlet) { Exception cimException; try { try { if (this.error != null) { cimException = new CimException(this.error); } else { cimException = this.Exception; } Exception exception = cimException; cmdlet.WriteError(ErrorToErrorRecord.ErrorRecordFromAnyException(this.invocationContext, exception, this.cimResultContext)); this.responseType = CimResponseType.Yes; } catch { this.responseType = CimResponseType.NoToAll; throw; } } finally { this.OnComplete(); } }
internal static ErrorCategory ConvertCimExceptionToErrorCategory(CimException cimException) { ErrorCategory errorCategory = ErrorCategory.NotSpecified; if (cimException.ErrorData != null) { errorCategory = ErrorToErrorRecord.ConvertCimErrorToErrorCategory(cimException.ErrorData); } if (errorCategory == ErrorCategory.NotSpecified) { errorCategory = ErrorToErrorRecord.ConvertCimNativeErrorCodeToErrorCategory(cimException.NativeErrorCode); } return(errorCategory); }
internal static ErrorRecord InitializeErrorRecord(InvocationContext context, CimException cimException, CimResultContext cimResultContext) { InvocationContext invocationContext = context; CimException cimException1 = cimException; string messageId = cimException.MessageId; string str = messageId; if (messageId == null) { str = string.Concat("MiClientApiError_", cimException.NativeErrorCode); } ErrorRecord errorSource = ErrorToErrorRecord.InitializeErrorRecordCore(invocationContext, cimException1, str, ErrorToErrorRecord.ConvertCimExceptionToErrorCategory(cimException), cimResultContext); if (cimException.ErrorData != null) { errorSource.CategoryInfo.TargetName = cimException.ErrorSource; } return(errorSource); }
internal static ErrorRecord ErrorRecordFromAnyException(InvocationContext context, Exception inner, CimResultContext cimResultContext) { CimException cimException = inner as CimException; if (cimException == null) { IContainsErrorRecord containsErrorRecord = inner as IContainsErrorRecord; if (containsErrorRecord == null) { return(ErrorToErrorRecord.InitializeErrorRecord(context, inner, string.Concat("CimCmdlet_", inner.GetType().Name), ErrorCategory.NotSpecified, cimResultContext)); } else { return(ErrorToErrorRecord.InitializeErrorRecord(context, inner, string.Concat("CimCmdlet_", containsErrorRecord.ErrorRecord.FullyQualifiedErrorId), containsErrorRecord.ErrorRecord.CategoryInfo.Category, cimResultContext)); } } else { return(ErrorToErrorRecord.CreateFromCimException(context, cimException, cimResultContext)); } }
/// <summary> /// <para> /// Write error to pipeline /// </para> /// </summary> /// <param name="cmdlet"></param> public override void Execute(CmdletOperationBase cmdlet) { Debug.Assert(cmdlet != null, "Caller should verify that cmdlet != null"); try { Exception errorException = (error != null) ? new CimException(error) : this.Exception; // PS engine takes care of handling error action cmdlet.WriteError(ErrorToErrorRecord.ErrorRecordFromAnyException(this.invocationContext, errorException, this.cimResultContext)); // if user wants to continue, we will get here this.responseType = CimResponseType.Yes; } catch { this.responseType = CimResponseType.NoToAll; throw; } finally { // unblocking the waiting thread this.OnComplete(); } }
internal static ErrorRecord InitializeErrorRecord(InvocationContext context, Exception exception, string errorId, ErrorCategory errorCategory, CimResultContext cimResultContext) { return(ErrorToErrorRecord.InitializeErrorRecordCore(context, exception, errorId, errorCategory, cimResultContext)); }
internal static ErrorRecord CreateFromCimException(InvocationContext context, CimException cimException, CimResultContext cimResultContext) { return(ErrorToErrorRecord.InitializeErrorRecord(context, cimException, cimResultContext)); }