Powershell read-host -prompt (Как искать значения во внешнем файле при их вводе в консоли) - PullRequest
0 голосов
/ 06 ноября 2019

У меня есть консольный сценарий PowerShell (не GUI), который имеет следующий код:

$Servername = Read-host -Prompt "What is the server name?"

Однако при запуске сценария я хочу набрать несколько символов за раз и найти его во внешнем текстовом файле. для совпадений вызывается servernames.txt, и чем больше символов, тем лучше результаты (в идеале я хочу иметь возможность выбирать совпадение непосредственно из динамического поиска).

Цель состоит в том, чтобы упростить ввод имен сотенсерверы, так как вам не нужно запоминать каждое имя, потому что файл servernames.txt будет иметь весь инвентарь сервера.

Я думал о Out-GridView, но не уверен, что это будет работать в консольном скрипте. В идеале не должно появляться другое окно.

1 Ответ

1 голос
/ 06 ноября 2019

Командлет Register-ArgumentCompleter регистрирует завершитель пользовательского аргумента. Завершение аргумента позволяет вам обеспечить динамическое завершение табуляции во время выполнения для любой указанной вами команды.

Вот пример функции, адаптированный к вашему вопросу (предполагает C:\servernames.txt)

$scriptBlock = {
    param($commandName, $parameterName, $wordToComplete, $commandAst, $fakeBoundParameters)

    Get-Content C:\servernames.txt | Where-Object {
        $_ -like "*$wordToComplete*"
    } | ForEach-Object {
        "'$_'"
    }
}
#Register the above scriptblock to the Test-DynamicArguments function ComputerName Parameter
Register-ArgumentCompleter -CommandName Test-DynamicArguments -ParameterName ComputerName -ScriptBlock $scriptBlock

function Test-DynamicArguments {
    [CmdletBinding()]
    param
    (
        $ComputerName
    )

    "You Selected $ComputerName"
} 

Теперь попробуйте Test-DynamicArguments с -ComputerName и частью имени сервера, вы можете завершить вкладку для выбора параметров цикла, а также Ctrl-Space, чтобы показать все.

Прочтите справочную страницу Register-ArgumentCompleter для получения дополнительной информации, надеюсь, это поможет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...