private static void InvokeCmdletMethodAndWaitForResults <T>(CmdletMethodInvoker <T> cmdletMethodInvoker, Cmdlet cmdlet) { cmdletMethodInvoker.MethodResult = default(T); try { T local = cmdletMethodInvoker.Action(cmdlet); lock (cmdletMethodInvoker.SyncObject) { cmdletMethodInvoker.MethodResult = local; } } catch (Exception exception) { lock (cmdletMethodInvoker.SyncObject) { cmdletMethodInvoker.ExceptionThrownOnCmdletThread = exception; } throw; } finally { if (cmdletMethodInvoker.Finished != null) { cmdletMethodInvoker.Finished.Set(); } } }
internal void WriteStreamObject(Cmdlet cmdlet, bool overrideInquire = false) { switch (this.ObjectType) { case PSStreamObjectType.Output: cmdlet.WriteObject(this.Value); return; case PSStreamObjectType.Error: { ErrorRecord errorRecord = (ErrorRecord)this.Value; errorRecord.PreserveInvocationInfoOnce = true; MshCommandRuntime commandRuntime = cmdlet.CommandRuntime as MshCommandRuntime; if (commandRuntime == null) { break; } commandRuntime.WriteError(errorRecord, overrideInquire); return; } case PSStreamObjectType.MethodExecutor: ((ClientMethodExecutor)this.Value).Execute(cmdlet); return; case PSStreamObjectType.Warning: { string message = (string)this.Value; WarningRecord record = new WarningRecord(message); MshCommandRuntime runtime3 = cmdlet.CommandRuntime as MshCommandRuntime; if (runtime3 == null) { break; } runtime3.WriteWarning(record, overrideInquire); return; } case PSStreamObjectType.BlockingError: { CmdletMethodInvoker <object> cmdletMethodInvoker = (CmdletMethodInvoker <object>) this.Value; InvokeCmdletMethodAndWaitForResults <object>(cmdletMethodInvoker, cmdlet); return; } case PSStreamObjectType.ShouldMethod: { CmdletMethodInvoker <bool> invoker2 = (CmdletMethodInvoker <bool>) this.Value; InvokeCmdletMethodAndWaitForResults <bool>(invoker2, cmdlet); return; } case PSStreamObjectType.WarningRecord: { WarningRecord record5 = (WarningRecord)this.Value; MshCommandRuntime runtime6 = cmdlet.CommandRuntime as MshCommandRuntime; if (runtime6 == null) { break; } runtime6.AppendWarningVarList(record5); return; } case PSStreamObjectType.Debug: { string str = (string)this.Value; DebugRecord record2 = new DebugRecord(str); MshCommandRuntime runtime2 = cmdlet.CommandRuntime as MshCommandRuntime; if (runtime2 == null) { break; } runtime2.WriteDebug(record2, overrideInquire); return; } case PSStreamObjectType.Progress: { MshCommandRuntime runtime5 = cmdlet.CommandRuntime as MshCommandRuntime; if (runtime5 == null) { break; } runtime5.WriteProgress((ProgressRecord)this.Value, overrideInquire); return; } case PSStreamObjectType.Verbose: { string str3 = (string)this.Value; VerboseRecord record4 = new VerboseRecord(str3); MshCommandRuntime runtime4 = cmdlet.CommandRuntime as MshCommandRuntime; if (runtime4 == null) { break; } runtime4.WriteVerbose(record4, overrideInquire); return; } case PSStreamObjectType.Exception: { Exception exception = (Exception)this.Value; throw exception; } default: return; } }