将PowerShell参数从字典更改为c#方法中的字符串列表



我有一个方法来调用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);
}
}

最新更新