PowerShell でファイル選択ダイアログを利用する

2020/04/18

意外と使い勝手が良さそうなのがこの方法だと思う。

画像ファイルを1つ選択選択させる

[void][System.Reflection.Assembly]::LoadWithPartialName("System.windows.forms")

$dialog = New-Object System.Windows.Forms.OpenFileDialog
$dialog.Filter = "画像ファイル(*.PNG;*.JPG;*.GIF)|*.PNG;*.JPG;*.JPEG;*.GIF"
$dialog.InitialDirectory = "C:\"
$dialog.Title = "ファイルを選択してください"
# 複数選択を許可したい時は Multiselect を設定する
$dialog.Multiselect = $true

# ダイアログを表示
if($dialog.ShowDialog() -eq [System.Windows.Forms.DialogResult]::OK){
    # 複数選択を許可している時は $dialog.FileNames を利用する
    Write-Output ($dialog.FileName + " が選択されました。")
}

CSV ファイルを選択する

こういうパターンあるかな?と思う。
普段はタスクスケジューラーでキックしているけど、失敗したら手動で動かすとか。

Param(
  [Parameter()]
  [String] $FilePath
)

# $FilePath が設定されていない、又はファイルが存在しない
if([string]::IsNullOrEmpty($FilePath) -Or (Test-Path -LiteralPath $FilePath -PathType Leaf) -eq $false) {
    [void][System.Reflection.Assembly]::LoadWithPartialName("System.windows.forms")    
    $dialog = New-Object System.Windows.Forms.OpenFileDialog
    $dialog.Filter = "CSV ファイル(*.CSV)|*.CSV"
    $dialog.InitialDirectory = "C:\"
    $dialog.Title = "ファイルを選択してください"

    # キャンセルを押された時は処理を止める
    if($dialog.ShowDialog() -eq [System.Windows.Forms.DialogResult]::NG){
        exit 1
    }

    # 選択したファイルパスを $FilePath に設定
    $FilePath = $dialog.FileName
}

# ここから下で $FilePath をいい感じで処理する
Write-Output $FilePath