public/DsForms.ps1
function Get-DsFileOpenDialog { <# .SYNOPSIS .DESCRIPTION .PARAMETER InitialDirectory .PARAMETER Filter Optional. File type filter, using paired format as follows: "Text Files (*.txt)|*.txt" .PARAMETER Title Optional. Dialog form caption. Default is "Select Files" .PARAMETER MultiSelect Optional. Allows selecting multiple files. Default is single selection only. .EXAMPLE $files = Get-DsFileOpenDialog -InitialDirectory "c:\projects" -Filter "Python Files (*.py)|*.py" -Title "Select Files" -MultiSelect #> [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 } 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 } function Get-DsFolderDialog { <# .SYNOPSIS Display a Folder selection dialog .DESCRIPTION Display a folder selection dialog to choose a target folder .PARAMETER InitialDirectory Optional. If empty, will default to the current default working directory .EXAMPLE $folder = Get-DsFolderDialog -InitialDirectory "c:\projects" #> param ( [parameter()][string]$InitialDirectory = "" ) [void] [System.Reflection.Assembly]::LoadWithPartialName('System.Windows.Forms') $FolderBrowserDialog = New-Object System.Windows.Forms.FolderBrowserDialog $FolderBrowserDialog.RootFolder = 'MyComputer' if (![string]::IsNullOrWhiteSpace($initialDirectory)) { $FolderBrowserDialog.SelectedPath = $initialDirectory } Write-Host -ForegroundColor Yellow "* * * W A R N I N G : Dialog form may be hidden behind another window * * *" Write-Host [void] $FolderBrowserDialog.ShowDialog() $selected = $FolderBrowserDialog.SelectedPath $FolderBrowserDialog.Dispose() return $selected } function Invoke-DsMsgBox { [CmdletBinding()] param ( [parameter(Mandatory)][string]$Message, [parameter(Mandatory)][string]$Title, [parameter()][string][ValidateSet('Ok','OkCancel','YesNo','YesNoCancel')]$ButtonType = 'Ok', [parameter()][string] [ValidateSet('Asterisk','Error','Exclamation','Hand','Information','Question','Stop','Warning','None')]$Icon = 'Information' ) Add-Type -AssemblyName PresentationCore, PresentationFramework $result = [System.Windows.MessageBox]::Show($Message, $Title, $ButtonType, $Icon) $result } function Invoke-DsFileSaveDialog { <# .SYNOPSIS Display a file Save or SaveAs dialog .DESCRIPTION Same as the synopsis .PARAMETER InitialDirectory .PARAMETER Filter .PARAMETER Title .EXAMPLE $filepath = Invoke-DsFileSaveDialog #> [CmdletBinding()] param ( [parameter()][string]$InitialDirectory = "", [parameter()][string]$Filter = "All Files (*.*)|*.*", [parameter()][string]$Title = 'Save File' ) #$Filter = 'Documents (*.docx)|*.docx|SpreadSheet (*.xlsx)|*.xlsx' [void] [System.Reflection.Assembly]::LoadWithPartialName('System.Windows.Forms') $FileSaveDialog = New-Object System.Windows.Forms.SaveFileDialog if (![string]::IsNullOrWhiteSpace($InitialDirectory)) { $FileSaveDialog.InitialDirectory = $InitialDirectory } $FileSaveDialog.Filter = $Filter $FileSaveDialog.Title = $Title $FileSaveDialog.CheckPathExists = $true if ($FileSaveDialog.ShowDialog() -eq 'Ok') { $selected = $FileSaveDialog.FileName } $FileSaveDialog.Dispose() return $selected } New-Alias -Name "Show-MessageBox" -Value Invoke-DsMsgBox New-Alias -Name "MsgBox" -Value Invoke-DsMsgBox New-Alias -Name "Invoke-OpenFileDialog" -Value Get-DsFileOpenDialog New-Alias -Name "Invoke-FolderDialog" -Value Invoke-FolderDialog New-Alias -Name "Invoke-SaveFileDialog" -Value Invoke-DsFileSaveDialog |