Добавление завершения табуляции к параметру 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

0 ответов

Другие вопросы по тегам