7
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

コマンドを実行する前に確認メッセージを出力する

Last updated at Posted at 2013-09-13

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

これでうっかりミスを回避していきたいものですね。

7
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?