Lister les fichiers et leur chemin complet sur un lecteur Windows

Dans un précédent article, je vous ai expliqué comment obtenir la liste des lecteurs réseaux et locaux connectés à votre Windows. Cette introduction était nécessaire pour avoir l’ensemble des lettres des lecteurs. Aujourd’hui, nous allons nous servir de cette fameuse lettre, car il s’agit du point de départ de notre recherche.

En effet, nous allons voir comment lister l’ensemble des fichiers sur un lecteur mappé en réseau et sur un disque dur ou SSD sous Windows qui serait connecté en local. La commande PowerShell ne fait pas de différence entre un disque distant ou local tant que vous avez la lettre qui l’identifie. Ce qui pourrait par contre changer, c’est la durée pour avoir cette liste, car forcément, un lecteur réseau sera notamment dépendant de la qualité de votre connexion entre vous et lui.

Bon vous êtes venus ici pour ça alors il est temps de directement passer aux choses intéressantes et je vais tout de suite vous présenter la commande PowerShell. Cette commande vous permet de générer la liste de l’ensemble des fichiers d’un lecteur et leur chemin complet à partir de la racine.

 Get-ChildItem -Path "O:\" -Recurse -File | Select-Object FullName

Je l’ai lancé sur un lecteur réseau distant et vous obtenez alors un résultat qui devrait ressembler à ceci :

FullName
--------
O:\202 - BON D'ACHAT.pdf
O:\presta FACT1502194 du 01052025.pdf
O:\ADHESION 2025.pdf
O:\arcelor-T.pdf
O:\Associations bénéficiaires subventions 2025.pdf
O:\Associations non bénéficiaires subventions 2025.pdf
O:\ATTESTATION-DOC280223.pdf
O:\Bon de commande UGAP.pdf
O:\dossier\facture.pdf

Maintenant que nous avons vu le résultat et entrevu le potentiel, décortiquons ensemble cette commande pour bien comprendre comment elle fonctionne. Que fait chaque partie de la commande ?

  • Get-ChildItem: C’est la commande de base de PowerShell pour naviguer et lister le contenu des éléments, un peu comme les commandes dir sous Windows ou ls sous Linux. C’est notre explorateur en ligne de commande.
  • -Path « O:\ »: Ce paramètre, -Path, spécifie le point de départ de notre exploration. Ici, « O:\ » indique que nous ciblons la racine du lecteur O. Vous remplaceriez bien sûr « O » par la lettre du lecteur qui vous intéresse.
  • -Recurse: C’est l’option magique qui demande à Get-ChildItem de ne pas s’arrêter au premier niveau, mais de descendre dans tous les sous-dossiers, et les sous-sous-dossiers, et ainsi de suite. C’est grâce à lui que nous obtenons une liste exhaustive.
  • -File: Par défaut, Get-ChildItem liste aussi bien les fichiers que les dossiers. Avec -File, nous lui précisons que seuls les fichiers nous intéressent cette fois-ci. Pratique pour ne pas polluer notre liste avec les répertoires.
  • | Select-Object FullName: Le symbole | (appelé « pipe » ou « pipeline ») est crucial. Il prend le résultat de la commande précédente (Get-ChildItem … -File) et l’envoie à la commande suivante. Ici, Select-Object FullName se charge de ne conserver et d’afficher que la propriété FullName de chaque fichier, c’est-à-dire son chemin complet.

Comme vous pouvez le constater, la commande ne se contente pas de regarder à la racine du lecteur. Elle plonge profondément dans chaque dossier et sous-dossier pour dénicher tous les fichiers, quelle que soit leur cachette. C’est la magie de l’exploration récursive : aucun recoin n’est oublié, et ce, peu importe la profondeur de l’arborescence de vos dossiers.

Au-delà d’une simple liste ponctuelle, la véritable force de cette approche réside dans sa capacité à être automatisée. Imaginez intégrer cette commande dans des scripts PowerShell pour effectuer des inventaires réguliers, des audits de sécurité, ou simplement pour garder une trace de l’évolution du contenu d’un lecteur. Plus besoin de clics manuels répétitifs !

