Ich muss ein PowerShell-Skript in C # ausführen. Das Skript benötigt Befehlszeilenargumente.
Folgendes habe ich bisher getan:
RunspaceConfiguration runspaceConfiguration = RunspaceConfiguration.Create();
Runspace runspace = RunspaceFactory.CreateRunspace(runspaceConfiguration);
runspace.Open();
RunspaceInvoke scriptInvoker = new RunspaceInvoke(runspace);
Pipeline pipeline = runspace.CreatePipeline();
pipeline.Commands.Add(scriptFile);
// Execute PowerShell script
results = pipeline.Invoke();
scriptFile enthält so etwas wie "C: \ Programme \ MyProgram \ Whatever.ps1".
Das Skript verwendet ein Befehlszeilenargument wie "-key Value", während Value so etwas wie ein Pfad sein kann, der auch Leerzeichen enthalten kann.
Ich bekomme das nicht zum Laufen. Weiß jemand, wie man Befehlszeilenargumente aus C # heraus an ein PowerShell-Skript übergibt und sicherstellt, dass Leerzeichen kein Problem sind?
c#
command-line
powershell
scripting
arguments
Mephisztoe
quelle
quelle
Command myCommand = new Command(scriptfile);
undpipeline.Commands.Add(myCommand);
lösen Sie dann das Escape-Problem.Antworten:
Versuchen Sie, eine Skriptdatei als separaten Befehl zu erstellen:
dann können Sie mit Parameter hinzufügen
und schlussendlich
Hier ist der vollständige, bearbeitete Code:
quelle
Ich habe eine andere Lösung. Ich möchte nur testen, ob die Ausführung eines PowerShell-Skripts erfolgreich ist, da möglicherweise jemand die Richtlinie ändert. Als Argument gebe ich nur den Pfad des auszuführenden Skripts an.
Mit dem Inhalt des Skripts:
quelle
Ich hatte Probleme beim Übergeben von Parametern an die Commands.AddScript-Methode.
Ich habe dieses
null
Problem behoben, indem ich den Namen und den Parameter als Wert in eine Sammlung von übergeben habeCommandParameters
Hier ist meine Funktion:
quelle
using (Runspace runspace = RunspaceFactory.CreateRunspace(runspaceConfiguration))...using (Pipeline pipeline = runspace.CreatePipeline())
Sie können die Pipeline auch einfach mit der AddScript-Methode verwenden:
Es wird eine Zeichenfolge und alle Parameter benötigt, die Sie übergeben.
quelle
Meins ist etwas kleiner und einfacher:
quelle
Hier ist eine Möglichkeit, dem Skript Parameter hinzuzufügen, wenn Sie diese verwendet haben
Bei Verwendung einer HashMap als Parameter ist der Schlüssel der Name der Variablen im Skript und der Wert der Wert der Variablen.
Und die Füllvariablenmethode ist:
Auf diese Weise können Sie einem Skript problemlos mehrere Parameter hinzufügen. Ich habe auch festgestellt, dass, wenn Sie einen Wert aus einer Variablen in Ihrem Skript erhalten möchten, wie folgt:
// Ergebnisse sind der Name des v
Sie müssen es so machen, wie ich es gezeigt habe, denn aus irgendeinem Grund, wenn Sie es so machen, wie Kosi2801 vorschlägt, wird die Liste der Skriptvariablen nicht mit Ihren eigenen Variablen gefüllt.
quelle
Für mich war die flexibelste Möglichkeit, PowerShell-Skripte über C # auszuführen, die Verwendung
PowerShell.Create().AddScript()
Das Snippet des Codes ist
Sie können überprüfen, ob ein Fehler vorliegt, indem Sie Streams.Error überprüfen. Es war sehr praktisch, die Sammlung zu überprüfen. Benutzer ist der Objekttyp, den das PowerShell-Skript zurückgibt.
quelle