Als u een pad naar een bestand, register sleutel, certificaat, of een ander PowerShell-drive-pad moet valideren, heeft u de Test-Path cmdlet nodig.
De Test-Path cmdlet is een eenvoudige maar nuttige manier om snel veel eigenschappen van een bestand en andere items te controleren. Het kan controleren of een bestand bestaat (of andere itemtypen), of een tekenreeks in het juiste padformaat staat, of zelfs of een item nieuwer is dan of ouder dan een specifieke tijd.
In deze tutorial ga je alles leren over de PowerShell Test-Path cmdlet en hoe je het kunt gebruiken om je PowerShell-scripts te verbeteren.
Vereisten
Als je de voorbeelden in deze tutorial wilt volgen, heb je één ding nodig; PowerShell. Meer specifiek zal de tutorial PowerShell v7.03 op Windows 10 gebruiken, hoewel veel van de technieken die je leert ook van toepassing zullen zijn op oudere versies.
Wat doet de Test-Path Cmdlet?
De PowerShell Test-Path cmdlet is een van de eenvoudigste commando’s. Het is een opdracht die al sinds het begin in PowerShell zit en slechts twee waarden retourneert; Waar of Onwaar.
Maar laat de eenvoud u niet misleiden; het zal u zo veel tijd besparen bij het valideren van informatie in uw PowerShell-scripts.
Denk aan de PowerShell Test-Path cmdlet als kwaliteitscontrole bij het werken met PowerShell-providers en drives. Bij het schrijven van een script zul je vaak werken met verschillende items die zich bevinden in PowerShell-drives. PowerShell-drives zoals C:\, HKLM, Cert, enzovoort.
Test-Path
werkt niet met alle PS-drives. Als je bijvoorbeeld probeertTest-Path
te gebruiken tegen een registerkey, zal het werken. Als je echterTest-Path
probeert te gebruiken tegen een registerwaarde, zal het elke keerFalse
retourneren.
Als je nieuwsgierig bent, voer dan nu het Get-PSDrive
cmdlet uit in PowerShell en merk alle PS-drives op die voor je verschijnen.

