Powershell - Afficher un navigateur de fichier dans votre script powershell

📌 Introduction

Lorsqu'on développe des scripts PowerShell destinés à des utilisateurs non-techniques, il est souvent préférable de leur proposer une boîte de dialogue graphique pour sélectionner un fichier ou un dossier, plutôt que de leur demander de saisir manuellement un chemin d'accès. C'est exactement ce que permettent les fonctions Show-FileBrowser et Show-FolderBrowser, basées sur la bibliothèque System.Windows.Forms de .NET.

Ces fonctions sont simples, légères, et ne nécessitent aucune dépendance externe. Elles fonctionnent sur Windows PowerShell 5.1 ainsi que sur PowerShell 7+ sous Windows.

⚠️ Note 2026 : L'éditeur PowerShell ISE est désormais déprécié par Microsoft. Il est recommandé d'utiliser Visual Studio Code avec l'extension PowerShell pour développer et tester vos scripts.

📂 Partie 1 — Sélectionner un fichier : Show-FileBrowser

La fonction Show-FileBrowser ouvre une boîte de dialogue standard de Windows permettant à l'utilisateur de naviguer dans l'arborescence et de sélectionner un fichier. Elle retourne le chemin complet du fichier sélectionné.

🔧 Script (version modernisée)

# Modern syntax — replaces the deprecated LoadWithPartialName
Add-Type -AssemblyName System.Windows.Forms

Function Show-FileBrowser {
    param (
        [string]$initialDirectory = "C:\",
        [string]$filter = "Text files (*.txt)|*.txt|All files (*.*)|*.*"
    )

    $dialog = New-Object System.Windows.Forms.OpenFileDialog
    $dialog.InitialDirectory = $initialDirectory
    $dialog.Filter           = $filter
    $dialog.Title            = "Select a file"

    $result = $dialog.ShowDialog()

    if ($result -eq [System.Windows.Forms.DialogResult]::OK) {
        return $dialog.FileName
    } else {
        return $null
    }
}

# ── Usage example ─────────────────────────────────────────────────────────────
$selectedFile = Show-FileBrowser -initialDirectory "C:\Temp"

if ($selectedFile) {
    Write-Output "Selected file: $selectedFile"
} else {
    Write-Warning "No file selected. Operation cancelled."
}

🎛️ Le paramètre Filter — comment le personnaliser

Le paramètre Filter contrôle les types de fichiers affichés dans la boîte de dialogue. Sa syntaxe suit le format : Description|*.extension. On peut chaîner plusieurs filtres avec le caractère |.

Filtre Effet
Text files (*.txt)|*.txt Affiche uniquement les fichiers .txt
All files (*.*)|*.* Affiche tous les fichiers sans restriction
CSV files (*.csv)|*.csv Affiche uniquement les fichiers .csv
Log files (*.log)|*.log Affiche uniquement les fichiers .log

📁 Partie 2 — Sélectionner un dossier : Show-FolderBrowser

La fonction Show-FolderBrowser ouvre une boîte de dialogue permettant à l'utilisateur de sélectionner un dossier entier (et non un fichier). Elle retourne le chemin complet du dossier sélectionné, avec un \ final, ou $null si l'utilisateur annule.

# Modern syntax — replaces the deprecated LoadWithPartialName
Add-Type -AssemblyName System.Windows.Forms

Function Show-FolderBrowser {
    param (
        [string]$initialDirectory = ""
    )

    $dialog = New-Object System.Windows.Forms.FolderBrowserDialog
    $dialog.Description = "Select a folder"
    $dialog.RootFolder  = "MyComputer"

    if ($initialDirectory) {
        $dialog.SelectedPath = $initialDirectory
    }

    # Force dialog to appear on top of all other windows
    $owner = New-Object System.Windows.Forms.Form -Property @{ TopMost = $true }
    $result = $dialog.ShowDialog($owner)

    if ($result -eq [System.Windows.Forms.DialogResult]::OK -and $dialog.SelectedPath -ne '') {
        return $dialog.SelectedPath + '\'
    } else {
        return $null
    }
}

# ── Usage example ─────────────────────────────────────────────────────────────
$selectedFolder = Show-FolderBrowser -initialDirectory "C:\Temp"

if ($selectedFolder) {
    Write-Output "Selected folder: $selectedFolder"
} else {
    Write-Warning "No folder selected. Operation cancelled."
}

🔗 Partie 3 — Exemple combiné : sélectionner un fichier et un dossier de destination

Voici un exemple concret qui combine les deux fonctions pour sélectionner un fichier source et un dossier de destination, puis copier le fichier vers ce dossier :

Add-Type -AssemblyName System.Windows.Forms

# Step 1 — Select the source file
$sourceFile = Show-FileBrowser -initialDirectory "C:\Temp" -filter "Text files (*.txt)|*.txt|All files (*.*)|*.*"

if (-not $sourceFile) {
    Write-Warning "No file selected. Script aborted."
    exit
}

# Step 2 — Select the destination folder
$destFolder = Show-FolderBrowser -initialDirectory "C:\"

if (-not $destFolder) {
    Write-Warning "No destination folder selected. Script aborted."
    exit
}

# Step 3 — Copy the file
Copy-Item -Path $sourceFile -Destination $destFolder -Force
Write-Output "File successfully copied to: $destFolder"

⚠️ Points d'attention

  • Ces fonctions nécessitent un environnement graphique Windows (session bureau). Elles ne fonctionnent pas en contexte headless (Azure Run Command, tâches planifiées sans session, SSH pur).
  • Sur PowerShell 7+, Add-Type -AssemblyName System.Windows.Forms fonctionne uniquement sous Windows. Sous Linux/macOS, cette bibliothèque n'est pas disponible.
  • Préférer Add-Type -AssemblyName System.Windows.Forms à l'ancienne syntaxe [System.Reflection.Assembly]::LoadWithPartialName(), qui est officiellement marquée comme obsolète.
  • Toujours tester la valeur de retour ($null) pour gérer proprement le cas où l'utilisateur clique sur Annuler.

✅ Conclusion

Les fonctions Show-FileBrowser et Show-FolderBrowser restent en 2026 des outils pratiques et efficaces pour améliorer l'expérience utilisateur de vos scripts PowerShell locaux. En les combinant avec vos propres traitements (copie, analyse, import CSV...), vous obtenez des scripts interactifs robustes, sans avoir recours à des modules tiers.

La seule mise à jour nécessaire par rapport à la version originale est le remplacement de LoadWithPartialName par Add-Type -AssemblyName, plus moderne et officiellement supporté.


💬 Vous utilisez ces fonctions dans vos scripts ? Partagez vos cas d'usage en commentaires !

Commentaires

Posts les plus consultés de ce blog

MDT - Guide de résolution des problèmes courants de configuration lors du déploiement d'un système d'exploitation Microsoft

PowerShell - Active Directory - Désactiver automatiquement les comptes expirés

Workspace One - Utilisation de réseaux Wi-Fi WPA3 avec Workspace ONE UEM