我有一个方法来调用PowerShell命令和参数。我这样定义它:
public string RunScript(string contentScript, Dictionary<string, EntityProperty> parameters)
{
using (PowerShell ps = PowerShell.Create())
{
ps.AddScript(contentScript);
ps.AddParameters(parameters);
我的PowerShell命令参数定义如下:
[Parameter]
public List<string> Properties { get; set; } = new List<string>();
我如何改变我的RunScript
方法,以便在参数中我只接受传递的字符串列表?
当您创建powershell时,您可以这样使用:(例如)
PowerShell shell = PowerShell.Create().AddCommand("Get-NetAdapter")
.AddParameter("name", "Ethernet*")
.AddParameter("ThrottleLimit", 5);
或者你使用字典:
IDictionary parameters = new Dictionary<String, String>();
parameters.Add("name", "Ethernet*");
parameters.Add("ThrottleLimit", 5);
PowerShell shell = PowerShell.Create();
shell.AddCommand("Get-NetAdapter");
shell.AddParameters(parameters);
。AddParameter(对于单个创建)与不同。AddParameters(用于多次创建)
对于一个正确的列表,你可以使用:AddParameters(IList)所以你必须使string
适应你的情况…我以前从未使用过,但你可以试试:
public string RunScript(string contentScript, List<string> parameters)
{
using (PowerShell ps = PowerShell.Create())
{
ps.AddScript(contentScript);
ps.AddParameters(parameters);
使用properties
作为参数
要将字典转换为列表,只需遍历字典并将每个项添加到新列表中。如果你需要从EntityProperty中获取一些信息,你可以像这样访问它:
List<string> parameterList = new List<string>();
foreach (var item in parameters)
{
parameterList.Add(item.Key + item.Value.xyz);
}
添加每个项目作为powershell参数,你可以这样做:
using(PowerShell ps = PowerShell.Create())
{
ps.AddScript( contentScript );
foreach (var item in parameters)
{
ps.AddParameter(item.Key, item.Value.xyz);
}
}