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
Libérer: 2025-01-23 23:11:22
original
413 Les gens l'ont consulté

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.

    Command myCommand = new Command(scriptfile);
    Copier après la connexion
  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.

    CommandParameter param1 = new CommandParameter("arg1", "value1");
    CommandParameter param2 = new CommandParameter("arg2", "\"value with spaces\""); // Note the double quotes
    Copier après la connexion
  3. Ajout de paramètres : Ajoutez les objets CommandParameter à la collection Command de l'objet Parameters.

    myCommand.Parameters.Add(param1);
    myCommand.Parameters.Add(param2);
    Copier après la connexion
  4. Exécution du pipeline : Intégrez le Command dans un pipeline PowerShell et exécutez-le.

    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();
    Copier après la connexion

Exemple complet :

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

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);
}
Copier après la connexion

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 de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal