我正在尝试执行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
答案 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)