Мне нужно выполнить сценарий PowerShell из C #. Сценарию нужны аргументы командной строки.
Вот что я сделал до сих пор:
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 содержит что-то вроде «C: \ Program Files \ MyProgram \ Whatever.ps1».
Сценарий использует аргумент командной строки, такой как «-key Value», тогда как Value может быть чем-то вроде пути, который также может содержать пробелы.
Я не могу заставить это работать. Кто-нибудь знает, как передать аргументы командной строки сценарию PowerShell из C # и убедиться, что пробелы не являются проблемой?
c#
command-line
powershell
scripting
arguments
Mephisztoe
источник
источник
Command myCommand = new Command(scriptfile);
а затемpipeline.Commands.Add(myCommand);
решить проблему с побегом.Ответы:
Попробуйте создать файл сценария как отдельную команду:
тогда вы можете добавить параметры с помощью
и наконец
Вот полный отредактированный код:
источник
У меня есть другое решение. Я просто хочу проверить, успешно ли выполняется сценарий PowerShell, потому что, возможно, кто-то может изменить политику. В качестве аргумента я просто указываю путь исполняемого скрипта.
С содержимым сценария:
источник
У меня возникли проблемы с передачей параметров в метод Commands.AddScript.
Я решил эту проблему, передав
null
как имя и параметр как значение в коллекциюCommandParameters
Вот моя функция:
источник
using (Runspace runspace = RunspaceFactory.CreateRunspace(runspaceConfiguration))...using (Pipeline pipeline = runspace.CreatePipeline())
Вы также можете просто использовать конвейер с методом AddScript:
Потребуется строка и любые параметры, которые вы ей передадите.
источник
Мой немного меньше и проще:
источник
Вот способ добавить параметры в скрипт, если вы использовали
Это с использованием HashMap в качестве параметров, ключ - это имя переменной в скрипте, а значение - это значение переменной.
И метод переменной заполнения:
таким образом вы можете легко добавить в сценарий несколько параметров. Я также заметил, что если вы хотите получить значение из переменной в своем скрипте, например:
// результат - это имя v
вам придется делать это так, как я показал, потому что по какой-то причине, если вы сделаете это так, как Kosi2801 предлагает, список переменных скрипта не будет заполнен вашими собственными переменными.
источник
Для меня наиболее гибким способом запуска сценария PowerShell из C # было использование
PowerShell.Create().AddScript()
Фрагмент кода
Вы можете проверить наличие ошибки, проверив Streams.Error. Проверить коллекцию было действительно удобно. Пользователь - это тип объекта, который возвращает сценарий PowerShell.
источник