2015-06-09

PowerShellでInputBoxを使用する


第1回ではメッセージボックスの使用方法について投稿しました。

⇒ [第1回] PowerShellでMessageBoxを使用する方法


第2回は「InputBox (インプットボックス)」について書いていきます。

インプットボックスはメッセージボックスと並んで、よく使われるフォームのひとつではないでしょうか。

インプットボックスの強みといえば、ユーザーに入力された値を戻り値として変数に格納し、その後の様々な処理に活用できることです。

ではまず、インプットボックスの基本型を記述します。



-------ここから-----------------------------------------------------------------------------------

# アセンブリの読み込み
[void][System.Reflection.Assembly]::Load("Microsoft.VisualBasic, Version=8.0.0.0, Culture=Neutral, PublicKeyToken=b03f5f7f11d50a3a")

# インプットボックスの表示
$INPUT = [Microsoft.VisualBasic.Interaction]::InputBox("メッセージ", "タイトル")

-------ここまで-----------------------------------------------------------------------------------

上の内容をコピーして、PowerShell ISEを起動し、貼り付けたあと、[スクリプトを実行(F5)]を押してみてください。


この画像が表示されれば成功です!


それでは順に解説していきます。
(文頭に#が付いているものはコメントを表します)

◆ 1行目
[void][System.Reflection.Assembly]::Load("Microsoft.VisualBasic, Version=8.0.0.0, Culture=Neutral, PublicKeyToken=b03f5f7f11d50a3a")

なにがなにやらさっぱりわかりませんね。
大丈夫です。私もわかりません(笑)

しかし、この一文は必ず記述する必要があります。
今はとりあえず、「インプットボックスを使うときのおまじない」として覚えておきましょう。

◆2行目
$INPUT = [Microsoft.VisualBasic.Interaction]::InputBox("メッセージ", "タイトル")

「メッセージ」の部分には、ユーザーに入力して欲しいことを記述します。
「タイトル」の部分はそのままですね。

そして「$INPUT」は変数であることを表しています。

つまり、2行目ではユーザーに入力された文字列を変数INPUTに格納しているということです。

実際、2行目が下記のように記述されていても、インプットボックスは表示されます。


[Microsoft.VisualBasic.Interaction]::InputBox("メッセージ", "タイトル") 

しかしこの文では、戻り値(ユーザーに入力された文字列)の行き場がなく、何の意味もありません。
よってインプットボックスは変数に格納します。


それでは次に、インプットボックスを使用した例文を記述します。

-------ここから-----------------------------------------------------------------------------------

# アセンブリの読み込み
[void][System.Reflection.Assembly]::Load("Microsoft.VisualBasic, Version=8.0.0.0, Culture=Neutral, PublicKeyToken=b03f5f7f11d50a3a")

# インプットボックスの表示
$INPUT = [Microsoft.VisualBasic.Interaction]::InputBox("あなたの年齢帯を番号で指定してください。`n`n[ 1 ]:10代`n[ 2 ]:20代`n[ 3 ]:30代以上", "<年齢確認>")

if ( $INPUT -eq 1 ){
write-output "10代ですね"
}elseif( $INPUT -eq 2){
write-output "20代ですね"
}else{
write-output "30代以上ですね"
}

-------ここまで-----------------------------------------------------------------------------------

上記をコピーし、PowerShell ISEを起動し、貼り付け、[スクリプトを実行(F5)]を押してください。



これはインプットボックスで年齢帯を問い、ユーザーに当てはまる番号を入力してもらいます。
次に入力された結果をif文で分岐し、評価して、該当する文字を書き出すという簡単なスクリプトです。

※メッセージ中に改行したい場合は「`n」を挿入します。

インプットボックスに「1」と入力し、OKボタンを押すと、「10代ですね」と出力されるということです。


簡単でしたが、インプットボックスの使い方をわかっていただけたでしょうか。

例えば私は、次のような使い方をしています。
1.図面番号を入力させ、入力された番号の図面(PDFファイル)が保存されているフォルダを開く。
2.田中さんは1、佐藤さんは2というように人に番号を割り当て、各人のデータ格納フォルダへのパスを設定する。

これ以外にも、あとは使う方のひらめき次第で、様々な用途に活用できると思います。
ぜひインプットボックスを活用してください!

=======================================================================
本投稿は筆者が独自に調査したものを投稿しているため、間違い等もあるかと
思いますので、ご理解の程、宜しくお願い致します。
なお、本投稿に関する疑問や質問には可能な限りお答えさせていただきます。、
お気軽にコメントやメールをお送りください。
メール:tkk-powershell@gmail.com
また、間違いのご指摘・アドバイス等も歓迎いたします。
=======================================================================
Google+、Twitterで更新情報をお届けしています!
ぜひフォローをお願い致します!           
=======================================================================
スポンサーリンク


2 件のコメント:

  1. 入力した文字に対して、指定のファイルを開かせるということは可能ですか?
    例えば、(1)と入力すれば「test.txt」というファイルを開く。
    といった感じです。
    無学なものでわからないので教えていただけると幸いです。

    返信削除
    返信
    1. 上松修二様
      コメントありがとうございます!また返信が遅くなり申し訳ございません。

      お問い合わせの件ですが、下記のように変数$INPUTの内容が希望の文字列であるかどうかを判定するようにすれば可能です。

      # インプットボックスの表示
      $INPUT = [Microsoft.VisualBasic.Interaction]::InputBox("ファイル名を入力してください", "入力")

      if ( $INPUT -eq "(1)" ){
      # 希望のファイル名が入力されたときの処理
      }else{
      write-output "ファイル名が不正です"
      }

      ただし、少しでも文字列が異なる場合はFalseとなりますので注意が必要です。
      例えば「1」を半角で入力しなければならないところを全角で入力してしまった場合などです。

      また、ファイルを指定させたい場合は上記のインプットボックスではなく、「ファイル選択ダイアログ」を使用するのが一般的です。

      ファイル選択ダイアログについてはこちらをご覧ください。
      https://letspowershell.blogspot.com/2015/06/powershell_10.html

      以上、ご参考いただけますと幸いです。
      他にも質問等ありましたらお気軽にコメントをお寄せください(^o^)

      削除

疑問・質問・リクエスト お気軽にどうぞ (^O^)/