我有一个简单的PowerShell脚本
param
(
[Parameter(Mandatory=$true)]
[int]$loop = 2
)
for ($i=0; $i -le $loop; $i++)
{
$v += get-process
}
$v
我想通过C#执行它。我能够执行简单的脚本,但现在当我想将值传递给$ loop参数时,它说
{"由于一个或多个缺少必需项,无法处理命令 参数:循环。"}
我使用以下代码:
using (PowerShell powerShellInstance = PowerShell.Create(RunspaceMode.NewRunspace))
{
powerShellInstance.Runspace = runspace;
powerShellInstance.AddScript(script);
if (parameters != null && parameters.Any())
{
foreach (var parameter in parameters)
{
if (parameter.Type == ParameterType.Int32)
{
int value = Convert.ToInt32(parameter.Value.Trim());
powerShellInstance.AddParameter(parameter.Name.Trim(), value);
}
else
{
powerShellInstance.AddParameter(parameter.Name.Trim(), parameter.Value.Trim());
}
}
}
在这里,我在visual studio的调试模式中看到参数名称为 $ loop ,其值通过 Addparameter Api
清楚地设置但是当我打电话给
时,我得到了上述异常Collection<PSObject> output = powerShellInstance.Invoke();
不确定,我哪里错了。请帮忙
答案 0 :(得分:2)
查看代码和脚本的其余部分会有所帮助。需要注意的一点是,参数名称实际上是loop
,而不是$loop
。
以下是一些非常简化的代码,显示了这一点。
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Management.Automation;
using System.Text;
using System.Threading.Tasks;
namespace PSTest
{
class Program
{
static void Main(string[] args)
{
using (PowerShell powerShellInstance = PowerShell.Create(RunspaceMode.NewRunspace))
{
var script = "param($param1) $output = 'testing params in C#:' + $param1; $output";
powerShellInstance.AddScript(script);
powerShellInstance.AddParameter("param1", "ParamsinC#");
Collection<PSObject> PSOutput = powerShellInstance.Invoke();
foreach (PSObject outputItem in PSOutput)
{
if (outputItem != null)
{
Console.WriteLine(outputItem);
}
}
Console.ReadKey();
}
}
}
}