在powershell的c#调用中使用变量

时间:2014-07-23 14:40:04

标签: c# powershell pipeline

我想在故障转移群集上检查一个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实例中定义变量?

1 个答案:

答案 0 :(得分:1)

我非常确定在将Get-ClusterResource命令添加到管道后,您只需要使用AddParameter或AddArgument。 AddParameter on MSDN

添加第一个管道后(在这种情况下只有一个命令),使用var result = ps.Invoke();,从result.Members集合中提取所需的信息,并在添加{{{{}后添加到AddParment或AddArgument 1}}

然后继续使用Get-ClusterGroup填写管道的其余部分。

Powershell Invoke方法在msdn

上有一个示例

(为后代复制并粘贴):

addCommand