こんにちは、NK University の松田です。

今回は、Powershellでファイル選択ダイアログを使う方法をご紹介します。

Powershellを実行する際、読み込むファイルのパスが毎回異なる場合などに有効な手段です。

基本的には以下のような形になります。

PowerShell
Add-Type -AssemblyName System.Windows.Forms

$dialog = New-Object System.Windows.Forms.OpenFileDialog
$dialog.InitialDirectory = "Path\To\Folder" #初期フォルダ
$dialog.Filter = "All files (*.*)|*.*" # フィルタ設定


if ($dialog.ShowDialog() -eq [System.Windows.Forms.DialogResult]::OK) {
    $filePath = $dialog.FileName
    Write-Output "選択されたファイル: $filePath"
}

$dialog.Dispose()

ただし、VS Codeを使用されている方はうまく動作しないので注意してください。

STAスレッドで実行する必要があり、VS Code ではMTAスレッドであるため不具合を起こすようです。

実行の際はPowershell ISE 等で実行するようにしてください。

よく使うオプション

InitialDirectory – 初期フォルダの設定

PowerShell
$dialog.InitialDirectory = "Path/To/Dir"

でダイアログを開いた際の初期フォルダを指定できる。
パスが存在しなければ無視される。

Filter – 拡張子フィルタ

書式としては

PowerShell
表示名1|フィルタ1|表示名2|フィルタ2

のように記載します。
複数フィルタを指定するにはセミコロンで区切って*.jpg;*.pngのようにします。

Multiselect – 複数ファイルの選択

ファイルを複数選択できるようにするには

PowerShell
$dialog.Multiselect = $true

と設定します。また、選択したファイル名は配列で取得することができます。

PowerShell
$dialog.FileNames