Al deze drives hebben paden erin zoals C:\Windows, HKLM:\Software, enz. Bij het werken met paden in je PowerShell-scripts is het altijd goed om eerst te testen of het pad geldig is of dat het al dan niet bestaat. Dit is wat PowerShell’s Test-Path
doet.
Test-Path
definieert een voorwaarde die True
of False
retourneert, afhankelijk van of een specifieke voorwaarde is voldaan (meestal of een bestand/map, registerkey, certificaat, of zelfs een variabele al dan niet bestaat).
Test-Path Parameters en Gebruik
Zoals veel andere PowerShell-cmdlets heeft het Test-Path
-cmdlet verschillende parameters die het gedrag ervan veranderen. Laten we nu elke parameter behandelen en demonstreren hoe het werkt en welke resultaten je kunt verwachten.
Pad
De parameter Pad
is een verplichte parameter die je gebruikt bij elke uitvoering van Test-Path
. De parameter Pad
definieert het pad van de PSDrive dat je wilt testen op het bestaan ervan.
Als je bijvoorbeeld wilt testen of de map C:\Foo bestaat, geef je het juiste pad op aan de Pad
-parameter. Vervolgens, afhankelijk van of C:\Foo daadwerkelijk bestaat of niet, zou Test-Path
ofwel True
of False
retourneren.
Dezelfde techniek kan ook worden gebruikt voor elk item-pad. Misschien wil je testen of de registersleutel HKLM:\Software\Foo bestaat. Gebruik eenvoudig het registersleutelpad met de Pad
-parameter.
Weet dat alle technieken gedemonstreerd in deze tutorial zullen werken met elk PowerShell-stuurprogrammapad.
Gebruik van Wildcards
Wat gebeurt er als je niet per se geeft om een pad met een letterlijke waarde. In plaats daarvan wil je gewoon controleren of een pad overeenkomt met een specifiek patroon. In dat geval kun je wildcards gebruiken in de waarde van Pad
.
Misschien wil je controleren of je C:\Foo-map een submap bevat die begint met Bar. In dat geval kun je een wildcard gebruiken.
Zodra u bovenstaand commando uitvoert, zal Test-Path
controleren of er een map bestaat die begint met Bar en True
of False
retourneren, afhankelijk van of een map die aan die criteria voldoet, al dan niet bestaat.
Asterisken (*
) komen overeen met één of meer tekens, maar u kunt ook vraagtekens (?
) gebruiken om gedetailleerder te testen op één karakter.
Als voorbeeld kunt u met het bovenstaande scenario, als de map C:\Foo\Bar1 bestaat, testen op een submap van Foo die begint met Bar en exact vier tekens lang is met het volgende commando.
Als u om de een of andere reden de
Path
-parameter met wildcards wilt gebruiken maar een wildcard-teken zoals*
letterlijk wilt matchen, kunt u altijd de wildcard-tekens escapen met een backtick (`).
LiteralPath
De LiteralPath
-parameter is bijna identiek aan de Path
-parameter met één uitzondering; het staat geen wildcards toe. Het gebruik van LiteralPath
zal de waarde van het pad letterlijk interpreteren.
Als u bijvoorbeeld een asterisk of vraagteken probeert te gebruiken in de padwaarde met LiteralPath
, negeert Test-Path
volledig de wildcard-tekens en test letterlijk op C:\Foo\Bar?, zoals in het onderstaande voorbeeld.
U moet
LiteralPath
als de standaard padparameter gebruiken als u geen wildcard-tekens hoeft te gebruiken om ervoor te zorgen datTest-Path
het pad test dat u verwacht.
PathType
Standaard, wanneer u Test-Path
uitvoert en het een pad geeft, retourneert het True
als het iets vindt op dat pad. Het item met een pad kan een container zijn, zoals een bestandsmap, een registersleutel, een certificaatopslag, enzovoort, of een blad, zoals een bestand, registerwaarde of certificaat.
U kunt Test-Path
dwingen om meer gedetailleerd te worden en specifiek te testen voor een container- of bladitem met behulp van de PathType
-parameter.
Test-Path gebruikt standaard de
PathType
-waardeAny
.
Als er bijvoorbeeld een map is op C:\Foo\Bar en u zoekt naar een bestand op dat pad, kunt u de PathType
-parameter gebruiken zoals hieronder wordt weergegeven. U wilt alleen controleren of een bestand genaamd C:\Foo\Bar bestaat.
Misschien moet u in plaats daarvan bevestigen of C:\Foo\Bar eigenlijk een bestand is. In dat geval controleert u op een container.
Opnemen
Als u de Path
-parameter en wildcards gebruikt, moet u soms specifieker worden. In dat geval moet u de Include
– en Exclude
-parameters bekijken.
Laten we zeggen dat u de volgende mappen heeft:
- C:\Foo\Bar1
- C:\Foo\Bar2
- C:\Foo\Bar3
U wilt controleren of er mappen zijn die beginnen met Bar die precies vier tekens bevatten, zoals Bar1, Bar2, enzovoort.
De bovenstaande opdracht werkt prima, maar nu wilt u alleen mappen vinden in C:\Foo met de naam Bar2. In dat geval kunt u de Include
-parameter gebruiken.
De bovenstaande opdracht test nu alleen essentieel een enkele map C:\Foo\Bar2. Het is waarschijnlijk beter om gewoon Test-Path -Path 'C:\Foo\Bar2' -PathType Container
te gebruiken in plaats daarvan.
Uitsluiten
De Exclude
parameter werkt op dezelfde manier als de Include
parameter, behalve dat deze keer paden worden uitgesloten die overeenkomen met een string.
Misschien wilt u ervoor zorgen dat er ten minste één bestand aanwezig is in de map C:\Foo, en gebruikt u de volgende opdracht:
De bovenstaande opdracht retourneert True
of False
als er bestanden zijn in C:\Foo. Maar misschien wilt u ervoor zorgen dat er geen bestanden behalve die met de extensie txt
bestaan. In dat geval kunt u de Exclude
parameter gebruiken met een wildcard om alle bestanden met de extensie txt
uit te sluiten van testen.
Filter
Volgens de documentatie van Microsoft, specificeert de Filter
parameter “een filter in het formaat of de taal van de provider. De waarde van deze parameter kwalificeert als de Path
parameter. De syntaxis van het filter, inclusief het gebruik van wildcard-karakters, is afhankelijk van de provider”.
Hoewel de Filter
parameter moet worden gebruikt met andere cmdlets zoals Get-Childitem
, wordt het zelden, zo niet nooit, gebruikt met Test-Path
. Als u een goede toepassing voor de Filter
parameter hebt gevonden, neem dan contact op via Twitter op @adbertram.
Gerelateerd: Get-ChildItem: Bestanden, Register, Certificaat en Meer als Eén Weergeven
NewerThan
Heb je ooit de tijdstempel van een bestand moeten controleren en daarop een beslissing moeten nemen? Zo ja, dan besparen de parameters NewerThan
en OlderThan
veel code. De parameter NewerThan
controleert of de tijdstempel van een item nieuwer is dan een specifieke datum.
De parameter NewerThan
accepteert een tekenreeks of een DateTime-object om een tijdstempel te vertegenwoordigen om tegen te controleren. Bijvoorbeeld, om te controleren of het bestand C:\Foo\bar.txt is gemaakt na 20 januari 2021, zou je Test-Path
als volgt uitvoeren.
OlderThan
De parameter OlderThan
is precies hetzelfde als de parameter NewerThan
, maar het tegenovergestelde. Deze parameter controleert of een item ouder is dan een specifieke datum.
IsValid
Als je ooit dynamisch een pad hebt opgebouwd in een script, ken je de worsteling. Soms typ je per ongeluk een toets verkeerd of krijg je op de een of andere manier een speciaal teken in een pad; als dat het geval is, is de parameter IsValid
iets voor jou.
De parameter IsValid
is een unieke parameter die van Test-Path
geen cmdlet maakt die controleert op het bestaan van een item, maar een die controleert op de syntaxis van het pad. Deze parameter bevestigt alleen of een pad geldig is of niet.
Bijvoorbeeld, misschien moet je controleren of een pad syntactisch geldig is. Je werkt met een paar variabelen en voegt ze samen om een pad te bouwen.
Wanneer je paden samenvoegt, gebruik altijd de
Join-Path
cmdlet. Dit is slechts ter illustratie!
Om ervoor te zorgen dat het pad dat je dynamisch hebt gemaakt geldig is, gebruik je de IsValid
-parameter zoals hieronder. Je zult merken dat Test-Path
False
retourneert.
Het pad abc:dffC:\
is nu geen geldig pad, waardoor je een validatieroutine kunt maken voor deze situatie.
Als je PowerShell v6.1.2 of eerder gebruikt en de parameters
IsValid
enPathType
samen gebruikt, negeertTest-Path
dePathType
-parameter.
Credential
Hoewel je de Credential
-parameter vindt bij Test-Path
, zou je kunnen denken dat je deze kunt gebruiken om je te authenticeren bij PS-drives als een andere gebruiker. Dat is een geldige veronderstelling, maar het klopt niet.
Helaas doet de Credential
-parameter niet veel met de Test-Path
cmdlet. Microsoft raadt aan de Invoke-Command
cmdlet te gebruiken en daar de Credential
-parameter te gebruiken als je Test-Path
met andere referenties wilt uitvoeren.
Gerelateerd: Invoke-Command: De beste manier om externe code uit te voeren