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

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

DDD
DDDOriginal
2025-01-23 23:06:12325Durchsuche

How to Pass Command-Line Arguments with Spaces to PowerShell Scripts from 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:

  1. Instanziieren Sie einen PowerShell-Runspace: Erstellen Sie einen Runspace, um die PowerShell-Ausführungsumgebung zu verwalten.
  2. Erstellen Sie den Befehl: Erstellen Sie ein Command-Objekt, das den Pfad zu Ihrem PowerShell-Skript angibt.
  3. Parameter hinzufügen: Verwenden Sie CommandParameter-Objekte, um Argumente hinzuzufügen. Dadurch werden Leerzeichen und Sonderzeichen korrekt verarbeitet. Jedes CommandParameter nimmt den Argumentnamen und seinen Wert an.
  4. Zur Pipeline hinzufügen:Fügen Sie das Command-Objekt zu einem Pipeline hinzu.
  5. Rufen Sie die Pipeline auf:Führen Sie die Pipeline aus und initiieren Sie die Ausführung des PowerShell-Skripts.

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!

Stellungnahme:
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