将参数传递给C#环境中的powershell脚本文件

时间:2012-01-24 17:10:36

标签: c# powershell parameters remoting powershell-remoting

我知道主题行看起来太平凡了,有些帖子解决了很多这样的问题。我没有找到我正在寻找的东西,因此这篇文章。

我正在调用机器A中的powershell文件,以便在远程机器(机器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'shelper.ps1'| out-null”; 我必须将一些参数(例如,来自c#environment:useralias的用户名)传递给此helper.ps1文件进行处理。任何人都可以指导我这样做的正确方法吗?

TIA, 和Manish

2 个答案:

答案 0 :(得分:0)

如果用户名和useralias来自本地计算机,那么您可以这样做:

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

这假设您的helper.ps1文件至少需要两个参数。如果是这样,那么C#变量usernameuseralias的值将被分配给前两个参数。

答案 1 :(得分:0)

好的,所以这是适用于我的解决方案。

从Keith的解决方案中获取它的位数。诀窍是使用

从c#中公开变量
runspace.SessionStateProxy.SetVariable("PSuseralias", this.useralias);

现在使用$ PSuseralias作为

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

这就是诀窍。