从C#工作时,如何调用FailoverClusters PowerShell模块?

从C#工作时,如何调用FailoverClusters PowerShell模块?,c#,powershell,hyper-v,C#,Powershell,Hyper V,我试图从C#调用PowerShell脚本,这通常非常简单,只是由于某些原因,从C#调用时无法找到FailoverClusters模块中的命令(不在范围内)。以下是我的发现: 使用交互式PowerShell会话时,始终可以找到以下命令: PS C:\> Get-Cluster -Name DummyCluster Name ---- DummyCluster PS C:\> Get-Module -ListAvailable FailoverClusters Direc

我试图从C#调用PowerShell脚本,这通常非常简单,只是由于某些原因,从C#调用时无法找到FailoverClusters模块中的命令(不在范围内)。以下是我的发现:

使用交互式PowerShell会话时,始终可以找到以下命令:

PS C:\> Get-Cluster -Name DummyCluster

Name
----
DummyCluster
PS C:\> Get-Module -ListAvailable FailoverClusters


    Directory: C:\windows\system32\WindowsPowerShell\v1.0\Modules


ModuleType Version    Name                                ExportedCommands
---------- -------    ----                                ----------------
Manifest   2.0.0.0    FailoverClusters                    {Add-ClusterCheckpoint, Add-ClusterDisk, Add-ClusterFileSe...
从C#使用本地PowerShell会话时,从未找到这些命令:

我尝试了6-7种不同的导入模块的方法,但没有一种有效。以下是其中一个,摘自关于该主题的教程:

var ps = PowerShell.Create();
var ss = InitialSessionState.CreateDefault();
var modules = new string[1]{"FailoverClusters"};
ss.ImportPSModule(modules);
var rs = RunspaceFactory.CreateRunspace(ss);
rs.Open();
var iv = new RunspaceInvoke(rs);
var r = iv.Invoke("Get-Cluster -Name DummyCluster");
//Exception: command not found
有趣的是,这些命令是在使用远程PowerShell会话时发现的。对于某些用例,这是一个合理的解决方法

var ci = new WSManConnectionInfo(); //localhost remote connection
var rs = RunspaceFactory.CreateRunspace(ci);
rs.Open();
var iv = new RunspaceInvoke(rs);
var r = iv.Invoke("Get-Cluster -Name DummyCluster");
//Exception: access is denied

从C#看不到FailoverClusters模块:

但是,它可以从交互式PowerShell会话中看到:

PS C:\> Get-Cluster -Name DummyCluster

Name
----
DummyCluster
PS C:\> Get-Module -ListAvailable FailoverClusters


    Directory: C:\windows\system32\WindowsPowerShell\v1.0\Modules


ModuleType Version    Name                                ExportedCommands
---------- -------    ----                                ----------------
Manifest   2.0.0.0    FailoverClusters                    {Add-ClusterCheckpoint, Add-ClusterDisk, Add-ClusterFileSe...

FailoverClusters模块仅在64位PowerShell会话中可用。确保您正在构建的C#DLL是64位DLL。

谢谢!!这一点点信息是引爆点,在头撞墙近两天之后。。。