[英]How to Inject an Array Variable into a PowerShell Runspace via New-Variable
假设我已创建并打开了运行空间
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数组类型。
谢谢,
马特
仅供参考,你可以直接在C#中这样做:
pipeline.Runspace.SessionStateProxy.PSVariable.Set("foo", new object[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();
...
}
所以我们可以正确构造数组
PSCommand.AddParameter
获取参数名称的字符串,以及参数值的对象 。 请参阅此处的文档。
你应该放一个“真正的”空数组,而不是代表powershell脚本等价的字符串。
cmd.AddParameter("Value", new object[0]);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.