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

Comment transmettre des arguments de ligne de commande avec des espaces à un script PowerShell à partir de C# ?

Linda Hamilton
Linda Hamiltonoriginal
2025-01-23 23:11:22392parcourir

How to Pass Command-Line Arguments with Spaces to a PowerShell Script from C#?

Passer des arguments de ligne de commande espacés aux scripts PowerShell à partir de C#

Ce guide aborde le défi de l'exécution de scripts PowerShell à partir d'applications C#, en particulier la gestion des arguments de ligne de commande contenant des espaces.

Le problème : Passer directement des arguments avec des espaces entraîne souvent des erreurs lors de l'appel de scripts PowerShell à partir de C#.

La solution : La clé est d'encapsuler correctement les arguments dans le processus d'exécution de la commande. Cet exemple montre une méthode robuste utilisant l'espace de noms System.Management.Automation :

  1. Création de commande : Initiez un objet Command en pointant vers le chemin de votre script PowerShell.

    <code class="language-csharp">Command myCommand = new Command(scriptfile);</code>
  2. Définition des paramètres : Définissez chaque argument de ligne de commande en tant qu'objet CommandParameter. Surtout, assurez-vous que les arguments contenant des espaces sont correctement traités. Cela se fait généralement en les mettant entre guillemets.

    <code class="language-csharp">CommandParameter param1 = new CommandParameter("arg1", "value1");
    CommandParameter param2 = new CommandParameter("arg2", "\"value with spaces\""); // Note the double quotes</code>
  3. Ajout de paramètres : Ajoutez les objets CommandParameter à la collection Command de l'objet Parameters.

    <code class="language-csharp">myCommand.Parameters.Add(param1);
    myCommand.Parameters.Add(param2);</code>
  4. Exécution du pipeline : Intégrez le Command dans un pipeline PowerShell et exécutez-le.

    <code class="language-csharp">RunspaceConfiguration runspaceConfiguration = RunspaceConfiguration.Create();
    Runspace runspace = RunspaceFactory.CreateRunspace(runspaceConfiguration);
    runspace.Open();
    Pipeline pipeline = runspace.CreatePipeline();
    pipeline.Commands.Add(myCommand);
    Collection<PSObject> results = pipeline.Invoke();
    runspace.Close();</code>

Exemple complet :

Cet extrait de code complet montre comment exécuter un script PowerShell avec des arguments espacés :

<code class="language-csharp">string scriptfile = @"C:\path\to\your\script.ps1"; // Replace with your script path
string arg1 = "value1";
string arg2 = "value with spaces";

RunspaceConfiguration runspaceConfiguration = RunspaceConfiguration.Create();
Runspace runspace = RunspaceFactory.CreateRunspace(runspaceConfiguration);
runspace.Open();
Pipeline pipeline = runspace.CreatePipeline();

Command myCommand = new Command(scriptfile);
myCommand.Parameters.Add(new CommandParameter("arg1", arg1));
myCommand.Parameters.Add(new CommandParameter("arg2", "\"" + arg2 + "\"")); //Escape spaces

Collection<PSObject> results = pipeline.Invoke();

runspace.Close();

// Process the results
foreach (PSObject result in results)
{
    Console.WriteLine(result.BaseObject);
}</code>

N'oubliez pas de remplacer "C:pathtoyourscript.ps1" par le chemin réel de votre script PowerShell. Cette solution améliorée garantit une exécution fiable même lorsqu'il s'agit d'arguments contenant des espaces.

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