02/07/2024

Tester l’existence d’un élément (fichier, dossier, etc.)

I. Présentation

Ce chapitre s'intéresse à un cmdlet à la fois basique et indispensable : "Test-Path" ! Il est fort pratique en PowerShell puisqu'il permet de tester l'existence d'un élément, notamment un fichier ou un dossier.

Nous allons apprendre à manipuler ce cmdlet au travers différents exemples, sachant que c'est un cmdlet qui est fait pour retourner un booléen, c'est-à-dire true (vrai) ou false (faux). Nous verrons qu'il dispose de plusieurs paramètres qui permettront d'aller plus loin qu'une simple vérification.

II. PowerShell : tester l'existence d'un fichier ou d'un dossier

Pour utiliser "Test-Path", nous allons préciser le chemin du dossier ou fichier à tester à la suite du nom de la commande. Par exemple, pour vérifier l'existence du fichier "hosts" sur la machine :

Test-Path "C:\Windows\System32\drivers\etc\hosts"

Si nous voulons utiliser cette commande en respectant les bonnes pratiques, nous devons ajouter le paramètre "-Path" :

Test-Path -Path "C:\Windows\System32\drivers\etc\hosts"

La commande doit retourner "true" puisqu'il s'agit d'un fichier présent nativement sur Windows.

Test-Path

Là où c'est intéressant, c'est d'utiliser "Test-Path" dans une structure conditionnelle (dans un "If-Else", par exemple), pour effectuer une action seulement si le fichier existe. Par exemple, nous pouvons récupérer le contenu du fichier "hosts" seulement s'il existe :

$Fichier = "C:\Windows\System32\drivers\etc\hosts"

If(Test-Path -Path $Fichier)
{
   Get-Content $Fichier
}
Else
{
   Write-Output "Le fichier n'existe pas !"
}

Vous pouvez constater que la condition if ne contient pas réellement de condition. Puisque la commande "Test-Path" retourne directement un booléen, la condition if sera capable d'interpréter la valeur retournée par "Test-Path". Ainsi, le code présent dans le bloc "If" sera exécuté uniquement si "Test-Path" retourne "true".

Si vous souhaitez tester l'existence d'un dossier, il vous suffit de préciser le chemin vers un dossier, plutôt que le chemin vers un fichier.

III. Tester l'existence d'une variable d'environnement

De la même façon, nous pouvons vérifier l'existence d'une variable d'environnement avec "Test-Path". La syntaxe reste la même ! Par exemple, avec la variable "USERPROFILE" :

Test-Path -Path env:\USERPROFILE

De la même façon, nous pouvons tester l'existence d'un chemin qui cible le Registre Windows.

IV. Explorer les paramètres de Test-Path

Comme la majorité des cmdlets PowerShell, Test-Path dispose de son propre jeu de paramètres. Je vais vous montrer quelques-uns de ces paramètres en prenant des exemples.

  • Test-Path et -isValid

Lorsque nous utilisons le cmdlet "Test-Path", il retourne vrai ou faux en fonction de l'existence ou non de l'élément testé. Si nous utilisons le paramètre "-isValid", le comportement est différent : nous ne vérifions pas si l'élément existe, nous vérifions la cohérence de la valeur à tester.

Le répertoire "C:\IT-CONNECT\" n'existe pas, pourtant la syntaxe est correcte, donc la commande va retourner "true" si "-isValid" est précisé.

Test-Path -Path "C:\IT-CONNECT\" -IsValid

La preuve en image ci-dessous :

  • Test-Path et -NewerThan et/ou -OlderThan

Nous pouvons tester l'existence d'un dossier et sa date de dernière modification, pour voir si elle est "plus récente que" (NewerThan) ou "plus ancienne que" (OlderThan) en précisant une date. Nous pouvons cumuler les deux paramètres pour cibler une période.

Reprenons le fichier "hosts", qui sur ma machine a une date de modification au 02/01/2024. Nous pouvons tester la date de cette façon, en utilisant le format classique "jour/mois/année" ou un autre format conforme :

Test-Path -Path "C:\Windows\System32\drivers\etc\hosts" -NewerThan "01/01/2024"

Ou alors en cumulant les deux paramètres :

Test-Path -Path "C:\Windows\System32\drivers\etc\hosts" -NewerThan "01/01/2024" -OlderThan "30/04/2024"

Voici un autre exemple, basé sur d'autres dates, en image :

  • Test-Path et -Exclude

Nous pouvons utiliser "Test-Path" pour s'intéresser au contenu d'un dossier et plus particulièrement regarder s'il y a des fichiers dans un format indésirable dans un dossier.

Si nous prenons l'exemple du dossier "C:\TEMP\DOSSIER1" qui contient seulement des images au format JPG et PNG, nous pouvons nous assurer qu'il ne contient pas d'éléments dans d'autres formats.

Nous allons utiliser "-Exclude" suivi de nos extensions JPG et PNG pour les exclure puisqu'elles sont légitimes.

Test-Path -Path "C:\TEMP\DOSSIER1\*.*" -Exclude *.jpg, *.png

Si le dossier contient seulement des fichiers JPG et PNG, le résultat sera "false" : dans ce cas, vous êtes sûr que ce dossier ne contient pas de fichiers dans d'autres formats ! Il est à noter l'existence du paramètre "-Include" qui fonctionne à l'inverse. Il pourra permettre de s'assurer qu'il y a bien des fichiers dans un ou plusieurs formats.

V. Conclusion

Le cmdlet "Test-Path" est généralement utilisé dans sa forme la plus simple, c'est-à-dire pour tester l'existence d'un fichier ou d'un dossier. Cependant, comme nous venons de le voir, il a plusieurs paramètres très intéressants pour effectuer des tests divers et variés, tout en présentant l'avantage de retourner toujours un booléen.


livre pour apprendre PowerShell
author avatar
Florian BURNEL Co-founder of IT-Connect
Ingénieur système et réseau, cofondateur d'IT-Connect et Microsoft MVP "Cloud and Datacenter Management". Je souhaite partager mon expérience et mes découvertes au travers de mes articles. Généraliste avec une attirance particulière pour les solutions Microsoft et le scripting. Bonne lecture.
Partagez cet article Partager sur Twitter Partager sur Facebook Partager sur Linkedin Envoyer par mail

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.