Добавление завершения табуляции к параметру ItemType «New-Item» для пользовательского поставщика PowerShell.
Я создаю собственный поставщик PowerShell, используяPowerShellStandard.Library
.
При реализацииNew-Item
командлет, я хотел бы иметь возможность обеспечить поддержку завершения аргументов-ItemType
параметр.
Я не могу найти никакой документации от Microsoft о том, как они это сделали для встроенных поставщиков. Если вы находитесь на пути файловой системы, вы получите табуляцию для таких значений, как «Файл», «Каталог».
Есть ли способ указать возможные значения дляItemType
/Type
параметр?
Я не могу использовать[ArgumentCompleter]
атрибут обычно, поскольку параметр не определен в моем коде. (Вы не можете использовать этот атрибут вitemTypeName
параметр в C#)
Я попытался переопределить параметр с помощьюNewItemDynamicParameters
метод:
protected override object NewItemDynamicParameters(string path, string itemTypeName, object newItemValue)
{
return new NewItemDynamicParameters();
}
internal sealed class NewItemDynamicParameters
{
[Parameter, ArgumentCompleter(typeof(ItemTypeCompleter))]
public string ItemType { get; set; }
}
internal class ItemTypeCompleter : IArgumentCompleter
{
public IEnumerable<CompletionResult> CompleteArgument(string commandName, string parameterName, string wordToComplete, CommandAst commandAst, IDictionary fakeBoundParameters)
{
return new[] { "Value1", "Value2" }.Select(s => new CompletionResult(s));
}
}
но это приводит к этой ошибке: (Он также не пытался завершить аргумент)
A parameter with the name 'ItemType' was defined multiple times for the command.
At line:1 char:1
+ New-Item 1 -ItemType test
+ ~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : MetadataError: (:) [], MetadataException
+ FullyQualifiedErrorId : ParameterNameAlreadyExistsForCommand