我有一个cmdlet,我接受一个字符串列表作为参数,在c#类中定义如下:
[Parameter(Mandatory = true)]
public List<string> AllowedScopes;
因此,当我调用名为Add-Client
的命令时,如何在PowerPhell中提供字符串列表?我试过这个(每一行都是一种不同的方法):
-AllowedScopes scope1, scope2, scope3
-AllowedScopes [scope1, scope2, scope3]
-AllowedScopes {scope1, scope2, scope3}
-AllowedScopes {"scope1", "scope2", "scope3"}
但我总是只在我的列表“AllowedScopes”中获得一个条目,其中包含在AllowedScopes参数名称后输入的完整字符串。
我不能轻易找到任何关于此的内容,所以我想我问的是错误的问题。
我当然可以将AllowedScopes参数设置为一个简单的字符串,然后执行以下操作:
var AllowedScopesAsList = this.AllowedScopes.Split(',').ToList();
但我认为这应该是由PowerShell提供的东西(因为它提供了许多其他有用的功能,使我无法实现我的cmdlet的整个用户交互部分)
编辑:这是我的cmdlet C#-class的全部内容:
using System.Collections.Generic;
using System.Management.Automation;
namespace MyCmdlets
{
[Cmdlet("Add", "Client")]
public class AddClient : Cmdlet
{
[Parameter(Mandatory = true)]
public List<string> AllowedScopes;
protected override void ProcessRecord()
{
AllowedScopes.ForEach(a => WriteObject(a));
}
}
}
有了这个,如果我尝试进入列表就像其中一个答案说:
Add-Client -AllowedScopes @('scope1', 'scope2')
我得到这个输出:
<pre>
scope1
scope2
</pre>
这是预期的。
但它不起作用,如果我在PowerShell请求时提供参数,如下所示:
<pre>
PS> <b>Add-Client</b> <kbd>Enter</kbd>
Cmdlet Add-Client at CommandPipelineposition 1
Enter the values for the following parameter:
AllowedScopes[0]: <b>@('scope1','scope2')</b> <kbd>Enter</kbd>
AllowedScopes[1]: <kbd>Enter</kbd>
</pre>
现在输出是这样的:
@('scope1','scope2')
即使我一个接一个地输入范围,它仍会导致列表只接收一个孩子:
<pre>
AllowedScopes[0]: <b>'scope1'</b>
AllowedScopes[1]: <b>'scope2'</b>
AllowedScopes[2]:
</pre>
输出:
<pre>
'scope1' 'scope2'
</pre>
/ edit2:我上传了一个视频,你可以看到powershell的表现如何不符合预期(至少我认为不是这样):