PowrShellでなんかのコマンドを実行する際に、事前に確認をしたい時があります。
git (svn) rebaseとか、git push -fとか。
そんな時、コマンド実行前に簡単に確認出来るような関数を作成してみました。
以下のPowerShellコードを$Profileとかに書いたりしておく。
コマンド実行前に確認メッセージを行う
#コマンド実行前確認メッセージ
function DoCommand-WithConfirm([string]$command, [string]$addMessage = "", [bool]$isDefaultYes=$false)
{
#選択肢の作成
$CollectionType = [System.Management.Automation.Host.ChoiceDescription]
$ChoiceType = "System.Collections.ObjectModel.Collection"
#選択肢コレクションの作成
$descriptions = New-Object "$ChoiceType``1[$CollectionType]"
$questions = (("&Yes","実行します"), ("&No","実行しない"))
$questions | %{$descriptions.Add((New-Object $CollectionType $_))}
#確認メッセージ作成
$message = "「" + $command + "」" + "を実行しますか?"
if( -not [string]::IsNullOrEmpty($addMessage))
{
$message += [System.Environment]::NewLine + $addMessage
}
#規定値の設定
$defoltType = 1;
if($isDefaultYes -eq $true)
{
$defoltType = 0;
}
#確認メッセージの表示とコマンドの実行
$answer = $host.ui.PromptForChoice("<実行確認>",$message ,$descriptions,$defoltType)
if($answer -eq 0)
{
Invoke-Expression $command
}
}
参考:ここらへん
引数は$command
が実行するコマンド(を文字列にして渡す)、$addMessage
が確認メッセージの後に追加するメッセージ内容(改行された後表示される)、$isDefaultYes
がYesを規定値にするかどうかのbool値(何も入れないと$false
)。
使い方はこんな感じ
DoCommand-WithConfirmの使い方
> DoCommand-WithConfirm "Write-Host `"Hello World`""
<実行確認>
「Write-Host "Hello World"」を実行しますか?
[Y] Yes [N] No [?] ヘルプ (既定値は "N"): y
Hello World
> DoCommand-WithConfirm "Write-Host `"Hello World`"" "ええんか? ほんまにええのんか?"
<実行確認>
「Write-Host "Hello World"」を実行しますか?
ええんか? ほんまにええのんか?
[Y] Yes [N] No [?] ヘルプ (既定値は "N"):
> DoCommand-WithConfirm "Write-Host `"Hello World`"" "ええんか? ほんまにええのんか?" $true
<実行確認>
「Write-Host "Hello World"」を実行しますか?
ええんか? ほんまにええのんか?
[Y] Yes [N] No [?] ヘルプ (既定値は "Y"):
Hello World
これでうっかりミスを回避していきたいものですね。