Si vous avez besoin de valider un chemin vers un fichier, une clé de registre, un certificat, ou tout autre chemin de PowerShell drive, vous avez besoin de la cmdlet Test-Path.
La cmdlet Test-Path est un moyen simple mais utile pour vérifier rapidement de nombreuses propriétés d’un fichier et d’autres éléments. Elle peut vérifier si un fichier existe (ou d’autres types d’éléments), si une chaîne est dans le format de chemin correct, ou même si un élément est plus récent ou plus ancien qu’un temps spécifique.
Dans ce tutoriel, vous allez tout apprendre sur la cmdlet PowerShell Test-Path et comment l’utiliser pour améliorer vos scripts PowerShell.
Prérequis
Si vous souhaitez suivre les exemples de ce tutoriel, vous aurez besoin d’une chose : PowerShell. Plus précisément, le tutoriel utilisera PowerShell v7.03 sur Windows 10, bien que de nombreuses techniques que vous apprendrez s’appliqueront également aux versions plus anciennes.
Que fait la cmdlet Test-Path ?
La cmdlet PowerShell Test-Path est l’une des commandes les plus simples. C’est une commande qui existe dans PowerShell depuis le début et ne renvoie que deux valeurs : Vrai ou Faux.
Mais ne laissez pas sa simplicité vous tromper ; elle vous fera gagner tellement de temps dans la validation des informations dans vos scripts PowerShell.
Pensez à la cmdlet Test-Path de PowerShell comme à un contrôle de qualité lors de l’utilisation des fournisseurs et des lecteurs PowerShell. Lors de l’écriture d’un script, vous travaillerez fréquemment avec divers éléments contenus dans les lecteurs PowerShell. Des lecteurs PowerShell tels que C:\, HKLM, Cert, et ainsi de suite.
Test-Path
ne fonctionne pas avec tous les lecteurs PS. Par exemple, si vous tentez d’utiliserTest-Path
sur une clé de registre, cela fonctionnera. Si vous tentez d’utiliserTest-Path
sur une valeur de registre, cela renverraFalse
à chaque fois.
Si cela vous intrigue, exécutez maintenant la cmdlet Get-PSDrive
dans PowerShell et remarquez tous les lecteurs PS qui apparaissent pour vous.

