如何输入字符串列表作为参数?

问题描述 投票:1回答:2

我有一个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的表现如何不符合预期(至少我认为不是这样):

Youtube-Video with powershell-misbehavior

powershell parameters
2个回答
© www.soinside.com 2019 - 2024. All rights reserved.