如何从 C# 中的 powershell 脚本中捕获退出代码

Posted

技术标签:

【中文标题】如何从 C# 中的 powershell 脚本中捕获退出代码【英文标题】:How to catch exit code from a powershell script in c# 【发布时间】:2020-08-12 18:25:27 【问题描述】:

我有一个由 c# 运行的 powershell 脚本。以下是我的代码:

string data = System.IO.File.ReadAllText(@"C:\Users\user1\Desktop\power.ps1");
using (PowerShell PowerShellInstance = PowerShell.Create())

    PowerShellInstance.AddScript(data);
    IAsyncResult result = PowerShellInstance.BeginInvoke();
    while (!result.IsCompleted)
    
        Logger.Info("Wait initiated");
        Thread.Sleep(5000);
    

完成脚本后如何读取退出代码?

【问题讨论】:

【参考方案1】:

从这里Executing PowerShell scripts from C#

// begin invoke execution on the pipeline
// use this overload to specify an output stream buffer
IAsyncResult result = PowerShellInstance.BeginInvoke<PSObject, PSObject>(null, outputCollection);

...

foreach (PSObject outputItem in outputCollection)

    //TODO: handle/process the output items if required
    Console.WriteLine(outputItem.BaseObject.ToString());

【讨论】:

什么是 outputCollection? PSDataCollection outputCollection = new PSDataCollection();

以上是关于如何从 C# 中的 powershell 脚本中捕获退出代码的主要内容,如果未能解决你的问题,请参考以下文章

从 C# 异步运行多个 PowerShell 脚本

如何使用 C# 将 powershell 脚本编码为 base64 UTF16-LE 字符串

从 C# 应用程序的脚本中调用 PowerShell 函数

如何使用 C# 执行 PowerShell 脚本

使用 Powershell 或 C# 从 TFS 项目中删除用户

如何从 Azure DevOps 中的部署后批准/部署后门调用 Powershell 脚本