意外と使い勝手が良さそうなのがこの方法だと思う。
画像ファイルを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