雑記+備忘録

OS中心の技術情報と趣味について(最近は主に将棋)。備忘録なのでここに書かれたことを試すのは自己責任でお願いします。

実行確認メッセージを出す

PowerShellスクリプトを実行する前に、「よろしいですか?」のメッセージを出す。

=== 以下サンプル ===

$title = "*** 実行確認 ***"
$message = "データに漏れがないか確認してください。実行してよろしいですか?"

$objYes = New-Object System.Management.Automation.Host.ChoiceDescription "&Yes","実行する"

$objNo = New-Object System.Management.Automation.Host.ChoiceDescription "&No","実行しない"

$objOptions = [System.Management.Automation.Host.ChoiceDescription[]]($objYes, $objNo)

$resultVal = $host.ui.PromptForChoice($title, $message, $objOptions, 1)

if ($resultVal -ne 0) { exit }
=== 以上サンプル ===

 

まずは参考としたサイト(ありがとうございます)。
・Adding a Simple Menu to a Windows PowerShell Script
 https://technet.microsoft.com/en-us/library/ff730939.aspx

・[PowerShell]コンソールに選択肢を表示する
 http://d.hatena.ne.jp/newpops/20061120/p2

・コマンドを実行する前に確認メッセージを出力する
 http://qiita.com/Fuhduki/items/04eca7e2f38a1d4b8f81

・$host.UIのプロンプト入力機能を使う
 http://mtgpowershell.blogspot.jp/2011/10/hostui.html

 

一番上のリンク記事に近い形式で、単純にYesなら先へ進み、
Noなら一旦スクリプトをexitするロジックにしたのがサンプルスクリプト
選択肢は
[Y] Yes [N] No [?] ヘルプ (既定値は "N"):
と表示され、[?]を選択すると
Y - 実行する
N - 実行しない
と表示される。

ベースで使っているのは「$host.ui」のプロンプト入力機能で、
PromptForChoiceの引数の3番目に選択肢オブジェクトを指定する。
引数の4番目は既定値を選択肢オブジェクトで指定した引数の何番目(0スタート)にするかを指定する。
誤ってEnterを押下したときに安全側に倒すために既定値はNoが一般的か。

選択肢オブジェクトは単純に作るためには「System.Management.Automation.Host」Namespaceの
「ChoiceDescription」クラスを使用する。
サンプルにあるようにNew-Objectで選択肢それぞれのオブジェクトを作成し、
それを配列型に変換する。
アンパサンドの次の文字がショートカットキャラクターになるので、
例えば「&Yes」でなく「Y&es」とやると、「YesならEを入力」で表示される。