J'ai besoin d'exécuter un script PowerShell à partir de C #. Le script a besoin d'arguments de ligne de commande.
Voici ce que j'ai fait jusqu'à présent:
RunspaceConfiguration runspaceConfiguration = RunspaceConfiguration.Create();
Runspace runspace = RunspaceFactory.CreateRunspace(runspaceConfiguration);
runspace.Open();
RunspaceInvoke scriptInvoker = new RunspaceInvoke(runspace);
Pipeline pipeline = runspace.CreatePipeline();
pipeline.Commands.Add(scriptFile);
// Execute PowerShell script
results = pipeline.Invoke();
scriptFile contient quelque chose comme "C: \ Program Files \ MyProgram \ Whatever.ps1".
Le script utilise un argument de ligne de commande tel que "-key Value" alors que Value peut être quelque chose comme un chemin qui peut également contenir des espaces.
Je ne fais pas fonctionner ça. Quelqu'un sait-il comment transmettre des arguments de ligne de commande à un script PowerShell à partir de C # et s'assurer que les espaces ne posent aucun problème?
c#
command-line
powershell
scripting
arguments
Mephisztoe
la source
la source
Command myCommand = new Command(scriptfile);
puispipeline.Commands.Add(myCommand);
résolvez le problème d'échappement.Réponses:
Essayez de créer un fichier script en tant que commande distincte:
alors vous pouvez ajouter des paramètres avec
et enfin
Voici le code complet et édité:
la source
J'ai une autre solution. Je veux juste tester si l'exécution d'un script PowerShell réussit, car peut-être que quelqu'un pourrait changer la politique. Comme argument, je spécifie simplement le chemin du script à exécuter.
Le contenu du script étant:
la source
J'ai eu du mal à passer des paramètres à la méthode Commands.AddScript.
J'ai résolu ce problème en passant
null
le nom et le paramètre comme valeur dans une collection deCommandParameters
Voici ma fonction:
la source
using (Runspace runspace = RunspaceFactory.CreateRunspace(runspaceConfiguration))...using (Pipeline pipeline = runspace.CreatePipeline())
Vous pouvez également simplement utiliser le pipeline avec la méthode AddScript:
Cela prendra une chaîne et quels que soient les paramètres que vous lui transmettez.
la source
Le mien est un peu plus petit et plus simple:
la source
Voici un moyen d'ajouter des paramètres au script si vous avez utilisé
C'est avec l'utilisation d'un HashMap comme paramètres que la clé est le nom de la variable dans le script et la valeur est la valeur de la variable.
Et la méthode de la variable de remplissage est:
de cette façon, vous pouvez facilement ajouter plusieurs paramètres à un script. J'ai également remarqué que si vous souhaitez obtenir une valeur d'une variable dans votre script comme ceci:
// résultats étant le nom du v
vous devrez le faire comme je l'ai montré car pour une raison quelconque, si vous le faites comme Kosi2801 suggère que la liste des variables de script ne soit pas remplie avec vos propres variables.
la source
Pour moi, le moyen le plus flexible d'exécuter un script PowerShell à partir de C # était d'utiliser
PowerShell.Create().AddScript()
L'extrait de code est
Vous pouvez vérifier s'il y a une erreur en vérifiant Streams.Error. C'était vraiment pratique de vérifier la collection. L'utilisateur est le type d'objet renvoyé par le script PowerShell.
la source