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

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

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

但是,在运行脚本时,我想一次输入几个字符,并在名为servernames.txt的外部文本文件中查找匹配项,而字符越多,结果越好(理想情况下,我希望能够直接从动态查找中选择匹配项。

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

我考虑过Out-GridView,但不确定是否可以在控制台脚本中使用。理想情况下,不应弹出另一个窗口。

k319770 回答:Powershell读取主机-提示(如何在控制台中键入值时在外部文件中查找值)

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和服务器名称的一部分一起使用,您可以使用制表符“ tab”完成循环选项,也可以使用Ctrl-Space来显示全部。

阅读Register-ArgumentCompleter帮助页面以了解更多信息,希望对您有帮助

本文链接:https://www.f2er.com/3156426.html

大家都在问