Maison >développement back-end >C++ >Comment transmettre des arguments de ligne de commande avec des espaces aux scripts PowerShell à partir de C# ?
L'intégration de scripts PowerShell dans les applications C# offre de puissantes capacités d'automatisation. Cependant, la gestion des arguments de ligne de commande contenant des espaces peut s'avérer délicate. Cet article présente une méthode robuste pour exécuter des scripts PowerShell à partir de C#, en transmettant de manière fiable des arguments avec des espaces intégrés.
L'approche courante consistant à passer directement des arguments échoue souvent lorsque des espaces sont présents. La solution réside dans l'utilisation des objets PowerShell Command
et CommandParameter
pour gérer correctement la construction des arguments.
Voici une approche raffinée pour exécuter un script PowerShell à partir de C# avec des arguments, même ceux contenant des espaces :
Runspace
pour gérer l'environnement d'exécution PowerShell.Command
objet spécifiant le chemin d'accès à votre script PowerShell.CommandParameter
pour ajouter des arguments. Cela gère correctement les espaces et les caractères spéciaux. Chaque CommandParameter
prend le nom de l'argument et sa valeur.Command
à un Pipeline
.Voici un exemple de code amélioré reflétant ces étapes :
<code class="language-csharp">RunspaceConfiguration runspaceConfiguration = RunspaceConfiguration.Create(); Runspace runspace = RunspaceFactory.CreateRunspace(runspaceConfiguration); runspace.Open(); Pipeline pipeline = runspace.CreatePipeline(); // Path to your PowerShell script string scriptFile = "path/to/your/script.ps1"; // Create the Command object Command myCommand = new Command(scriptFile); // Add parameters with spaces handled correctly myCommand.Parameters.Add(new CommandParameter("key1", "value with spaces")); myCommand.Parameters.Add(new CommandParameter("key2", "another value")); // Add the command to the pipeline pipeline.Commands.Add(myCommand); // Invoke the pipeline and handle the results Collection<PSObject> results = pipeline.Invoke(); // Process the results as needed foreach (PSObject result in results) { // ... handle each result ... } runspace.Close();</code>
Cette approche garantit que les arguments de ligne de commande, qu'ils contiennent ou non des espaces, sont correctement transmis à votre script PowerShell, permettant une intégration transparente entre C# et PowerShell. N'oubliez pas de remplacer "path/to/your/script.ps1"
par le chemin réel de votre script.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!