Maison >développement back-end >C++ >Comment transmettre des arguments de ligne de commande avec des espaces aux scripts PowerShell à partir de C# ?

Comment transmettre des arguments de ligne de commande avec des espaces aux scripts PowerShell à partir de C# ?

DDD
DDDoriginal
2025-01-23 23:06:12325parcourir

How to Pass Command-Line Arguments with Spaces to PowerShell Scripts from 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 :

  1. Instancier un espace d'exécution PowerShell : Créez un Runspace pour gérer l'environnement d'exécution PowerShell.
  2. Construisez la commande : Créez un Command objet spécifiant le chemin d'accès à votre script PowerShell.
  3. Ajouter des paramètres : Utilisez des objets 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.
  4. Ajouter au pipeline : Ajoutez l'objet Command à un Pipeline.
  5. Invoquer le pipeline : Exécutez le pipeline et lancez l'exécution du script PowerShell.

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn