2017-07-31 18 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 
} 

私が直面しています問題は、文字列がnull /空の場合は上記の検証で、それが唯一の確認ということです。私が答えに何を入力しても、他の4つの基準は問題にはならず、スクリプトはWHILEループを抜けてIF-ELSEステートメントに進みます。

例:

I入力 "はい"、 "YES"、 "はい"、 "Y"、 "Y" またはこれに他の同様の変動した場合、アプリケーションはWHILE文を終了/スキップされますと、 IF文に進み、意図したとおりに目的のアクションを実行します。何も入力しない(文字列null/emptyを残す)と、意図したとおりにWhileループ内にとどまります。しかし、他の入力があれば、アプリケーションはWHILEステートメントをスキップ/終了し、ELSEステートメントに進みます。これは私が望むものではありません。

私は、私も-ANDおよび-ORで遊んでてきた-eq、-ieq、-ceq、様、-ilike、-ne、-ine、-notlikeを使用して、これを試みたが、 を-inotlikeていますオペレータは、おそらく私はそのセットアップを台無しにすることを望んでいる。 残念ながら、すべて私は同じ結果をもたらしました。

ご提供いただけるアドバイスをありがとうございます。

ところで私はこれから何をしようとしているのか分かりません。ほとんどの公式サイトでオペレーターの働きを調べています。これまでのところ、すべてのロジックはうまくいくと言いますが、実行すると失敗します。

答えて

2

$答えがnullの場合にのみあなたは次のように「OR」に変更する必要があります...ので、あなたの条件文!$answer ANDの最初の部分の

に動作します: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、2番目のオプションの場合は1などに設定されます。 PromptForChoiceメソッドの最後のパラメータは、デフォルトの選択を決定します(つまり、Enterを押すだけです)。

関連する問題