【发布时间】:2012-10-26 09:48:15
【问题描述】:
我正在使用System.Management.Automation DLL,它允许我在我的 C# 应用程序中调用 PowerShell,如下所示:
PowerShell.Create().AddScript("Get-Process").Invoke();
我想要做的是调用 PowerShell 但提供输入列表。例如,在:
1, 2, 3 | ForEach-Object { $_ * 2 }
我试图在调用时提供左侧1, 2, 3:
// powershell is a PowerShell Object
powershell.Invoke(new [] { 1, 2, 3 });
但是这不起作用。我想出的解决方法是使用ForEach-Object,然后将数组作为InputObject 传递,{ $_ } 作为Process:
// create powershell object
var powershell = PowerShell.Create();
// input array 1, 2, 3
Command inputCmd = new Command("ForEach-Object");
inputCmd.Parameters.Add("InputObject", new [] { 1, 2, 3 });
inputCmd.Parameters.Add("Process", ScriptBlock.Create("$_"));
powershell.Commands.AddCommand(inputCmd);
// ForEach-Object { $_ * 2 }
Command outputCmd = new Command("ForEach-Object");
outputCmd.Parameters.Add("Process", ScriptBlock.Create("$_ * 2"));
powershell.Commands.AddCommand(outputCmd);
// invoke
var result = powershell.Invoke();
虽然上面的代码是有效的,但有什么方法可以使用Invoke 传入输入数组,因为我会认为这是一种理想的调用方式?
【问题讨论】:
标签: c# powershell automation