colinardo
Goto Top

Powershell - Kombiniertes CMDLet für die Anzeige von Standard-Dateiauswahldialogen

Für alle die es in Ihrem Projekt gebrauchen können oder es noch nicht in Ihrer Funktionsbibliothek haben, eine Funktion welche die Anzeige der Standard-Dateisystemdialoge in einer einzigen Prozedur kombiniert mit dynamischen Parametern je nach Dialogtyp.
back-to-topFolgende Dialoge lassen sich mit der Funktion anzeigen:
  • FileOpenDialog (Datei öffnen Dialog)
  • SaveFileDialog (Datei speichern Dialog)
  • FolderBrowserDialog (Ordnerauswahl Dialog)

back-to-topPowershell-CMDLet: Show-FileSystemDialog / min. PS Version 3.0

function Show-FileSystemDialog{
    <#
    .SYNOPSIS
    Show Default Filesystem Dialogs
    .DESCRIPTION
    This Function combines all three Filesystem Dialogs (FolderBrowserDialog,FileOpenDialog,FileSaveDialog) in one function
    .EXAMPLE
    Show-FileSystemDialog -OpenFileDialog -InitialDirectory "C:\" -MultiSelect  
    .EXAMPLE
    Show-FileSystemDialog -SaveFileDialog -Filter "CSV-Files|*.csv"  
    .EXAMPLE
    Show-FileSystemDialog -FolderBrowserDialog -RootFolder Desktop
    .PARAMETER DialogType
    The type of the Dialog which is one of the following Constants: FolderBrowserDialog,FileOpenDialog,FileSaveDialog
    .RETURNVALUE
        - Returns absolute File- or Folder-Paths as [String] or [string[]] in case multiple files are selected
        - Returns $False if user selects no file or path
    .Notes
    ####### Dynamic Parameters #########

    PARAMETER -InitialDirectory
        The directory the dialog displays when opening (available for OpenFileDialog,SaveFileDialog)

    PARAMETER -MultiSelect
        Switch which enables selecting multiple files at once (available only for OpenFileDialog)

    PARAMETER -FileFilter
        The file filter which is applied to the dialog (available for OpenFileDialog,SaveFileDialog)
        It must have the following format "[Filterdescription] | [extensions separated by ';']"  
            - example : "Images | *.png;*.jpg;*.bmp"  

    PARAMETER -RootFolder
        The root of the FolderBrowser-Tree (available only for FolderBrowserDialog)
    .LINK
        created by @colinardo @Administrator.de / https://administrator.de/user/colinardo/
    #>
    [CmdletBinding()]
    param(
        [parameter(mandatory=$true)][ValidateSet("OpenFileDialog","SaveFileDialog","FolderBrowserDialog")][string]$DialogType  
    )
    DynamicParam {
        $attrCollection = new-object System.Collections.ObjectModel.Collection[System.Attribute]
        $paramDic = new-object System.Management.Automation.RuntimeDefinedParameterDictionary
        $attr = new-object System.Management.Automation.ParameterAttribute
        switch($DialogType){
            "OpenFileDialog"{  
                $attr.Mandatory = $false
                $attrCollection.Add($attr)
                $dynParam1 = new-object System.Management.Automation.RuntimeDefinedParameter("MultiSelect", [switch], $attrCollection)  
                $dynParam2 = new-object System.Management.Automation.RuntimeDefinedParameter("InitialDirectory", [string], $attrCollection)  
                $dynParam3 = new-object System.Management.Automation.RuntimeDefinedParameter("FileFilter", [string], $attrCollection)  
                $paramDic.Add("MultiSelect", $dynParam1)  
                $paramDic.Add("InitialDirectory", $dynParam2)  
                $paramDic.Add("FileFilter", $dynParam3)  
                return $paramDic
            }
            "SaveFileDialog"{  
                $attr.Mandatory = $false
                $attrCollection.Add($attr)
                $dynParam1 = new-object System.Management.Automation.RuntimeDefinedParameter("InitialDirectory", [string], $attrCollection)  
                $dynParam2 = new-object System.Management.Automation.RuntimeDefinedParameter("FileFilter", [string], $attrCollection)  
                $paramDic.Add("InitialDirectory", $dynParam1)  
                $paramDic.Add("FileFilter", $dynParam2)  
                return $paramDic
            }
            "FolderBrowserDialog"{  
                $attr.Mandatory = $false
                $attrCollection.Add($attr)
                $dynParam1 = new-object System.Management.Automation.RuntimeDefinedParameter("RootFolder", [System.Environment+SpecialFolder], $attrCollection)  
                $paramDic.Add("RootFolder", $dynParam1)  
                return $paramDic
            }
        }
    }
    begin{
        [void][System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")  
        if ($PSBoundParameters.FileFilter -and $PSBoundParameters.FileFilter -eq ""){$PSBoundParameters.FileFilter = "Alle Dateien|*.*"}  
        if ($PSBoundParameters.RootFolder -and $PSBoundParameters.RootFolder -eq $null){$PSBoundParameters.RootFolder = [System.Environment+SpecialFolder]::Desktop}
    }
    process{
        switch ($DialogType){
            "OpenFileDialog"{  
                $dlg = New-Object System.Windows.Forms.OpenFileDialog
                if ($PSBoundParameters.MultiSelect.IsPresent){$dlg.Multiselect = $true}
                if($PSBoundParameters.InitialDirectory){$dlg.InitialDirectory = $PSBoundParameters.InitialDirectory}
                $dlg.Filter = $PSBoundParameters.FileFilter
                if($dlg.ShowDialog() -eq 'OK'){  
                    return $dlg.FileNames
                }else{return $false}
            }
            "SaveFileDialog"{  
                $dlg = New-Object System.Windows.Forms.SaveFileDialog
                if($PSBoundParameters.InitialDirectory){$dlg.InitialDirectory = $PSBoundParameters.InitialDirectory}
                $dlg.Filter = $PSBoundParameters.FileFilter
                if($dlg.ShowDialog() -eq 'OK'){  
                    return $dlg.FileName
                }else{return $false}
            }
            "FolderBrowserDialog"{  
                $dlg = New-Object System.Windows.Forms.FolderBrowserDialog
                $dlg.ShowNewFolderButton = $true
                $dlg.RootFolder = $PSBoundParameters.RootFolder
                if($dlg.ShowDialog() -eq 'OK'){  
                    return $dlg.SelectedPath
                }else{return $false}
            }
        }
    }
}
back-to-topAnwendungsbeispiele
back-to-topDatei öffnen Dialog mit Filter, Angabe des Startpfades und Mehrfachauswahl
Show-FileSystemDialog -DialogType FileOpenDialog -FileFilter "Textdateien|*.txt" -InitialDirectory "C:\Ordner" -MultiSelect
back-to-topDatei speichern Dialog mit multiplen Filtern und Startpfad
Show-FileSystemDialog -DialogType SaveFileDialog -FileFilter "Excel-Files|*.xlsx;*.xlsm;*.xlst" -InitialDirectory "C:\Ordner"
back-to-topOrdner-Browser Dialog mit Angabe des RootOrdners
Show-FileSystemDialog -DialogType FolderBrowserDialog -RootFolder MyComputer

Viel Spaß damit
Grüße @colinardo

Content-Key: 268382

Url: https://administrator.de/contentid/268382

Printed on: April 20, 2024 at 00:04 o'clock