У меня есть командлет, в котором я принимаю список строк в качестве параметра, определенного в классе 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 (поскольку он предоставляет множество других полезных функций, не позволяющих мне реализовать всю часть моего командлета, касающуюся взаимодействия с пользователем)
Редактировать: Вот полное содержание моего командлета C # -класса:
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')
Я получаю этот вывод:
<code><pre>
scope1
scope2
Как и ожидалось.
Но это не работает, если я предоставляю параметр при запросе PowerShell, например:
<code><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>
Теперь вывод такой:
@('scope1','scope2')
Даже если я войду туда по одному, все равно в списке будет только один дочерний элемент:
<code><pre>
AllowedScopes[0]: <b>'scope1'</b>
AllowedScopes[1]: <b>'scope2'</b>
AllowedScopes[2]:
Выход:
<code><pre>
'scope1' 'scope2'
/ edit2:
Я загрузил видео, чтобы вы могли увидеть, как powershell ведет себя не так, как ожидалось (по крайней мере, я так думаю):
Youtube-видео с неправильным поведением powershell