PROJET AUTOBLOG


IT-Connect

Site original : IT-Connect

⇐ retour index

PowerShell – Test-Path : tester si un fichier existe

mercredi 17 février 2021 à 09:00

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.

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 😉

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 :

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 😉

The post PowerShell – Test-Path : tester si un fichier existe first appeared on IT-Connect.