C # передача массива в скрипт powershell - PullRequest
5 голосов
/ 01 декабря 2011

Я пытаюсь запустить скрипт powershell из C #.У меня нет проблем с передачей строк в скрипт, однако, когда я пытаюсь передать массив в скрипт powershell, возникает исключение.Вот код C #:

string [] test = {"1","2","3","4"};

RunspaceConfiguration runspaceConfiguration = RunspaceConfiguration.Create();
Runspace runspace = RunspaceFactory.CreateRunspace(runspaceConfiguration);

runspace.ApartmentState = System.Threading.ApartmentState.STA;
runspace.ThreadOptions = PSThreadOptions.UseCurrentThread;

runspace.Open();
RunspaceInvoke invoker = new RunspaceInvoke();
invoker.Invoke("Set-ExecutionPolicy Unrestricted");

Pipeline pipeline = runspace.CreatePipeline();
Command myCmd = new Command(@"C:\test.ps1");
CommandParameter param = new CommandParameter("responseCollection", test);
myCmd.Parameters.Add(param);
pipeline.Commands.Add(myCmd);

// Execute PowerShell script
Collection<PSObject> results = pipeline.Invoke();

Вот скрипт powershell:

param([string[]] $reponseCollection)
$a = $responseCollection[0]

Каждый раз, когда этот код выполняется, он выдает:

Cannot index into a null array.

Я знаю, чтокод для выполнения сценария powershell является правильным при передаче строк в сценарий powershell, он был тщательно протестирован.

Ответы [ 2 ]

6 голосов
/ 01 декабря 2011

У меня прекрасно работает.

Единственное, что я замечаю, это то, что в параметрах вашего скрипта есть $reponseCollection - в ответе отсутствует s. Если вы не ошиблись при вводе здесь, это будет причиной.

Может показаться, что он работает со строкой, потому что Powershell не заботится (обычно), когда вы назначаете / используете несуществующую переменную. Но когда вы индексируете в нулевую / несуществующую переменную, она выдает ошибку.

0 голосов
/ 01 декабря 2011

Я думаю, что вам нужно передать массив в powershell в виде строки в формате массива powershell, т.е.

string test = "('1','2','3','4')";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...