Tous ces lecteurs ont des chemins à l’intérieur d’eux comme C:\Windows, HKLM:\Software, etc. Lorsque vous travaillez avec des chemins à l’intérieur de vos scripts PowerShell, il est toujours bon de tester d’abord si le chemin est valide ou s’il existe ou non. C’est ce que fait Test-Path
de PowerShell.
Test-Path
définit une condition qui renvoie True
ou False
en fonction de la satisfaction d’une condition spécifique (généralement si un fichier/dossier, une clé de registre, un certificat, ou même une variable existe ou non).
Paramètres et utilisation de Test-Path
Comme de nombreux autres cmdlets PowerShell, le cmdlet Test-Path
possède divers paramètres qui modifient son comportement. Couvrons maintenant chaque paramètre et démontrons comment il fonctionne et quels types de résultats vous pourriez vous attendre à voir.
Chemin
Le paramètre Chemin
est un paramètre obligatoire que vous utiliserez à chaque exécution de Test-Path
. Le paramètre Chemin
définit le chemin du PSDrive que vous souhaitez tester pour savoir s’il existe.
Par exemple, si vous souhaitez vérifier si le dossier C:\Foo existe ou non, vous fournirez le chemin approprié au paramètre Chemin
. Ensuite, en fonction de si C:\Foo existe réellement ou non, Test-Path
renverrait soit Vrai
soit Faux
.
La même technique peut être utilisée pour n’importe quel chemin d’élément également. Peut-être souhaitez-vous vérifier si la clé de registre HKLM:\Software\Foo existe ou non. Utilisez simplement le chemin de la clé de registre avec le paramètre Chemin
.
Sachez que toutes les techniques démontrées tout au long de ce tutoriel fonctionneront avec n’importe quel chemin de lecteur PowerShell.
Utilisation de jokers
Que se passe-t-il si vous ne vous souciez pas nécessairement si un chemin a une valeur littérale. Au lieu de cela, vous souhaitez simplement vérifier si un chemin correspond à un motif spécifique. Dans ce cas, vous pouvez utiliser des jokers dans la valeur du Chemin
.
Peut-être souhaitez-vous vérifier si votre dossier C:\Foo contient un sous-dossier qui commence par Bar. Dans ce cas, vous pourriez utiliser un joker.
Une fois que vous exécutez la commande ci-dessus, Test-Path
vérifiera l’existence du dossier any qui commence par Bar et renverra True
ou False
en fonction de l’existence ou non d’un dossier correspondant à ces critères.
Les astérisques (*
) correspondent à un ou plusieurs caractères, mais vous pouvez également utiliser des points d’interrogation (?
) pour une correspondance plus précise et tester pour un seul caractère.
En utilisant le scénario ci-dessus comme exemple, si le dossier C:\Foo\Bar1 existe, vous pouvez tester la présence de tout sous-dossier de Foo qui commence par Bar et a exactement quatre caractères en utilisant la commande ci-dessous.
Si, pour une raison quelconque, vous souhaitez utiliser le paramètre
Path
avec des caractères génériques mais que vous voulez correspondre littéralement à un caractère générique comme*
, vous pouvez toujours échapper les caractères génériques avec un accent grave (`).
LiteralPath
Le paramètre LiteralPath
est presque identique au paramètre Path
à une exception près ; il n’accepte pas les caractères génériques. En utilisant LiteralPath
, le chemin est interprété littéralement.
Par exemple, si vous tentez d’utiliser un astérisque ou un point d’interrogation à l’intérieur de la valeur du chemin avec LIteralPath
, Test-Path
ignorera complètement les caractères génériques et testera littéralement pour C:\Foo\Bar? comme dans l’exemple ci-dessous.
Vous devriez utiliser
LiteralPath
comme le paramètre de chemin par défaut si vous n’avez pas besoin d’utiliser des caractères génériques pour vous assurer queTest-Path
teste le chemin attendu.
PathType
Par défaut, lorsque vous exécutez Test-Path
et lui fournissez un chemin, il renverra True
s’il trouve quelque chose dans ce chemin. L’élément avec un chemin pourrait être un conteneur comme un dossier de fichiers, une clé de registre, un magasin de certificats, etc., ou une feuille comme un fichier, une valeur de registre ou un certificat.
Vous pouvez forcer Test-Path
à être plus précis et à tester spécifiquement un conteneur ou un élément feuille en utilisant le paramètre PathType
.
Par défaut, Test-Path utilise la valeur
Any
pourPathType
.
Si, par exemple, il y a un dossier à C:\Foo\Bar et que vous cherchez un fichier à ce chemin, vous pourriez utiliser le paramètre PathType
comme indiqué ci-dessous. Vous voulez juste vérifier si un fichier appelé C:\Foo\Bar existe.
Peut-être que vous avez besoin de confirmer si C:\Foo\Bar est réellement un fichier. Dans ce cas, vous vérifieriez un conteneur.
Inclure
Si vous utilisez le paramètre Path
et des jokers, vous devrez parfois être plus spécifique. Dans ce cas, vous devez examiner les paramètres Include
et Exclude
.
Disons que vous avez les dossiers suivants:
- C:\Foo\Bar1
- C:\Foo\Bar2
- C:\Foo\Bar3
Vous souhaitez vérifier si un dossier commençant par Bar existe et s’il est exactement composé de quatre caractères comme Bar1, Bar2, etc.
La commande ci-dessus fonctionne bien, mais maintenant vous voulez seulement trouver des dossiers dans C:\Foo nommés Bar2. Dans ce cas, vous pourriez utiliser le paramètre Include
.
Le commandement ci-dessus teste désormais essentiellement un seul dossier C:\Foo\Bar2. Il serait probablement plus judicieux d’utiliser simplement Test-Path -Path 'C:\Foo\Bar2' -PathType Container
à la place.
Exclude
Le paramètre Exclude
fonctionne de manière similaire au paramètre Include
, sauf que cette fois-ci, il exclut les chemins correspondant à une chaîne.
Peut-être souhaitez-vous vous assurer qu’il y a au moins un fichier à l’intérieur du dossier C:\Foo, et vous utilisez la commande suivante:
La commande ci-dessus renvoie True
ou False
si des fichiers se trouvent dans C:\Foo. Mais peut-être souhaitez-vous vous assurer que des fichiers autres que ceux avec une extension de fichier txt
existent. Dans ce cas, vous pourriez utiliser le paramètre Exclude
avec un joker pour exclure tous les fichiers avec l’extension txt
du test.
Filter
Selon la documentation de Microsoft, le paramètre Filter
« spécifie un filtre dans le format ou le langage du fournisseur. La valeur de ce paramètre se qualifie en tant que paramètre Path
. La syntaxe du filtre, y compris l’utilisation de caractères génériques, dépend du fournisseur ».
Bien que le paramètre Filter
devrait être utilisé avec d’autres cmdlets comme Get-Childitem
, par exemple, il est rarement, voire jamais, utilisé avec Test-Path
. Si vous avez trouvé une bonne utilisation pour le paramètre Filter
, veuillez me contacter sur Twitter à @adbertram.
Lié : Get-ChildItem : Afficher les fichiers, le registre, les certificats et plus encore comme un seul
NewerThan
Avez-vous déjà eu besoin de vérifier l’horodatage d’un fichier et de prendre une décision en fonction de cela ? Si oui, les paramètres NewerThan
et OlderThan
économisent beaucoup de code. Le paramètre NewerThan
vérifie si l’horodatage d’un élément est plus récent qu’une date spécifique.
Le paramètre NewerThan
accepte une chaîne de caractères ou un objet DateTime pour représenter un horodatage à vérifier. Par exemple, pour vérifier si le fichier C:\Foo\bar.txt a été créé après le 20 janvier 2021, vous exécuteriez Test-Path
comme ci-dessous.
OlderThan
Le paramètre OlderThan
est exactement le même que le paramètre NewerThan
mais opposé. Ce paramètre vérifie si un élément est plus vieux qu’une date spécifique.
IsValid
Si vous avez déjà construit dynamiquement un chemin dans un script, vous connaissez la difficulté. Parfois, vous pouvez appuyer accidentellement sur une touche ou obtenir un caractère spécial dans un chemin ; si c’est le cas, le paramètre IsValid
est pour vous.
Le paramètre IsValid
est un paramètre unique qui transforme Test-Path
, non pas en une cmdlet qui vérifie l’existence d’un élément, mais en une qui vérifie la syntaxe du chemin. Ce paramètre confirme si un chemin est valide uniquement.
Par exemple, peut-être devez-vous vérifier si un chemin est syntaxiquement valide. Vous travaillez avec quelques variables et les concaténez pour construire un chemin.
Lors de la concaténation des chemins, utilisez toujours la cmdlet
Join-Path
. Cela n’est donné qu’à titre d’exemple!
Maintenant, pour vous assurer que le chemin que vous avez créé dynamiquement est valide, utilisez le paramètre IsValid
comme ci-dessous. Vous constaterez que Test-Path
renvoie False
.
Le chemin abc:dffC:\
n’est pas un chemin valide, vous permettant ainsi de créer une routine de validation à partir de cette situation.
Si vous utilisez PowerShell v6.1.2 ou une version antérieure et que vous utilisez les paramètres
IsValid
etPathType
ensemble,Test-Path
ignorera le paramètrePathType
.
Credential
Même si vous trouvez le paramètre Credential
sur Test-Path
, vous pourriez penser que vous pouvez l’utiliser pour vous authentifier auprès des disques PS en tant qu’autre utilisateur. C’est une hypothèse valide, mais incorrecte.
Malheureusement, le paramètre Credential
n’a pas beaucoup d’effet avec la cmdlet Test-Path
. Microsoft recommande d’utiliser la cmdlet Invoke-Command
et d’utiliser le paramètre Credential
là-bas si vous voulez invoquer Test-Path
avec des informations d’identification alternatives.
Connexe: Invoke-Command : La meilleure façon d’exécuter du code à distance