public/Invoke-DialogFileOpen.ps1

function Invoke-DialogFileOpen {
    <#
    .SYNOPSIS
    Display a file open dialog form
    .DESCRIPTION
    Display a file open dialog form to select one or more files to return the full names.
    .PARAMETER InitialDirectory
    Default folder location
    .PARAMETER Filter
    Optional. File type filter, using paired format as follows:
    Default is "All Files (*.*)|*.*". Format is "Text Files (*.txt)|*.txt"
    .PARAMETER Title
    Optional. Dialog form caption. Default is "Select File"
    .PARAMETER MultiSelect
    Optional. Allows selecting multiple files. Default is single selection only.
    .EXAMPLE
    $files = Invoke-DialogFileOpen -InitialDirectory "c:\projects" -Filter "Python Files (*.py)|*.py" -Title "Select Files" -MultiSelect
    .LINK
    https://github.com/Skatterbrainz/ds-utils/blob/master/docs/Invoke-DialogFileOpen.md
    #>

    [CmdletBinding()]
    param (
        [parameter()][string]$InitialDirectory = "",
        [parameter()][string]$Filter = "All Files (*.*)|*.*",
        [parameter()][string]$Title = 'Select File',
        [parameter()][switch]$MultiSelect
    )
    #$Filter = 'Documents (*.docx)|*.docx|SpreadSheet (*.xlsx)|*.xlsx'
    [void] [System.Reflection.Assembly]::LoadWithPartialName('System.Windows.Forms')
    $OpenFileDialog = New-Object System.Windows.Forms.OpenFileDialog
    if ($initialDirectory) { $OpenFileDialog.initialDirectory = $initialDirectory }
    $OpenFileDialog.Filter = $Filter
    $OpenFileDialog.Title = $Title
    $OpenFileDialog.CheckFileExists = $True
    if ($MultiSelect) {
        $OpenFileDialog.MultiSelect = $True
        if ($Title = "Select File") { $Title = "Select Files" }
    }
    Write-Host -ForegroundColor Yellow "* * * W A R N I N G : Dialog form may be hidden behind another window * * *"
    Write-Host
    [void] $OpenFileDialog.ShowDialog()
    if ($MultiSelect) {
        $selected = @($OpenFileDialog.FileNames)
    } else {
        $selected = $OpenFileDialog.FileName
    }
    $OpenFileDialog.Dispose()
    return $selected
}