我想从C#传递一个关联数组到Powershell。例如,我想执行此Powershell代码行:
PS C:\> get-command | select name, @{N="Foo";E={"Bar"}} -first 3
Name Foo
---- ---
Add-Content Bar
Add-History Bar
Add-Member Bar
我希望通过一个不同的命令管道来实现这个,而不是一个标记为脚本的单个命令。以下是代码:
Runspace runspace = RunspaceFactory.CreateRunspace();
runspace.Open();
Pipeline pipeline = runspace.CreatePipeline();
pipeline.Commands.Add("get-command");
Command c = new Command("select-object");
List properties = new List();
properties.Add("name");
properties.Add("@{N=\"Foo\";E={\"Bar\"}}");
c.Parameters.Add("Property", properties.ToArray());
c.Parameters.Add("First", 3);
pipeline.Commands.Add(c);
pipeline.Commands.Add("Out-String");
Collection retval = pipeline.Invoke();
runspace.Close();
StringBuilder stringBuilder = new StringBuilder();
foreach (PSObject obj in retval)
Console.WriteLine(obj.ToString());
但是传入Select-Object作为参数的关联数组没有被正确解析。下面是输出结果:
PS C:\test> c:\test\Bin\Debug\test.exe
Name @{N="Foo";E={"Bar"}}
---- --------------------
Add-Content
Add-History
Add-Member
我设置Select-Object命令参数的方式有什么问题吗?
ScriptBlock.Create("{ $_ }")
,但实际上我需要使用ScriptBlock.Create("$_")
。 - Tahir Hassan