2017-07-31 169 views
1

問題用戶輸入使用PowerShell進行驗證

我正在使用自定義用戶輸入驗證方法,但我正在努力使其正常工作。

這裏是腳本的基本思路:

$answer = Read-Host "Are you sure you wish to continue? [Y]es or [N]o" 
while (!$answer -AND $answer -ine "y" -AND $answer -ine "yes" -AND $answer -ine "n" -AND $answer -ine "no") { 
    $answer = Read-Host "You hand entered an invalid response.`nPlease enter [Y]es or [N]o" 
} 
if ($answer -ieq "yes" -OR $answer -ieq "y") { 
    do action 
} 
else { 
    don't do action 
} 

我現在面臨的問題是,與上面的驗證,只有當字符串爲空/空確認。無論我輸入什麼答案,其他4個標準似乎都不重要,腳本將退出WHILE循環並繼續執行IF-ELSE語句。

例子:

如果我輸入「是」,「是」,「是」,「Y」,「Y」或其他任何類似的變化這一點,應用程序將跳過/退出while語句和繼續進行IF聲明,按預期執行所需的操作。如果我不輸入任何內容(將字符串留空/空),它將按預期保留在While循環中。但是,任何其他輸入都會導致應用程序跳過/退出WHILE語句並繼續執行ELSE語句,這不是我想要的。

我曾嘗試過使用-eq,-ieq,-ceq,-like,-ilike,-ne,-ine,-notlike和-inlike like 我甚至一直在玩-AND和-OR運營商希望我可能搞砸了這個設置。 不幸的是,所有人都給了我相同的結果。

非常感謝您提供任何建議,您可以提供。

順便說一句:我在這裏找不到任何東西,接近我正在嘗試做的事情,並且我研究了大部分官方網站以瞭解操作員的工作方式。到目前爲止,所有的邏輯都表示它應該可以工作,但是當我運行它時會失敗。

回答

2

這時候$回答是因爲你的條件語句!$answer AND的第一部分的空只會工作...

您需要將其更改爲「OR」如下:while (!$answer -OR ($answer -ine "y" -AND $answer -ine "yes" -AND $answer -ine "n" -AND $answer -ine "no"))

+0

哦。我沒有意識到這會導致問題。非常感謝你的幫助。 – Brandon

-1
$answer = Read-Host "Are you sure you wish to continue? [Y]es or [N]o" 
While (!($answer) -and 
     (($answer.Substring(0,1).ToUpper() -ne 'Y') -or 
     ($answer.Substring(0,1).ToUpper() -ne 'N'))) 
{ 
    $answer = Read-Host "You entered an invalid response.`r`nPlease enter [Y]es or [N]o" 
} 

(...) 
1

使用內置的PowerShell選擇工具。例如:

$choices = [Management.Automation.Host.ChoiceDescription[]] @(
    New-Object Management.Automation.Host.ChoiceDescription("&Yes","Do whatever.") 
    New-Object Management.Automation.Host.ChoiceDescription("&No","Do not do whatever.") 
) 
$choice = $Host.UI.PromptForChoice("Are you sure?","This will do whatever.",$choices,1) 

您可以輕鬆地添加到選項列表中。如果您爲第二個選項選擇第一個選項,則$choice變量將設置爲0,依此類推。 PromptForChoice方法的最後一個參數確定默認選項(即,如果您只按Enter)。