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