Filer Manager

Un outil PowerShell mono-fichier pour les serveurs de fichiers Windows. Il analyse des dossiers et rapporte :

  • Tailles des dossiers — arborescence visuelle et repliable avec barres de taille (arbre GUI + HTML).
  • Chemins trop longs — fichiers/dossiers dont le chemin complet atteint ou dépasse un seuil (260 par défaut, le MAX_PATH de Windows).
  • Permissions NTFS — propriétaire + ACL (identité, droits, allow/deny, hérité) par dossier, jusqu'à une profondeur configurable. Dans l'interface, cliquez sur n'importe quel en-tête de colonne (Dossier / Identité / Droits / Type / Hérité) pour une fenêtre de type Excel : tri A→Z / Z→A et sélection des valeurs à conserver. Les filtres se combinent entre les colonnes ; Effacer les filtres réinitialise le tout. Deux cases à cocher permettent en outre de masquer les permissions héritées et de masquer les comptes/groupes système (NT AUTHORITY\SYSTEM, BUILTIN\Administrators, CREATOR OWNER, NT SERVICE\*…) afin de ne garder que les identités métier. La détection des comptes système se fait par SID (indépendante de la langue), avec un repli sur le nom. Les mêmes filtres sont disponibles dans le rapport HTML (cases à cocher) et en mode sans interface (-HideSystemPrincipals).
  • Exclusion de dossiers — ignore certains dossiers de toute l'analyse (tailles, chemins trop longs et permissions). Par défaut, les corbeilles et dossiers système courants sont exclus : #recycle et @eaDir (NAS Synology) et $RECYCLE.BIN (corbeille Windows). La liste est modifiable (jokers */? acceptés, insensible à la casse) et il est possible d'exclure en plus les dossiers masqués. Disponible dans l'interface (champ Exclure dossiers + case Dossiers masqués) et en mode sans interface (-ExcludeFolder, -ExcludeHidden).
  • Sélection de dossiers réseau — le sélecteur Ajouter… liste les disques locaux et tous les lecteurs réseau connus avec leur cible UNC, parcourt un serveur partage par partage (Ajouter un serveur…), accepte un chemin \\serveur\partage collé directement et sait ouvrir une connexion authentifiée (identifiants, lettre de lecteur facultative). Plusieurs dossiers se cochent en une seule fois. Les chemins réseau sont convertis en UNC (case cochée par défaut) : un lecteur mappé appartient au jeton de session qui l'a créé, il est donc invisible depuis une exécution en mode Administrateur, alors que l'UNC reste valable partout — la même conversion est appliquée en mode sans interface, y compris pour un -Path du type Z:\dossier. Toute énumération réseau est bornée par un délai : un partage hors ligne ne fige plus la fenêtre et se signale dans la barre d'état.
  • Octroi automatique en cas de refus (optionnel) — lorsqu'un élément ne peut pas être lu, l'outil s'approprie la propriété pour Administrators et accorde le FullControl à BUILTIN\Administrators afin que l'analyse puisse se terminer. Chaque modification est consignée dans l'onglet/la section de rapport Accès accordé, et par défaut chacune est annulée après l'analyse (propriétaire + ACL d'origine restaurés là où ils ont pu être lus au préalable). Nécessite une exécution en mode élevé.
  • Renommage par lot (onglet Renommer) — renomme en série les fichiers et dossiers d'un dossier choisi avec des règles avancées : rechercher/remplacer littéral (avec option Ignorer la casse), expression régulière (.NET) avec groupes de capture ($1, ${nom}), transformation de casse (MAJUSCULES / minuscules / Première Lettre Des Mots / première lettre), ajout de préfixe/suffixe et numérotation séquentielle (jeton {n}, début / pas / nombre de chiffres réglables). Une grille d'aperçu affiche en direct ancien nom → nouveau nom avec un état par ligne et détecte les conflits (doublons ou nom déjà existant), qui sont ignorés. Options Inclure les sous-dossiers, Fichiers / Dossiers et exclusion des dossiers masqués ; l'extension des fichiers peut être préservée. Cochez les lignes à appliquer puis Renommer la sélection (les dossiers sont renommés après leur contenu pour rester cohérents).

Tout est exportable vers un rapport HTML autonome (aucune ressource externe — fonctionne hors ligne, facile à envoyer par e-mail ou à archiver) et/ou vers des fichiers CSV (un fichier par catégorie, prêt pour Excel / un tableur). Les deux formats peuvent être générés en même temps : l'interface comme le mode sans interface produisent le HTML et les CSV en une seule opération. Les rapports peuvent devenir volumineux, vous pouvez donc n'exporter que les catégories nécessaires — une, plusieurs ou toutes — aussi bien dans l'interface (sélecteur à cases sur Exporter…) qu'en mode sans interface (-Category).

Aucune installation ni dépendance. Fonctionne sur Windows PowerShell 5.1 et PowerShell 7+.

Lancer l'interface graphique

Double-cliquez sur Run-FilerManager.cmd (il se lance avec -ExecutionPolicy Bypass pour cette exécution uniquement), ou depuis une console :

pwsh -STA -File .\filer-manager.ps1

Dans la fenêtre : Ajouter… un ou plusieurs dossiers — locaux, sur un lecteur réseau mappé ou sur un chemin UNC — ajustez Longueur max / Profondeur des permissions / Inclure les fichiers dans l'arborescence, précisez les dossiers à ignorer dans Exclure dossiers (par défaut #recycle; @eaDir; $RECYCLE.BIN, séparés par ;) et cochez au besoin Dossiers masqués, cochez éventuellement Accorder l'accès Administrators aux éléments refusés (et Annuler les modifications après l'analyse), cliquez sur Analyser, puis Exporter… — la boîte de dialogue d'export vous laisse cocher les catégories (Tailles des dossiers, Chemins trop longs, Permissions, Accès accordé, Erreurs) à inclure ainsi que les formats à générer : HTML (rapport unique) et/ou CSV (un fichier par catégorie). Si les deux formats sont cochés, choisissez un nom de base et l'outil écrit <base>.html plus <base>-tree.csv, <base>-permissions.csv, etc. en une seule fois ; toutes les catégories sont sélectionnées par défaut, HTML coché et CSV décoché.

Pour renommer des fichiers ou des dossiers, ouvrez l'onglet Renommer : choisissez un dossier (Parcourir…), cliquez sur Lister, réglez les règles (rechercher/remplacer, regex, casse, préfixe/suffixe, numérotation), vérifiez l'aperçu, puis Renommer la sélection.

L'octroi automatique n'agit que sur les éléments refusés, un élément à la fois. Exécutez Filer Manager en tant qu'administrateur pour qu'il fonctionne — il vous avertit si vous n'êtes pas en mode élevé.

L'analyse s'exécute sur un thread d'arrière-plan, la fenêtre reste donc réactive sur les grosses arborescences.

Lancer sans interface (pour le Planificateur de tâches / cron)

.\filer-manager.ps1 -Path "\\FILER01\Data","D:\Profiles" -Output C:\Reports\filer.html -NoGui

# HTML + CSV en même temps (les CSV sont dérivés du nom de base : filer-tree.csv, filer-permissions.csv, ...)
.\filer-manager.ps1 -Path "D:\Shares" -Output C:\Reports\filer.html -CsvOutput C:\Reports\filer.csv -NoGui

Paramètres

Paramètre Défaut Description
-Path Un ou plusieurs dossiers racines à analyser. Chemin local, UNC (\\serveur\partage) ou lecteur réseau mappé (réécrit en UNC si la lettre n'est pas montée dans la session).
-Output Chemin du rapport HTML (mode sans interface).
-CsvOutput Chemin de base des rapports CSV (un fichier par catégorie : base-tree.csv, base-permissions.csv, …). Combinable avec -Output ou utilisable seul.
-MaxPathLength 260 Signale les éléments dont la longueur de chemin complet est ≥ ce nombre de caractères.
-PermissionDepth 1 Niveaux de dossiers sous chaque racine pour lesquels collecter les ACL (0 = racines uniquement).
-IncludeFilesInTree off Liste les fichiers individuels dans l'arborescence des tailles, pas seulement les dossiers.
-ExcludeFolder #recycle, @eaDir, $RECYCLE.BIN Noms de dossiers à exclure de l'analyse (jokers acceptés, insensible à la casse). -ExcludeFolder @() pour ne rien exclure par nom.
-ExcludeHidden off Exclut aussi les dossiers portant l'attribut « masqué ».
-HideInheritedChildPerms off Omet les permissions héritées portées par les dossiers enfants (les racines conservent les leurs).
-HideSystemPrincipals off Masque les ACL des comptes/groupes système bien connus (NT AUTHORITY\SYSTEM, BUILTIN\*, CREATOR OWNER, NT SERVICE\*…). Détection par SID, indépendante de la langue.
-GrantAccess off S'approprie la propriété + accorde le FullControl à Administrators sur les éléments refusés, puis réessaye. Nécessite le mode élevé.
-KeepGrants off Conserve l'accès accordé par -GrantAccess (par défaut : annulé après l'analyse).
-NoGui off Force le mode sans interface (nécessite -Path et au moins un de -Output / -CsvOutput).
-Category All Catégories à inclure dans le rapport — toute combinaison de Tree, LongPaths, Permissions, Grants, Errors (pour garder les gros rapports petits).

N'exporter que les permissions, ou seulement les tailles + chemins trop longs :

.\filer-manager.ps1 -Path "D:\Shares" -Output perms.html -NoGui -Category Permissions
.\filer-manager.ps1 -Path "D:\Shares" -Output sizes.html -NoGui -Category Tree,LongPaths

Planifier un rapport hebdomadaire

$action  = New-ScheduledTaskAction -Execute "pwsh.exe" `
    -Argument '-NoProfile -File "C:\Tools\filer-manager\filer-manager.ps1" -Path "D:\Shares" -Output "C:\Reports\filer.html" -NoGui'
$trigger = New-ScheduledTaskTrigger -Weekly -DaysOfWeek Monday -At 6am
Register-ScheduledTask -TaskName "Filer Report" -Action $action -Trigger $trigger -RunLevel Highest

Notes

  • Exécutez l'outil avec un compte disposant d'un accès en lecture aux dossiers (et SeBackupPrivilege / Administrateur aide à atteindre les ACL et à contourner les refus par dossier). Les éléments qui ne peuvent pas être lus sont listés dans la section Erreurs / accès refusé au lieu de faire échouer l'analyse — ou, avec -GrantAccess (en mode élevé), l'outil s'accorde l'accès et liste les modifications dans Accès accordé.
  • Les chemins réseau sont analysés sous leur forme UNC. Un lecteur mappé (Z:) est réécrit automatiquement vers sa cible (\\serveur\partage) quand la lettre n'existe pas dans le jeton courant — le cas classique d'une exécution en mode Administrateur. Un lecteur créé avec New-PSDrive n'existe que dans la session PowerShell : indiquez son chemin UNC. En tâche planifiée sous un autre compte (ou SYSTEM), les mappages de l'utilisateur n'existent pas du tout : passez toujours un -Path en UNC.
  • Taille d'un dossier = somme des longueurs des fichiers (taille logique), pas la taille sur le disque.
  • Le rapport est un seul fichier .html avec CSS/JS inline — sans risque à envoyer par e-mail ou à conserver comme instantané d'audit.
S
Description
No description provided
Readme
344 KiB
2026-08-21 13:46:58 +02:00
Languages
PowerShell 99.8%
Batchfile 0.2%