从C#工作时,如何调用FailoverClusters PowerShell模块?
我试图从C#调用PowerShell脚本,这通常非常简单,只是由于某些原因,从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
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。谢谢!!这一点点信息是引爆点,在头撞墙近两天之后。。。