0

我有一个运行多个 Powershell 脚本的应用程序。(它基本上是一个包装应用程序,它提取一些存储在 SQL 数据库中的 PS 脚本,然后运行它们。)

我添加的其中一个 Powershell 脚本现在失败了,我有一种感觉是因为它需要在 STA 公寓状态下运行。但是,我不知道如何在 c# 中设置公寓状态。

我正在使用的功能如下:

public bool RunSomePowershell(string script)
{
 using (PowerShell PowerShellInstance = PowerShell.Create())
 {
  PowerShellInstance.AddScript(script);
  var result = PowerShellInstance.Invoke();
  return Convert.ToBoolean(result[result.Count -1].ToString()); // Result should be last output from script (true or false)
 }  
}

如何设置它以在 STA 模式下运行脚本?

4

1 回答 1

3

首先,创建一个运行空间并设置ApartmentState属性:

using System.Threading;
using System.Management.Automation.Runspaces;
// ...

Runspace rs = RunspaceFactory.CreateRunspace();
rs.ApartmentState = ApartmentState.STA;

然后设置实例的Runspace属性PowerShell以使用上述运行空间:

PowerShellInstance.Runspace = rs;
于 2017-03-23T13:14:07.367 回答