Heim >Backend-Entwicklung >C++ >Wie übergebe ich Befehlszeilenargumente mit Leerzeichen an PowerShell-Skripte aus C#?
Die Integration von PowerShell-Skripten in C#-Anwendungen bietet leistungsstarke Automatisierungsfunktionen. Der Umgang mit Befehlszeilenargumenten, die Leerzeichen enthalten, kann jedoch schwierig sein. Dieser Artikel demonstriert eine robuste Methode zum Ausführen von PowerShell-Skripts aus C#, die zuverlässig Argumente mit eingebetteten Leerzeichen übergibt.
Der übliche Ansatz, Argumente direkt zu übergeben, schlägt oft fehl, wenn Leerzeichen vorhanden sind. Die Lösung liegt in der Verwendung der PowerShell-Objekte Command
und CommandParameter
, um die Argumentkonstruktion ordnungsgemäß zu verwalten.
Hier ist ein verfeinerter Ansatz zum Ausführen eines PowerShell-Skripts aus C# mit Argumenten, auch solchen, die Leerzeichen enthalten:
Runspace
, um die PowerShell-Ausführungsumgebung zu verwalten.Command
-Objekt, das den Pfad zu Ihrem PowerShell-Skript angibt.CommandParameter
-Objekte, um Argumente hinzuzufügen. Dadurch werden Leerzeichen und Sonderzeichen korrekt verarbeitet. Jedes CommandParameter
nimmt den Argumentnamen und seinen Wert an.Command
-Objekt zu einem Pipeline
hinzu.Hier ist ein verbessertes Codebeispiel, das diese Schritte widerspiegelt:
<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>
Dieser Ansatz stellt sicher, dass Befehlszeilenargumente, unabhängig davon, ob sie Leerzeichen enthalten, korrekt an Ihr PowerShell-Skript übergeben werden, was eine nahtlose Integration zwischen C# und PowerShell ermöglicht. Denken Sie daran, "path/to/your/script.ps1"
durch den tatsächlichen Pfad zu Ihrem Skript zu ersetzen.
Das obige ist der detaillierte Inhalt vonWie übergebe ich Befehlszeilenargumente mit Leerzeichen an PowerShell-Skripte aus C#?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!