Heim > Backend-Entwicklung > C++ > Wie übergebe ich Befehlszeilenargumente mit Leerzeichen an ein PowerShell-Skript aus C#?

Wie übergebe ich Befehlszeilenargumente mit Leerzeichen an ein PowerShell-Skript aus C#?

Linda Hamilton
Freigeben: 2025-01-23 23:11:22
Original
340 Leute haben es durchsucht

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

Übergabe von Befehlszeilenargumenten mit Leerzeichen an PowerShell-Skripte aus C#

Diese Anleitung befasst sich mit der Herausforderung beim Ausführen von PowerShell-Skripts aus C#-Anwendungen, insbesondere mit dem Umgang mit Befehlszeilenargumenten, die Leerzeichen enthalten.

Das Problem: Die direkte Übergabe von Argumenten mit Leerzeichen führt oft zu Fehlern beim Aufruf von PowerShell-Skripten aus C#.

Die Lösung: Der Schlüssel liegt darin, Argumente innerhalb des Befehlsausführungsprozesses korrekt zu kapseln. Dieses Beispiel demonstriert eine robuste Methode unter Verwendung des System.Management.Automation-Namespace:

  1. Befehlserstellung: Initiieren Sie ein Command-Objekt, das auf den Pfad Ihres PowerShell-Skripts verweist.

    <code class="language-csharp">Command myCommand = new Command(scriptfile);</code>
    Nach dem Login kopieren
  2. Parameterdefinition: Definieren Sie jedes Befehlszeilenargument als CommandParameter-Objekt. Stellen Sie vor allem sicher, dass Argumente mit Leerzeichen ordnungsgemäß behandelt werden. Dies geschieht normalerweise, indem man sie in doppelte Anführungszeichen setzt.

    <code class="language-csharp">CommandParameter param1 = new CommandParameter("arg1", "value1");
    CommandParameter param2 = new CommandParameter("arg2", "\"value with spaces\""); // Note the double quotes</code>
    Nach dem Login kopieren
  3. Parameter-Hinzufügung: Fügen Sie die CommandParameter-Objekte zur Command-Sammlung des Parameters-Objekts hinzu.

    <code class="language-csharp">myCommand.Parameters.Add(param1);
    myCommand.Parameters.Add(param2);</code>
    Nach dem Login kopieren
  4. Pipeline-Ausführung: Integrieren Sie das Command in eine PowerShell-Pipeline und führen Sie es aus.

    <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>
    Nach dem Login kopieren

Vollständiges Beispiel:

Dieser vollständige Codeausschnitt zeigt, wie ein PowerShell-Skript mit Leerzeichenargumenten ausgeführt wird:

<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>
Nach dem Login kopieren

Denken Sie daran, "C:pathtoyourscript.ps1" durch den tatsächlichen Pfad zu Ihrem PowerShell-Skript zu ersetzen. Diese verbesserte Lösung gewährleistet eine zuverlässige Ausführung, selbst wenn es um Argumente geht, die Leerzeichen enthalten.

Das obige ist der detaillierte Inhalt vonWie übergebe ich Befehlszeilenargumente mit Leerzeichen an ein PowerShell-Skript aus C#?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage