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.Formsfonctionne 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
Enregistrer un commentaire