1

假设我已经通过

            var rs = RunspaceFactory.CreateRunspace();
            rs.Open();

让我们进一步假设我想通过使用 New-Variable cmdlet 将一个变量添加到该运行空间中,该变量键入为一个数组,如下所示:

            // create a pipeline to add the variable into the runspace
            var pipeline = PowerShell.Create();
            // create a command object, add commands and parameters to it...
            var cmd = new PSCommand();
            cmd.AddCommand("New-Variable");
            cmd.AddParameter("Name", "foo");
            cmd.AddParameter("Value", "@()");
            // associate the command with the pipeline and runspace, and then invoke
            pipeline.Commands = cmd;
            pipeline.Runspace = rs;
            pipeline.Invoke();

代码有效,我没有收到任何错误,但变量 'foo' 没有创建为数组类型。我在“@()”上尝试了许多不同的变体,但到目前为止都没有成功。最终,我认为问题归结为如何将 Value 参数正确格式化为 New-Variable,以便将 'foo' 解释为空的 PowerShell 数组类型。

谢谢,

马特

4

3 回答 3

4

仅供参考,您可以直接在 C# 中执行此操作,如下所示:

pipeline.Runspace.SessionStateProxy.PSVariable.Set("foo", new object[0]);
于 2012-09-12T01:50:59.640 回答
0

PSCommand.AddParameter参数名称为字符串,参数值为对象请参阅此处的文档。

您应该放置一个“真正的”空数组,而不是代表等效 powershell 脚本的字符串。

cmd.AddParameter("Value", new object[0]);
于 2012-09-11T23:16:06.047 回答
0

拯救我的回应是:

如果您是从文本中完成所有操作,则可以查看AddScript方法。例如,var cmd = new PSCommand().AddScript("$myVar = @()");将生成一个名为 的新变量$myVar

C# 代码中的示例:

foreach (Collaborator collab in collabs)
                {
                    counter ++;
                    arrayUsers.Append("@(\"" + collab.mail + "\", \"" + collab.url + "\")");
                    if (counter < numbercollabs)
                        arrayUsers.Append(",");
                }
                string arrayUsersPowerShell =  arrayUsers.ToString();
and then :

using (PowerShell powerShellInstance = PowerShell.Create())
                {
 powerShellInstance.AddScript("$d = get-date; " +
                        "$arrayUsers = @(" + arrayUsersPowerShell + "); " +
                        "$d | Out-String; $arrayUsers[0][1]");
...
Collection<PSObject> PSOutput = powerShellInstance.Invoke();
...
}

所以我们可以正确构造数组

于 2017-01-10T19:04:44.020 回答