Et ce n’est pas tout ! Une fois que vous avez cette liste brute, PowerShell vous ouvre les portes d’un traitement bien plus fin. Vous pourriez vouloir filtrer ces fichiers par nom, par date de modification, par extension (par exemple, ne lister que les fichiers .docx ou .jpg), ou encore exporter cette liste dans un fichier CSV pour l’analyser dans Excel. Les possibilités sont vastes pour affiner votre recherche et obtenir exactement l’information dont vous avez besoin.

Vous maîtrisez la base de la commande Get-ChildItem et vous savez comment obtenir la liste complète des fichiers, vous vous dites peut-être : « C’est bien, mais si j’ai des milliers de fichiers, comment je m’y retrouve pour cibler uniquement ce qui m’intéresse ? ». Excellente question ! C’est là que la puissance des filtres entre en jeu. PowerShell nous offre des moyens très élégants pour affiner nos recherches.

Plongeons-nous d’abord dans le filtrage par date. C’est un besoin très courant : retrouver les fichiers modifiés récemment, ou au contraire, ceux qui n’ont pas été touchés depuis une éternité. Pour cela, nous allons enrichir notre commande avec Where-Object, qui permet de sélectionner des objets en fonction de leurs propriétés.

Imaginez que vous souhaitiez lister tous les fichiers sur votre lecteur « O: » qui ont été modifiés au cours des 30 derniers jours. Voici comment vous pourriez adapter la commande :

Get-ChildItem -Path "O:\" -Recurse -File | Where-Object {$_.LastWriteTime -gt (Get-Date).AddDays(-30)} | Select-Object FullName

Analysons ce qui a changé :

  • Where-Object {$_.LastWriteTime -gt (Get-Date).AddDays(-30)} : C’est ici que la magie opère.
    • Where-Object (ou son alias ?) filtre les éléments qui lui sont envoyés via le pipeline.
    • $_ représente l’objet courant qui est traité (dans notre cas, chaque fichier trouvé par Get-ChildItem).
    • .LastWriteTime est une propriété de l’objet fichier qui stocke la date et l’heure de sa dernière modification.
    • -gt est un opérateur de comparaison qui signifie « supérieur à » (Greater Than).
    • (Get-Date).AddDays(-30) : Get-Date récupère la date et l’heure actuelles. En lui ajoutant .AddDays(-30), on obtient la date d’il y a 30 jours.
    • Donc, globalement, on ne garde que les fichiers dont la date de dernière modification est plus récente que la date d’il y a 30 jours.

Vous pourriez tout aussi bien utiliser CreationTime pour la date de création, ou -lt (Less Than, inférieur à) pour trouver des fichiers plus anciens. Les combinaisons sont nombreuses pour cibler précisément la période qui vous intéresse !

Passons à un autre type de filtre extrêmement pratique : le filtrage par type de fichier, ou plus précisément, par extension. Si vous ne voulez lister que les documents PDF, les images JPEG, ou les feuilles de calcul Excel, c’est tout à fait possible et même très simple.

La commande Get-ChildItem possède un paramètre -Filter qui est optimisé pour ce genre de tâche. Voyons comment l’utiliser pour ne lister que les fichiers PDF :

Get-ChildItem -Path "O:\" -Recurse -File -Filter "*.pdf" | Select-Object FullName

La nouveauté ici est :

  • -Filter « *.pdf » : Ce paramètre indique à Get-ChildItem de ne retourner que les éléments correspondant au motif fourni. L’astérisque * est ce qu’on appelle un caractère générique (wildcard) et il signifie « n’importe quelle suite de caractères ». Donc, *.pdf va correspondre à tous les noms de fichiers qui se terminent par .pdf.

Et voilà le travail ! Vous voulez tous vos documents Word ? Utilisez *.docx. Toutes vos images PNG ? *.png. C’est aussi simple que ça. Cette méthode est souvent plus rapide que d’utiliser Where-Object pour filtrer sur l’extension, car le filtrage se fait plus tôt dans le processus.

Ces capacités de filtrage, que ce soit par date ou par type, transforment une simple commande de listage en un véritable outil d’investigation et de gestion de fichiers.

Laisser un commentaire