PowerShellでダイアログを表示し入力結果を取得
公開日 更新日 2016/02/14
PowerShellの入門中です。
今回はPowerShellスクリプトからのWindows標準ダイアログである、ファイル選択ダイアログ、ディレクトリ選択ダイアログ、および、メッセージボックスダイアログをそれぞれ使ってみましたので、そのサンプルソースコードをまとめたいと思います。
PowerShellはやり方を知っていれば意外と簡単に出来るのですが、知らないことは全般的にドキュメントも不足気味。
そのため、結局はGoogleでがんばって検索しながらのコーディングスタイルになってしまいますので、今回調べたことは読み返しが効くポイントとして残したいと思います。
Contents
PowerShellからのダイアログの利用
PowerShellスクリプト内でダイアログ画面を利用する方法について、数件のサイトを見て回ったのですが、.NET Frameworkの機能をPowerShellから使うというやり方が一般的なのだそうです。
以下、参考にさせていただいたサイトです。
- 新・日々録 by TRASH BOX@Eelさん
ファイル選択ダイアログのPowerShellでの実現について、Add-Typeとしての.NET Frameworkオブジェクトの取り込み方法を紹介。
Add-Type方式が一番新しい?と思われ、こちらを参考にさせていただきました。 - Add-Typeコマンドレットのリファレンス
Microsoftのマニュアル。正直ここからダイアログ機能への利用が読み取れず難解…。 -
System.Windows.Forms 名前空間のリファレンス(.NET Frameworkの利用可能なダイアログ)
Microsoftのマニュアル。こちらはそれなりにまとまってる感じ。C#等での表記であってPowerShellとしての説明ではありませんが、それなりに実験すれば挙動はわかるレベルです。
ダイアログを使ってみる
参考サイトを元に、いくつか試してみました。
特に支障なく使え、いい感じ!
ファイル選択ダイアログ
参考サイトのサンプルそのままですが…。
OpenFileDialogクラスに利用方法の記載あり、特にこれといって覚えることもなくシンプル。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
Set-StrictMode -version Latest #.NET Frameworkのダイアログ関連オブジェクトの取り込み Add-Type -assemblyName System.Windows.Forms #ファイル選択ダイアログのオブジェクト取得 $dialog = New-Object System.Windows.Forms.OpenFileDialog #フィルタ条件の設定 $dialog.Filter = 'Text Files|*.txt|Csv Files|*.csv|All Files|*.*' #デフォルト選択ディレクトリの設定 $dialog.InitialDirectory = '.' if ($dialog.ShowDialog() -eq "OK") { "選択したファイル`n`"" + $dialog.FileName + '"' } else { '選択なし。' } |
ディレクトリ選択ダイアログ
FolderBrowserDialogクラスに利用方法の記載あり、こちらもシンプルな作り。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
Set-StrictMode -version Latest #.NET Frameworkのダイアログ関連オブジェクトの取り込み Add-Type -AssemblyName System.Windows.Forms; #ディレクトリ選択ダイアログのオブジェクト取得 $dialog = New-Object System.Windows.Forms.FolderBrowserDialog; #ダイアログへ説明を追加 $dialog.Description = "テストディレクトリを選択"; #新規ディレクトリ作成のボタンを非表示 $dialog.ShowNewFolderButton = $false; #デフォルト選択ディレクトリの設定 $dialog.SelectedPath = "C:\"; If($dialog.ShowDialog() -eq "OK"){ $dialog.SelectedPath; }Else{ "選択なし"; } |
メッセージボックス ダイアログ
正しい呼び名はメッセージボックスらしいですが、中身を言い表すならメッセージとボタンによるユーザ入力ダイアログになるんでしょうか。
ユーザの入力結果により処理を分岐することも出来るようです。
MessageBox.Showメソッドのリファレンスに記載あり。
ここからリンクされているSystem.Windows.Forms.MessageBoxButtons、および、System.Windows.Forms.MessageBoxIconが特殊なパラメータの模様。
リファレンスから書式を推測。基本、文字列型で指定すれば良いってことでしょうか?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
Set-StrictMode -version Latest #.NET Frameworkのダイアログ関連オブジェクトの取り込み Add-Type -AssemblyName System.Windows.Forms; #ダイアログに表示する説明 $text = "入力のテスト"; #ダイアログのタイトル $caption = "ユーザ入力テスト"; #ボタンの形状 $buttonsType = "YesNoCancel"; #アイコンの種類 $iconType = "Question"; $result = [System.Windows.Forms.MessageBox]::Show($text, $caption, $buttonsType, $iconType); $result; |
せっかくなので、ボタンの形状とアイコンの種類についてもう少し遊んでみました。
メッセージボックス ダイアログのボタン形状を試す
サンプルソースの13行目で指定する値を変更した動作確認。
MSDNサイトで定義されている値を使い動作確認が可能です。
- System.Windows.Forms.MessageBoxButtons
- AbortRetryIgnore
- OK
- OKCancel
- RetryCancel
- YesNo
- AbortRetryIgnore
メッセージボックス ダイアログのアイコンの種類を試す
サンプルソースの16行目で指定する値を変更した動作確認。
ボタン形状と同様にMSDNサイトで定義されている値を使い動作確認が可能です。
しかもアイコンの種類に応じて、いつものメッセージダイアログと同じく効果音が鳴ります!
- System.Windows.Forms.MessageBoxIcon
- Information
- Warning
- Error
- Information
レスポンシブ広告
関連記事
-
PowerShellの開発速度の改善を考える
私はどちらかというとWindowよりもUNIXの方がなれてますが、仕事ではWin …
-
PowerShellスクリプトを動かすための設定
PowerShellは最近のWindowsで追加されたスクリプト言語で、今のWi …
-
MiniDV形式ビデオテープを撮影日時つきファイルでバックアップ[PowerShell版]
去年からちょいちょいPowerShellを使い出しました。 勉強の一環で、ちょっ …
-
.NETダイアログが表示されずスクリプトが止まる問題の対策
PowerShell入門中です。 先日のこちらの記事(PowerShellでダイ …