PowerShell – Test-Path : tester si un fichier existe

I. Présentation

C'est une commande basique, mais indispensable : Test-Path est un cmdlet PowerShell qui sert à tester l'existence d'un fichier ou d'un dossier.

Je vais vous expliquer comment l'utiliser 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).

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

Pour utiliser Test-Path, on va 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"

Ou avec le paramètre -Path si l'on veut être précis puisque ce paramètre est facultatif :

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 dans une condition "if" ou "if-else" pour effectuer une action seulement si le fichier existe. Par exemple, on peut récupérer le contenu du fichier hosts seulement s'il existe :

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

if(Test-Path $Fichier){
   Get-Content $Fichier
}else{
   Write-Host "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 se vérifiera seulement si Test-Path retourne true.

De la même façon, on peut 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 env:\USERPROFILE

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

III. PowerShell : les paramètres de Test-Path

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

  • Test-Path et -isValid

Lorsque l'on utilise le cmdlet "Test-Path", il retourne vrai ou faux en fonction de l'existence ou non de l'élément testé. Si l'on utilise le paramètre -isValid, le comportement est différent : on ne vérifie pas si l'élément existe, on vérifie 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 "C:\IT-CONNECT\" -IsValid

La preuve en image ci-dessous ?

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

On peut 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. On peut cumuler les deux pour cibler une période précise.

Reprenons le fichier hosts, qui sur ma machine a une date de modification au 25/01/2021. On peut 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 "23/01/2021"

Ou alors en cumulant les deux paramètres :

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

Ce qui donne, en image :

  • Test-Path et -Exclude

On peut 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 l'on prend l'exemple du dossier "C:\TEMP\DOSSIER1" qui contient seulement des images au format JPG et PNG, on peut s'assurer qu'il n'y a pas des éléments dans d'autres formats.

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

Test-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 sur que ce dossier ne contient pas des 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 ?

Partagez cet article Partager sur Twitter Partager sur Facebook Partager sur Linkedin Partager sur Google+ Envoyer par mail

Florian Burnel

Ingénieur système et réseau et cofondateur d'IT-Connect. 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.

florian has 3204 posts and counting.See all posts by florian

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.