C# 从C调用特定版本的PowerShell#
我正在尝试在Hyper-V主机上使用从C#调用的C# 从C调用特定版本的PowerShell#,c#,powershell,hyper-v,powershell-module,C#,Powershell,Hyper V,Powershell Module,我正在尝试在Hyper-V主机上使用从C#调用的Get-VMCmdlet 显然,必须首先导入相应的PowerShell模块Hyper-V。然而,导入失败-显然是因为该模块仅在PowerShell 3.0上受支持(至少我是这么认为的)。但是System.Management.Automation使用的PowerShell似乎是2.0版 InitialSessionState iss = InitialSessionState.CreateDefault(); iss.ImportPSModule(
Get-VM
Cmdlet
显然,必须首先导入相应的PowerShell模块Hyper-V。然而,导入失败-显然是因为该模块仅在PowerShell 3.0上受支持(至少我是这么认为的)。但是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?您已经看过了吗
即使您的系统上已经安装了PSv3,您也可能需要新的SDK来调用Powershell 3,但我通常只是一个纯Powershell的家伙。您看过这个了吗
即使您的系统上已经安装了PSv3,您也可能需要新的SDK来调用Powershell 3,但我通常只是一个纯Powershell的家伙。一位同事发现了这一点: 显然,.NET4+附带了一个全新的公共语言运行库:CLR4
此运行时使用从位于
C:\Windows\Microsoft.NET\assembly
的新程序集缓存加载的自己的程序集
将自动使用PowerShell 3.0的System.Management.Automation版本3.0.0
,仅适用于CLR4。因为我将应用程序配置为在.NET3.5下运行,所以它将使用旧的CLR2,甚至看不到新的程序集
要确保应用程序仍在.NET 3.5上运行,请将其添加到项目文件夹中的App.config
文件中:
<supportedRuntime version="v4.0"/>
<supportedRuntime version="v2.0.50727"/>
如果CLR4可用,它将加载相应的GAC,找到一个策略文件,将所有对
System.Management.Automation 1.0.0版
的引用重定向到3.0.0.0版
,PowerShell模块将按预期工作。如果您只有.NET 3.5,将加载旧版本;PowerShell仍然可以使用,但仅在2.0版之前可用。一位同事发现了这一点: 显然,.NET4+附带了一个全新的公共语言运行库:CLR4
此运行时使用从位于
C:\Windows\Microsoft.NET\assembly
的新程序集缓存加载的自己的程序集
将自动使用PowerShell 3.0的System.Management.Automation版本3.0.0
,仅适用于CLR4。因为我将应用程序配置为在.NET3.5下运行,所以它将使用旧的CLR2,甚至看不到新的程序集
要确保应用程序仍在.NET 3.5上运行,请将其添加到项目文件夹中的App.config
文件中:
<supportedRuntime version="v4.0"/>
<supportedRuntime version="v2.0.50727"/>
如果CLR4可用,它将加载相应的GAC,找到一个策略文件,将所有对
System.Management.Automation 1.0.0版
的引用重定向到3.0.0.0版
,PowerShell模块将按预期工作。如果您只有.NET 3.5,将加载旧版本;PowerShell仍然可以工作,但只有在2.0版之前才能工作。这可能会工作,但我需要我的应用程序也在.NET 3.5上运行-我无法直接引用3.0.0.0程序集,因为它是.NET 4+still+1,以获得正确方向的提示,谢谢这可能会工作,但是我也需要我的应用程序在.NET3.5上运行-我不能直接引用3.0.0.0程序集,因为它是.NET4+Still+1,以获得正确方向的提示,谢谢