C# 如何在commandlet遇到错误时终止脚本执行

C# 如何在commandlet遇到错误时终止脚本执行,c#,powershell,error-handling,cmdlet,C#,Powershell,Error Handling,Cmdlet,如果command let遇到错误,我需要终止整个脚本执行。之后的整个脚本决不能执行。在我的例子中,如果我使用throwterminationgeror,它只会停止要进一步执行的当前commandlet,脚本的其余部分执行我不希望执行的命令 我已经使用了“PipelineStoppedException”,但这不会告诉错误流中的任何内容,也不会捕获任何异常。因为调用成功终止 我怎样才能做到这一点?我想用异常消息终止整个脚本执行。下面是我在commandlet中使用的C代码,但它仍然允许其他脚本继

如果command let遇到错误,我需要终止整个脚本执行。之后的整个脚本决不能执行。在我的例子中,如果我使用throwterminationgeror,它只会停止要进一步执行的当前commandlet,脚本的其余部分执行我不希望执行的命令

我已经使用了“PipelineStoppedException”,但这不会告诉错误流中的任何内容,也不会捕获任何异常。因为调用成功终止

我怎样才能做到这一点?我想用异常消息终止整个脚本执行。下面是我在commandlet中使用的C代码,但它仍然允许其他脚本继续执行

编辑

protected override void BeginProcessing()
{
       base.BeginProcessing();

        if (SomeLogicTrue())
        {               
            var errorRecord = PowershellErrorHandler.GetErrorRecord(new PipelineStoppedException("access is not supported for this context."), "InvalidExecutionContext");
            ThrowTerminatingError(errorRecord);
        }
 }

在脚本开头将错误操作首选项设置为“停止”

$ErrorActionPreference = "Stop"
现在,即使脚本抛出none终止错误,它也会立即停止


我建议您也阅读。

不要认为您可以将整个脚本放在一个文件夹中?不,脚本将在特定环境下运行,并且它们可能永远不会包含任何tryCatch块。我有自己的基于C#的commandlets,我想抛出一个异常,该异常绝不允许进一步执行脚本的其余部分,您所要求的是不可能的。您的代码不会抛出任何“不可修补”的异常,除非导致segfault或类似的情况。我有C#Commandlet,用于从C#代码中抛出异常,在出现此异常时,powershell runtime Engine不应执行脚本的其余部分,所以我不想在脚本中捕捉异常。我正在从Powershell脚本运行C#commandlet,如果其中一个commandlet遇到任何问题,这将引发异常,从而使运行空间中的整个脚本执行停止。@Usman您难道不能从这些C#命令中返回一个预期值,并在PowerShell脚本中验证该特定值是否已正确返回吗?如果没有,请使用“退出”命令停止脚本。不,这是不可能的。我可以抛出一些异常,这些异常应该会停止进一步的powershell脚本执行。因为这些脚本可能会意外地包含一些无法运行的内容,我需要通知脚本编写器。