Передача параметров в необработанный скрипт powershell из приложения c # - PullRequest
3 голосов
/ 16 декабря 2011

У меня проблемы с передачей параметров / аргументов в мой скрипт powershell из приложения ac #.Проблема в том, что у меня в базе данных хранится сценарий powershell для выполнения.Этот скрипт принимает параметры, и это, кажется, не принимает мои переданные аргументы.Пример того, что я делаю, ниже.TasjRun.Task.Script - это фактический скрипт, а НЕ путь к файлу ps1, и я думаю, что это может быть проблемой?Могу ли я передать параметры в необработанный скрипт?

Большое спасибо

Ричард

var runspaceConfiguration = RunspaceConfiguration.Create();

var runspace = RunspaceFactory.CreateRunspace(runspaceConfiguration);
runspace.Open ();

var pipeline = runspace.CreatePipeline();

var myCommand = new Command(taskRun.Task.Script, true);

foreach (var kvp in taskRun.GetScriptParameters())
{
    myCommand.Parameters.Add(new CommandParameter(kvp.Key, kvp.Value));
}

pipeline.Commands.Add(myCommand);

var result = pipeline.Invoke().FirstOrDefault();

Ответы [ 2 ]

4 голосов
/ 16 декабря 2011

Я могу вам сказать, что ваш подход работает в принципе, например ::1001

var runspaceConfiguration = RunspaceConfiguration.Create();
var runspace = RunspaceFactory.CreateRunspace(runspaceConfiguration);
runspace.Open();

var pipeline = runspace.CreatePipeline();

var script = "param($p1,$p2) \"p1 is $p1, p2 is $p2\"";
var myCommand = new Command(script, true);

myCommand.Parameters.Add(new CommandParameter("p1", DateTime.Now));
myCommand.Parameters.Add(new CommandParameter("p2", Math.PI));

pipeline.Commands.Add(myCommand);

var result = pipeline.Invoke().FirstOrDefault();
Console.WriteLine(result);

Выходы:

p1 is 12/16/2011 10:24:48, p2 is 3.14159265358979

Так что нам нужно увидеть ваш сценарий, чтобы лучше определить, почему он не работает для вас.

1 голос
/ 08 февраля 2013

Я новичок в stackoverflow, так что простите за любое странное форматирование.Я знаю, что эта ветка старая, но у меня сама эта проблема была сегодня, и я не смог найти явного решения в Интернете, поэтому решил, что поделюсь решением одного из моих коллег и меня.

Хитрость в том, что если вы вызываете реальный скрипт (например, «C: \ scripts \ sendEmail.ps1»), вам нужно передать параметры так же, как если бы вы запускали скриптиз командной строки.В моем коде ниже скажем, что peopleName = "Joe" и PersonEmail = "Joe@yahoo.com".Я предполагаю, что taskRun.Task.Script - это полный путь к сценарию PS.

Если вы печатаете myCommand, он должен читать «C: \ scripts \ sendEmail.ps1 -Имя Джо -Эмайл Джо @ yahoo.com "где -Name и -Email будут соответствовать параметрам $ Name и $ Email в sendEmail.ps1 (убедитесь, что вы правильно настроили параметры в своем скрипте PS!)

myCommand.Parameters.Add () WONВ этом случае T РАБОТАЕТ, поскольку предполагается, что ваша команда является действительной командой, а не полным сценарием.myCommand.Parameters.Add () работает в этом случае: если вы написали var myCommand = new Command ("gwmi Win32_Bios");и затем поместите myCommand.Parameters.Add ("computerName", "myComputer");и myCommand.Parameters.Add ("учетные данные", "мой пароль");где «myComputer» и «myPassword» являются жестко запрограммированными строками, вы получите команду «gwmi win32_Bios -computerName myComputer -credential myPassword», которая должна выполняться нормально (она не будет возвращать данные, как я их написал, нобудет правильно передавать параметры).

Извините, что это так долго, но я хотел, чтобы это было ясно, потому что я боролся с этой проблемой в течение достаточно долгого времени.Полный код ниже.К вашему сведению, вам не нужна runspaceConfiguration для создания объекта Runspace.

var runspaceConfiguration = RunspaceConfiguration.Create();

var runspace = RunspaceFactory.CreateRunspace(runspaceConfiguration);

var pipeline = runspace.CreatePipeline();    

var myCommand = new Command(String.Format("{0} -Name {1} -Email {2}", taskRun.Task.Script, personsName, personsEmail), true);

pipeline.Commands.Add(myCommand);

var result = pipeline.Invoke().FirstOrDefault(); 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...