【问题标题】:Call a specific version of PowerShell from C#从 C# 调用特定版本的 PowerShell
【发布时间】:2013-04-22 13:26:03
【问题描述】:

我正在尝试在 Hyper-V 主机上使用从 C# 调用的 Get-VM Cmdlet。

显然,必须先导入相应的 PowerShell 模块 Hyper-V。但是,导入失败 - 显然是因为该模块仅在 PowerShell 3.0 上受支持(至少这是我从 this article 得出的结论)。不过,System.Management.Automation 使用的 PowerShell 似乎是 2.0 版。

InitialSessionState iss = InitialSessionState.CreateDefault();
iss.ImportPSModule(new string[] { "Hyper-V" });
Runspace runSpace = RunspaceFactory.CreateRunspace(iss);
runSpace.Open();
foreach (var err in (ArrayList)runSpace
        .SessionStateProxy.PSVariable.GetValue("Error"))
    Console.WriteLine(err.ToString());
runSpace.Close();

返回

'C:\Windows\system32\WindowsPowerShell\v1.0\Modules\Hyper-V\Hyper-V.psd1' 无法导入模块,因为其清单包含一个或多个成员 无效。有效的清单成员是 ('ModuleToProcess', ...)。 删除无效的成员('HelpInfoUri'), 然后尝试再次导入模块。

有没有办法在 C# 中使用特定版本的 PowerShell?

【问题讨论】:

    标签: c# powershell hyper-v powershell-module


    【解决方案1】:

    一位同事想通了:

    显然,.NET 4+ 带有一个全新的公共语言运行时:CLR4
    此运行时使用从位于 C:\Windows\Microsoft.NET\assembly 的新程序集缓存加载的自己的程序集。

    System.Management.Automation version 3.0.0.0 将自动使用 PowerShell 3.0,仅适用于 CLR4。因为我将我的应用程序配置为在 .NET 3.5 下运行,所以它将使用旧的 CLR2,甚至看不到新的程序集。

    为确保应用程序仍可在 .NET 3.5 上运行,请将其添加到项目文件夹中的 App.config 文件中:

    <supportedRuntime version="v4.0"/> 
    <supportedRuntime version="v2.0.50727"/>
    


    如果 CLR4 可用,它将加载相应的 GAC,找到将所有对 System.Management.Automation version 1.0.0.0 的引用重定向到 version 3.0.0.0 的策略文件,并且 PowerShell 模块按预期工作。
    如果您只有 .NET 3.5,则将加载旧版本; PowerShell 仍然有效,但只能到 2.0 版。

    【讨论】:

      【解决方案2】:

      你看过这个了吗?

      http://code.msdn.microsoft.com/windowsdesktop/Windows-PowerShell-30-SDK-9a34641d

      即使你的系统上已经安装了 PSv3,你也可能只需要新的 SDK 来调用 Powershell 3,但我通常只是一个直接的 Powershell 人。

      【讨论】:

      • 这可能会奏效,但我的应用程序也需要在 .NET 3.5 上运行 - 我无法直接引用 3.0.0.0 程序集,因为它是 .NET 4+ 仍然是 +1对于正确方向的提示,谢谢
      猜你喜欢
      • 2013-02-25
      • 1970-01-01
      • 1970-01-01
      • 2012-05-10
      • 2015-07-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-29
      相关资源
      最近更新 更多