L'Appel De PowerShell À Partir De C#
Je suis en utilisant System.Management.Automation
DLL qui me permet d'appeler PowerShell au sein de mon application en C# comme suit:
PowerShell.Create().AddScript("Get-Process").Invoke();
Ce que j'essaie de faire est d'appeler PowerShell, mais l'offre, la liste d'entrée. Par exemple, dans:
1, 2, 3 | ForEach-Object { $_ * 2 }
Je suis en train d'essayer de fournir le côté gauche 1, 2, 3
lors de l'invocation:
//powershell is a PowerShell Object
powershell.Invoke(new [] { 1, 2, 3 });
Toutefois, cela ne fonctionne pas. Le solution je suis venu avec était à l'aide de ForEach-Object
et puis passer le tableau en tant qu' InputObject
avec le { $_ }
comme le 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();
Bien que le ci-dessus est le code de travail est-il un moyen de l'utilisation de Invoke
passant dans le tableau d'entrée parce que j'aurais tout de même que ce serait souhaitable pour l'appeler?
Vous devez vous connecter pour publier un commentaire.
Un peu de retard mais:
retourne:
1,2,3
comme une chaîne de caractères plutôt qu'un tableau c'est à direnew int[] { 1,2,3 }
. La seconde est nécessaire si je suis pour transmettre des données structurées pour le pipeline.SessionStateProxy.SetVariable(string name, object value)
. Regarde mon édité réponse.ForEach-Object
à l'aide de laInputObject
paramètre, comme décrit dans ma question). Merci.J'ai fait mes recherches et
PowerShell.Invoke( IEnumerable )
va définir leInputObject
de la première commande dans la liste. Donc au lieu de mettreInputObject
surinputCmd
ci-dessus, on peut, au lieu de passer par leInvoke
méthode. Nous avons encore besoin de la premièreForEach-Object
appel à passer l'entrée de tableau d'.