передача параметра в файл сценария powershell из среды C#

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

Я вызываю файл powershell с машины A для выполнения на удаленной машине (машине B).

// вот фрагмент кода:

 Runspace runspace = RunspaceFactory.CreateRunspace();
 runspace.Open();

Pipeline pipeline = runspace.CreatePipeline();
string scripttext = "$secpasswd = ConvertTo-SecureString '222_bbbb' -AsPlainText –Force";
string scripttext1 = "$mycreds = New-object -typename System.Management.Automation.PSCredential('TS-TEST-09\\Administrator',$secpasswd)";
string scripttext2  = "$s = New-PSSession -ComputerName TS-TEST-09 -Credential $mycreds";
**string scripttext5 = "Invoke-Command -Session $s -FilePath 'helper.ps1' | out-null";**

pipeline.Commands.AddScript(scripttext);
pipeline.Commands.AddScript(scripttext1);
pipeline.Commands.AddScript(scripttext2);
pipeline.Commands.AddScript(scripttext5);

Collection<PSObject> results = pipeline.Invoke();

теперь в строке string scripttext5 = "Invoke-Command -Session $s -FilePath 'helper.ps1' | out-null"; мне нужно передать несколько параметров (например, имя пользователя из среды С#: useralias) в этот файл helper.ps1 для обработки. может ли кто-нибудь указать мне правильный способ сделать это?

ТИА, Маниш


person user1156612    schedule 24.01.2012    source источник
comment
любое окончательное решение с полным исходным кодом об этом?   -  person Kiquenet    schedule 30.05.2012


Ответы (2)


Если имя пользователя и пользовательский псевдоним исходят от локальной машины, вы можете сделать это следующим образом:

string scripttext5 = "Invoke-Command -Session $s -FilePath 'helper.ps1' -Args " + 
                      username + "," + useralias + " | Out-Null";

Это предполагает, что ваш файл helper.ps1 принимает как минимум два параметра. Если да, то значения переменных C# username и useralias будут присвоены первым двум параметрам.

person Keith Hill    schedule 24.01.2012
comment
Привет, Кит. Ваши предположения верны для этого случая. Но когда я пытаюсь использовать эти две переменные, имя пользователя предоставляется как само «имя пользователя», а не как значение, содержащееся в этом параметре. я пытался даже после удаления из -Args + имя пользователя +, но безрезультатно. можем ли мы как-то исправить это поведение? - person user1156612; 25.01.2012
comment
Это должно сработать, но если нет, попробуйте следующее: string scripttext5 = String.Format("Invoke-Command -Session $s -FilePath 'helper.ps1' -Args {0},{1} | Out-Null", username, useralias); - person Keith Hill; 25.01.2012

Хорошо, вот решение, которое сработало для меня.

он берет свои биты из решения Кейта. хитрость заключается в том, чтобы выставить переменные из С#, используя

runspace.SessionStateProxy.SetVariable("PSuseralias", this.useralias);

теперь используя $PSuseralias как

string scripttext5 = "Invoke-Command -Session $s -FilePath 'helper.ps1' -Args  $PSuseralias;

это помогает.

person Community    schedule 25.01.2012