私は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
、入力配列の受け渡しを使用する方法はありますか?これは、これを呼び出すための望ましい方法であると思いますか?