0

我有具有以下代码的 PowerShell 控制台脚本(不是 GUI):

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

但是,在运行脚本时,我想一次输入几个字符并让它在外部文本文件中进行查找以servernames.txt进行匹配,并且字符越多,结果就越好(理想情况下,我希望能够直接从动态查找)。

目的是便于键入数百个服务器的名称,因为您不需要记住每个名称,因为该servernames.txt文件将包含整个服务器清单。

我想过Out-GridView,但不确定这是否适用于控制台脚本。理想情况下不应弹出另一个窗口。

4

1 回答 1

1

Register-ArgumentCompletercmdlet 注册自定义参数完成程序。参数完成器允许您在运行时为您指定的任何命令提供动态选项卡完成。

这是针对您的问题量身定制的功能示例(假设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帮助页面以获取更多信息,希望这会有所帮助

于 2019-11-06T10:12:11.597 回答