Muszę wykonać skrypt PowerShell z poziomu C #. Skrypt potrzebuje argumentów wiersza poleceń.
Oto, co zrobiłem do tej pory:
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();
plik scriptFile zawiera coś takiego jak „C: \ Program Files \ MyProgram \ Cokolwiek.ps1”.
Skrypt używa argumentu wiersza poleceń, takiego jak „-key Wartość”, podczas gdy Wartość może być czymś w rodzaju ścieżki, która może również zawierać spacje.
Nie udaje mi się to. Czy ktoś wie, jak przekazać argumenty wiersza polecenia do skryptu PowerShell z poziomu C # i upewnić się, że spacje nie stanowią problemu?
c#
command-line
powershell
scripting
arguments
Mephisztoe
źródło
źródło
Command myCommand = new Command(scriptfile);
a następniepipeline.Commands.Add(myCommand);
rozwiąż problem ucieczki.Odpowiedzi:
Spróbuj utworzyć plik skryptu jako osobne polecenie:
następnie możesz dodać parametry za pomocą
i w końcu
Oto kompletny, zredagowany kod:
źródło
Mam inne rozwiązanie. Chcę tylko sprawdzić, czy wykonanie skryptu PowerShell powiedzie się, ponieważ być może ktoś może zmienić politykę. Jako argument podaję tylko ścieżkę skryptu do wykonania.
Zawartość skryptu to:
źródło
Miałem problem z przekazaniem parametrów do metody Commands.AddScript.
Rozwiązałem to, przekazując
null
jako nazwę i parametr jako wartość do kolekcjiCommandParameters
Oto moja funkcja:
źródło
using (Runspace runspace = RunspaceFactory.CreateRunspace(runspaceConfiguration))...using (Pipeline pipeline = runspace.CreatePipeline())
Możesz również po prostu użyć potoku z metodą AddScript:
Zajmie łańcuch i wszelkie parametry, które mu przekażesz.
źródło
Mój jest nieco mniejszy i prostszy:
źródło
Oto sposób dodawania parametrów do skryptu, jeśli był używany
Dzieje się tak w przypadku użycia HashMap jako parametrów, gdzie klucz jest nazwą zmiennej w skrypcie, a wartością jest wartość zmiennej.
A metoda zmiennej wypełnienia to:
w ten sposób możesz łatwo dodać wiele parametrów do skryptu. Zauważyłem również, że jeśli chcesz uzyskać wartość ze zmiennej w swoim skrypcie w następujący sposób:
// wyniki są nazwą v
będziesz musiał to zrobić tak, jak pokazałem, ponieważ z jakiegoś powodu, jeśli zrobisz to w sposób, w jaki Kosi2801 sugeruje, że lista zmiennych skryptu nie zostanie wypełniona twoimi własnymi zmiennymi.
źródło
Dla mnie najbardziej elastycznym sposobem uruchamiania skryptu PowerShell z C # było użycie
PowerShell.Create().AddScript()
Fragment kodu to
Możesz sprawdzić, czy wystąpił jakiś błąd, sprawdzając Streams.Error. Warto było sprawdzić kolekcję. Użytkownik to typ obiektu, który zwraca skrypt programu PowerShell.
źródło