Ответ 1
Я думаю, что этот пример должен дать вам хорошую отправную точку: Windows Powershell Cookbook: пример внедрения TabExpansion2. Код примера показывает, что вы можете добавить код как до, так и после вызовов по умолчанию на [CommandCompletion]::CompleteInput
.
Например, вы можете добавить запись в хэш-таблицу $options
с именем CustomArgumentCompleters для получения пользовательского завершения для аргументов команды. Запись должна быть хэш-таблицей, где ключи являются именами аргументов (например, "Имя_компьютера" или "Get-ChildItem: Фильтр" ), а значения представляют собой массивы значений, которые могут быть использованы для завершения этого параметра. У Powertheshell.com также есть статья об этом: Динамическое завершение аргумента. Вы также можете указать пользовательские дополнения для собственных исполняемых файлов, используя параметр NativeArgumentCompleters (опять же, ключи - это имена команд, а значения - массивы возможных завершений).
Как только CompleteInput
вернется, вы можете сохранить результат в $result
для дальнейшего анализа. Результатом является экземпляр класса CommandCompletion
. Если по умолчанию не найдено совпадений, вы можете добавить свои собственные записи CompletionResult
в список совпадений:
$result.CompletionMatches.Add(
(New-Object Management.Automation.CompletionResult "my completion string") )
Не забывайте возвращать $result
из функции, чтобы на самом деле произошло завершение.
Наконец, заметка об устранении неполадок: код, вызывающий TabCompletion2
, кажется, подавляет все выходные данные на консоли (не удивительно), поэтому, если вы хотите сами писать сообщения для отладки, попробуйте записать их в отдельный текст файл. Например, вы можете изменить функцию End
в TabCopmletion2
, чтобы выглядеть так:
$result = [System.Management.Automation.CommandCompletion]::CompleteInput(
$inputScript, $cursorColumn, $options)
$result | Get-Member | Add-Content "c:\TabCompletionLog.txt"
$result