Comment utiliser la cmdlet Test-Path dans PowerShell
Lorsqu'on travaille avec des fichiers ou des dossiers dans PowerShell, il est important de vérifier si le chemin existe avant d'essayer de lire ou d'enregistrer des contenus. C'est là que le cmdlet Test-Path entre en jeu. Il vérifie si tous les éléments d'un chemin existent et renvoie $true ou $false.
Maintenant, la cmdlet Test-Path dans PowerShell n'est pas limitée aux fichiers et dossiers uniquement. Elle peut également être utilisée pour tester le chemin du registre, vérifier si un fichier est plus récent qu'une date particulière et vérifier si un chemin est valide ou non.
Dans cet article, nous allons examiner comment utiliser la cmdlet Test-Path et explorer les différentes options que vous pouvez faire avec.
Test-Path PowerShell
Le cmdlet Test-Path de PowerShell vient avec différents paramètres que nous pouvons utiliser. J'ai listé ci-dessous les paramètres les plus couramment utilisés :
- -Path
Le chemin à tester
- -Include
Spécifie un élément de chemin à inclure, par exemple, *.txt
- -Exclude
Spécifie un élément de chemin à exclure, par exemple, *.txt
- -PathType
Vous permet de vérifier si un chemin est un Conteneur, une Feuille ou les deux.
- -IsValid
Vérifiez si un chemin est un chemin valide
- -OlderThan
Vérifiez si le fichier est plus ancien que l'objet datetime spécifié.
- -NewerThan
Vérifiez si le fichier est plus récent que l'objet datetime spécifié.
Donc, pour tester simplement si un chemin existe, nous n'avons besoin que de spécifier le chemin et le cmdlet renverra soit $true soit $false en fonction de l'existence ou non de tous les éléments du chemin :
Test-Path -Path "c:\Temp\TestFiles"
Result
TrueNous pouvons l'utiliser dans nos scripts avec une simple instruction if comme ceci :
$path = "c:\Temp\TestFiles"
if (Test-Path -Path $path) {
Get-ChildItem -Path $path
}Vérifier si le fichier existe dans PowerShell
Nous pouvons également utiliser Test-Path dans PowerShell pour vérifier si un fichier existe ou non. Pour cela, nous devrons spécifier le chemin complet, y compris le nom du fichier dans le paramètre de chemin :
Check if the file LineNumbers.txt exists
$file = "C:\Temp\TestFiles\LineNumbers.txt"
Test-Path -Path $file
Result
TrueDans ce cas, nous vérifions évidemment un fichier, car nous avons spécifié le chemin complet incluant le fichier avec l'extension. Mais si vous ne savez pas si le chemin mène à un fichier ou à un dossier, vous pouvez spécifier le paramètre PathType.
Disons que nous voulons savoir si le $profile pointe vers un fichier. Pour cela, nous définissons le PathType sur Leaf:
Check if $profile is a file:
Test-Path -Path $profile -PathType leaf
Result
TrueVérifier si le dossier existe dans PowerShell
Tout comme avec un fichier, nous pouvons également vérifier dans PowerShell si un dossier existe. Pour cela, il suffit de spécifier le chemin du dossier :
Test-Path -Path "c:\Temp\TestFiles"
Result
TrueSi nous voulons nous assurer que le chemin pointe vers un dossier, nous pouvons ajouter le paramètre -PathType et le définir sur container. De cette façon, la cmdlet Test-Path vérifiera non seulement si le chemin existe, mais aussi si c'est un dossier ou non :
Check if $profile is a folder:
Test-Path -Path $profile -PathType container
Result
FalseSi vous voulez savoir si le dossier contient des fichiers, vous n'avez pas besoin de faire un compte avec Get-ChildItem, etc. Nous pouvons simplement utiliser Test-Path et ajouter un caractère générique * pour vérifier s'il y a des fichiers dans le chemin donné :
Check if there are files in the folder
Test-Path -Path "c:\Temp\TestFiles\*"
Result
TrueUtiliser Inclure et Exclure
Si vous souhaitez tester si un dossier contient des fichiers particuliers ou non, vous pouvez utiliser les paramètres -include et -exclude. De cette façon, nous pouvons vérifier si un dossier contient un type de fichier spécifié ou tout fichier sauf le type de fichier spécifié.
Par exemple, nous voulons vérifier s'il y a des fichiers journaux dans le chemin suivant :
Check if the path contains .log files
Test-Path -Path "C:\Temp\TestFiles\*" -PathType leaf -Include *.log
Result
FalseSi nous voulons tester s'il y a des fichiers autres que le fichier .log, nous pouvons utiliser l'exclusion par exemple :
Check if the path contains .log files
Test-Path -Path "C:\Temp\TestFiles\*" -PathType leaf -Exclude *.log
Result
TrueVérifiez si un chemin est valide
Lorsque vous créez un chemin de manière dynamique dans votre script, il peut être judicieux de vérifier si le chemin généré est un chemin valide ou non. Pour cela, nous pouvons utiliser le paramètre -IsValid. Cela ne vérifiera pas si le chemin existe ou non, seulement s'il s'agit d'un chemin valide.
Par exemple, nous pouvons vérifier si tous les emplacements dans la variable système PATH sont des chemins valides ou non :
$env:path -split ";" | Test-Path -IsValidOu peut-être qu'un exemple un peu plus facile est :
$storage = "c:\temp\testfiles\"
$newFolder = "\LazyFolder"
$path = $newFolder + $storage # yes, the wrong way around
Test-Path -path $path -IsValid
Result
FalseVérifiez si un fichier ou un dossier est plus récent ou plus ancien qu'une date
En plus de tester si un chemin existe ou non, nous pouvons également vérifier si un fichier ou un dossier est plus récent ou plus ancien qu'une date spécifiée. Cela est particulièrement utile si vous voulez savoir si un fichier a été mis à jour ou non.
Les paramètres -NewerThan et -OlderThan nécessitent un objet date ou datetime. Cela peut être une chaîne datetime ou un objet datetime. Ainsi, pour tester si le dossier « testfiles » est plus récent que le premier février, nous pouvons faire ce qui suit :
Test-Path -Path "C:\Temp\TestFiles\" -NewerThan "01 feb 2023"
Result
TrueMais nous pouvons aussi vérifier si le dossier a plus de 3 jours par exemple. Pour cela, nous créons d'abord un objet date dans PowerShell, que nous pouvons ensuite utiliser dans la cmdlet Test-Path :
Get the date from 3 days ago
$date = (Get-Date).AddDays(-3)
Test if the folder is newer
Test-Path -Path "C:\Temp\TestFiles\" -NewerThan $dateVous pouvez faire de même avec OlderThan bien sûr.
Tester les chemins de registre avec PowerShell
Le cmdlet Test-Path dans PowerShell peut également être utilisé pour vérifier si les chemins d'inscription existent ou non. Maintenant, il y a une chose importante à noter ici, il ne peut pas tester les entrées de registre.
Si vous regardez la capture d'écran ci-dessous, nous pouvons tester si la clé Outlook (1) existe ou non. Mais nous ne pouvons pas tester si l'entrée « OutlookName » (2) existe.
Donc, pour tester la clé du registre, il suffit de spécifier le chemin de la clé comme ceci :
Test-Path -Path "HKCU:\Software\Microsoft\Office\16.0\Outlook"Comme vous pouvez le voir dans les résultats ci-dessous, le chemin vers Outlook existe, mais il ne peut pas trouver le chemin vers l'entrée OutlookName :
Conclure
Tester ou vérifier si des ressources existent ou non est important dans n'importe quel langage de programmation ou de script. Cela vous aide à prévenir les erreurs ou les comportements inattendus dans vos scripts et vous permet de bien gérer les erreurs.
Le cmdlet Test-Path dans PowerShell peut faire plus que la plupart des gens ne le pensent, mais dans tous les cas, il n'affiche que vrai ou faux.
J'espère que vous avez trouvé cet article utile, si vous avez des questions, n'hésitez pas à laisser un commentaire ci-dessous.


