Powershell读取主机提示符(如何在控制台中键入值时查找外部文件中的值)

wrrgggsh  于 2023-01-20  发布在  Shell
关注(0)|答案(1)|浏览(117)

我的PowerShell控制台脚本(非GUI)包含以下代码:

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

然而,当运行脚本时,我想一次键入几个字符,并让它在名为servernames.txt的外部文本文件中查找匹配项,字符越多,结果越精细(理想情况下,我希望能够直接从动态查找中选择匹配项)。
这样做的目的是便于键入数百个服务器的名称,因为servernames.txt文件将包含整个服务器清单,所以您不需要记住每个名称。
我考虑过Out-GridView,但不确定它是否能在控制台脚本中工作。理想情况下,它不应该弹出另一个窗口。

deyfvvtc

deyfvvtc1#

Register-ArgumentCompleter cmdlet注册自定义参数完成符。参数完成符允许您在运行时为指定的任何命令提供动态制表符完成。
下面是针对您的问题定制的函数示例(假设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帮助页面获取更多信息,希望这对您有所帮助

相关问题