public/DsForms.ps1
function Get-DsFileOpenDialog { <# .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 = Get-DsFileOpenDialog -InitialDirectory "c:\projects" -Filter "Python Files (*.py)|*.py" -Title "Select Files" -MultiSelect .LINK https://github.com/Skatterbrainz/ds-utils/blob/master/docs/Get-DsFileOpenDialog.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 } 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" .LINK https://github.com/Skatterbrainz/ds-utils/blob/master/docs/Get-DsFolderDialog.md #> 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 { <# .SYNOPSIS Display Windows message box .DESCRIPTION Display a Windows message box .PARAMETER Message Text to display in the message box .PARAMETER Title Message box caption / title .PARAMETER ButtonType Ok, OkCancel, YesNo, YesNoCancel. Default is Ok .PARAMETER Icon Error, Exclamation, Information, Question, Warning, None. Default is Information .LINK https://github.com/Skatterbrainz/ds-utils/blob/master/docs/Invoke-DsMsgBox.md #> [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 Default directory location .PARAMETER Filter File type filter. Default is "All Files (*.*)|*.*" .PARAMETER Title Dialog caption .EXAMPLE $filepath = Invoke-DsFileSaveDialog .LINK https://github.com/Skatterbrainz/ds-utils/blob/master/docs/Invoke-DsFileSaveDialog.md #> [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 |