Powershell read-host -prompt (как искать значения во внешнем файле, когда вы вводите их в консоли)

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

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

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

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

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

1 ответ

В 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 справочная страница для получения дополнительной информации, надеюсь, это поможет

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