Ü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:
Befehlserstellung: Initiieren Sie ein Command
-Objekt, das auf den Pfad Ihres PowerShell-Skripts verweist.
<code class="language-csharp">Command myCommand = new Command(scriptfile);</code>
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>
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>
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>
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>
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!