使用文件内容进行读取主机验证

时间:2015-09-29 14:32:50

标签: powershell input match verification

我正在尝试执行read-host命令,该命令仅接受与文本文件中列出的主机名匹配的输入。以下是我正在使用的代码,有人可以帮忙吗?
它试图匹配整个文本文件而不仅仅是它的任何一行,它根本不需要casesenstivie:

$Input = Get-Content -Path "C:\Users\username\Computer-Results.txt"
Do { 
    Try { 
            $HostnameOK = $True
            $HostnameEntry = Read-Host "Enter something"}
            Catch { $HostnameOK = $False
             Write-Host "This is the catch."}
           }

    Until (($HostnameEntry -contains $Input))


$Input

3 个答案:

答案 0 :(得分:2)

你有条件倒退。

Until (($HostnameEntry -contains $Input))

应该是

Until ($fileInput -contains $HostnameEntry)

如果您至少拥有PowerShell 3.0,则-in运算符更直观

Until ($HostnameEntry -in $fileInput)

正如其他答案和评论所指出的那样,您正在使用automatic variable。更改变量名称。

  

$Input:          包含枚举器,枚举传递给的所有输入          功能。 $ input变量仅适用于函数和脚本          块(未命名的函数)。在一个过程块中          函数,$ input变量枚举当前的对象          在管线中。 Process块完成后,没有对象          留在管道中,所以$ input变量枚举为空          采集。如果函数没有Process块,那么在          结束块,$ input变量枚举所有输入的集合          功能。

答案 1 :(得分:2)

这是因为$Input是默认的PowerShell变量。您应该使用另一个变量来添加文件的内容。类似的东西:

$fileinput = Get-Content -Path "C:\Users\username\Computer-Results.txt"
do {
    $HostnameEntry = Read-Host "Enter Something"
} until ($fileinput -contains $HostnameEntry)

答案 2 :(得分:1)

尝试这样的事情。

$Computers = Get-Content -Path 'C:\Users\username\Computer-Results.txt'

do {
    $HostnameEntry = Read-Host 'Enter something'
    if ($Computers -notcontains $HostnameEntry)
    {
        Write-Host "Sorry, [$($HostnameEntry)] isn't acceptable"
        pause
    }
} while ($Computers -contains $HostnameEntry)