我想在故障转移群集上检查一个MS服务(显示名称为“MyService”),为此,我想在C#中评估powershell命令。 我想到的命令是
$a = Get-ClusterResource "MyService"
$b = Get-ClusterGroup $a.OwnerGroup.Name | Get-ClusterResource | Where-Object {$_.ResourceType -eq "Network Name"}
我已经想出如何将FailoverClusters模块加载到电源shell实例中。我正在创建shell 以下代码:
InitialSessionState state = InitialSessionState.CreateDefault();
state.ImportPSModule(new[] { "FailoverClusters" });
PowerShell ps = PowerShell.Create(state);
使用此ps
实例,我现在可以成功执行单个群集评估命令。
现在我的理解是,如果我使用ps.AddCommand
两次,首先使用Get-ClusterResource
,然后使用下一行的命令,我会将Get-ClusterResource
的结果输入到next命令,我不想这样做,因为-Name
的{{1}}参数不接受管道的结果。 (而第二行将使用Get-ClusterResource
)
我的问题是,如何将变量AddCommand
传递给c#powershell调用中的第二行?我是否必须创建两个幂shell实例并首先计算第一行,将其结果以某种方式传递给第二次调用,或者是否可以在程序化PowerShell实例中定义变量?
答案 0 :(得分:1)
我非常确定在将Get-ClusterResource
命令添加到管道后,您只需要使用AddParameter或AddArgument。 AddParameter on MSDN。
添加第一个管道后(在这种情况下只有一个命令),使用var result = ps.Invoke();
,从result.Members集合中提取所需的信息,并在添加{{{{}后添加到AddParment或AddArgument 1}}
然后继续使用Get-ClusterGroup
填写管道的其余部分。
Powershell Invoke方法在msdn
上有一个示例(为后代复制并粘贴):
addCommand