Завершение вкладки - набор имен папок - PullRequest
0 голосов
/ 11 октября 2019

Я хочу добавить табуляцию для моего параметра ($ filter). Я хочу добавить все папки (содержащиеся в том же каталоге, что и скрипт) в Validate Set.

Ниже приведена структура моей папки:

───test
   │   script.ps1
   │
   ├───Folder1
   ├───Folder2
   └───Folder3

Чего я хочу добиться - это завершить вкладку -filterПараметр только с именем папки.

script.ps1 -filter Fol

«попадание на вкладку» приведет к:

script.ps1 -filter Folder1

Я пытался указать параметр фильтра как System.IO.FileInfo, но завершение вкладки добавлено ./ передимя папки

Param(
    [System.IO.FileInfo]
    [string]$filter = "*", 
)

1 Ответ

2 голосов
/ 11 октября 2019

Зарегистрируйте новый аргумент-завершитель с помощью Register-ArgumentCompleter:

# script.ps1
param(
  [string]$Filter
)

# do stuff with $Filter
# the argument completer
Register-ArgumentCompleter -CommandName script.ps1 -ParameterName Filter -ScriptBlock {
  param($commandName, $parameterName, $wordToComplete, $commandAst, $fakeBoundParameters)

  if($script:FileNames -isnot [string[]]){
    $script:FileNames = (Get-ChildItem $PSScriptRoot).Name
  }

  # The Where-Object clause will ensure that `Fol` is taken into account when tab completing
  return $script:FileNames |Where-Object {$_ -like "$wordToComplete*"} |ForEach-Object { "'$_'" }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...