在安装了 PowerShell 2.0 和 PowerShell 3.0 的计算机上,如何在创建 RunSpace 时选择从我的 C# 应用程序启动的程序?
似乎有各种各样的配置参数,但没有一个可以控制启动哪个版本的 PowerShell。我可以想象它可能基于用于调用进程的 .NET 版本,但是当您调用 RunspaceFactory.CreateOutOfProcessRunspace 时呢?在这种情况下,它应该没关系,对吧?
在安装了 PowerShell 2.0 和 PowerShell 3.0 的计算机上,如何在创建 RunSpace 时选择从我的 C# 应用程序启动的程序?
似乎有各种各样的配置参数,但没有一个可以控制启动哪个版本的 PowerShell。我可以想象它可能基于用于调用进程的 .NET 版本,但是当您调用 RunspaceFactory.CreateOutOfProcessRunspace 时呢?在这种情况下,它应该没关系,对吧?
您需要使用带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"
}
}
PowerShell v3 附带了一个新的 3.0 版本的 System.Management.Automation.dll。您可以尝试在启动代码的早期使用 Assembly.Load() 抢先加载 3.0 SMA dll,以加载 PowerShell v3。