2012-04-24 5 views
1

私は、プロンプトが閉じられたときを除き、選択された値を返す関数を持っています。機能は次のとおりです。Powershell - 入力時にトラップキャンセル

function Read-Choice { 
#.Synopsis 
# Prompt the user for a choice, and return the (0-based) index of the selected item 
#.Parameter Message 
# The question to ask 
#.Parameter Choices 
# An array of strings representing the "menu" items, with optional ampersands (&) in them to mark (unique) characters to be used to select each item 
#.Parameter DefaultChoice 
# The (0-based) index of the menu item to select by default (defaults to zero). 
#.Parameter Title 
# An additional caption that can be displayed (usually above the Message) as part of the prompt 
#.Example 
# Read-Choice "WEBPAGE BUILDER MENU" "Create Webpage","View HTML code","Publish Webpage","Remove Webpage","E&xit" 
PARAM([string]$message, [string[]]$choices, [int]$defaultChoice=0, [string]$Title=$null) 
    if($choices[0].IndexOf('&') -lt 0) { 
     $i = 0; 
     $choices = $choices | ForEach-Object { 
     if($_ -notmatch '&.') { "&$i $_" } else { $_ } 
     $i++ 
     } 
    } 
    $Host.UI.PromptForChoice($Title, $message, [Management.Automation.Host.ChoiceDescription[]]$choices, $defaultChoice) 
} 

次のように私はそれを呼んでいる:

$SetDeletes = read-choice "Delete Files" "Recycle","Kill","E&xit" 0 $message 

ユーザーが0リサイクル、1キルまたはExitの選択肢が表示されます。これら3つのうちの1つが選択され、ユーザーがOKを押すと、選択された値(0,1または2)が返されます。プロンプトが閉じている場合、またはユーザヒットがキャンセルした場合、次のようしかし、スクリプトがメッセージでアボート:「4」の引数(複数可)を有する「PromptForChoice」を呼び出す

例外:「 タイプのエラー"System.Management.Automation.Host .PromptingException"は が発生しました。

プロンプトのキャンセルキーをトラップして処理するにはどうすればよいですか?選択が行われていない場合は、デフォルト値の0にリサイクルして続行します。

ありがとうございます!

答えて

2

私はV3のユーザーのための素晴らしいですが、V2の場合には、あなたがPromptForChoiceコール周りのtry/catchを入れて試してみましたがV3でこれをREPROすることはできません。

try { 
    $Host.UI.PromptForChoice($Title, $message, $choices, $defaultChoice) 
} 
catch [Management.Automation.Host.PromptingException] { 
    $defaultChoice 
} 
+0

完璧に動作します。私はV2にいる。どうもありがとう! –

関連する問題