2

在安装了 PowerShell 2.0 和 PowerShell 3.0 的计算机上,如何在创建 RunSpace 时选择从我的 C# 应用程序启动的程序?

似乎有各种各样的配置参数,但没有一个可以控制启动哪个版本的 PowerShell。我可以想象它可能基于用于调用进程的 .NET 版本,但是当您调用 RunspaceFactory.CreateOutOfProcessRunspace 时呢?在这种情况下,它应该没关系,对吧?

4

2 回答 2

4

您需要使用带PowerShellProcessInstance 的CreateOutOfProcessRunspace 的重载,并且您需要在创建PowerShellProcessInstance 时指定版本。

PowerShellProcessInstance instance = new PowerShellProcessInstance(new Version(2, 0), null, null, false);
using (Runspace rs = RunspaceFactory.CreateOutOfProcessRunspace(new TypeTable(new string[0]), instance))
{
    rs.Open();
    using (PowerShell ps = PowerShell.Create())
    {
        ps.Runspace = rs;
        ps.AddScript("$PSVersionTable");

        dynamic vt = ps.Invoke().Single();

        Console.WriteLine(vt.PSVersion); // This will output "2.0"
    }
}
于 2014-10-28T20:05:52.283 回答
1

PowerShell v3 附带了一个新的 3.0 版本的 System.Management.Automation.dll。您可以尝试在启动代码的早期使用 Assembly.Load() 抢先加载 3.0 SMA dll,以加载 PowerShell v3。

于 2014-03-13T17:50:37.953 回答