尽管对 [System.Environment]::Exit(1) 进行了 powershell 调用,但如何保留 Asp.Net 网络应用程序 运行

How can I keep an Asp.Net web app running despite a powershell call to [System.Environment]::Exit(1)

我目前正在用 C# 构建 Asp.Net 核心网络应用程序。 Web 应用程序需要调用一个我无法编辑或修改的预先存在的 powershell 脚本。我这样称呼脚本:

using (var pwsh = PowerShell.Create())
{
    string script = $"Set-ExecutionPolicy -ExecutionPolicy Bypass -Scope Process; cd \"{directory}\"; .\script.ps1";
    var results = pwsh.AddScript(script).Invoke();
}

这在大多数情况下都没有任何明显的问题。但是当脚本抛出错误时会出现问题。在脚本中有一个全局捕获,如下所示:

catch
{
    [System.Environment]::Exit(1)
}

当进入此 catch 块时,对 Environment.Exit 的调用会导致整个网站崩溃 - 这不是我想要的行为。我想知道是否有任何解决办法(同样不改变脚本)。

正如 Keith Nicholas 所说,我们可以尝试启动一个 运行 powershell 脚本的进程。

关于如何运行 powershell脚本,我建议你可以尝试参考下面的示例代码:

        if (System.IO.File.Exists("your powshell script path"))
        {
             string strCmdText = "your powshell script path";
            var process = new Process();
            process.StartInfo.UseShellExecute = false;
            process.StartInfo.RedirectStandardOutput = true;
            process.StartInfo.FileName = @"C:\windows\system32\windowspowershell\v1.0\powershell.exe";
            process.StartInfo.Arguments = "\"&'" + strCmdText + "'\"";

            process.Start();
            string s = process.StandardOutput.ReadToEnd();
            process.WaitForExit();

        }