Wenn Sie einen Pfad zu einer Datei, einem Registrierungsschlüssel, einem Zertifikat oder einem anderen PowerShell-Laufwerk-Pfad validieren müssen, benötigen Sie das Test-Path-Cmdlet.
Das Test-Path-Cmdlet ist eine einfache, aber nützliche Möglichkeit, schnell viele Attribute einer Datei und anderer Elemente zu überprüfen. Es kann überprüfen, ob eine Datei existiert (oder andere Elementtypen), ob eine Zeichenfolge im richtigen Pfadformat vorliegt oder ob ein Element neuer oder älter als eine bestimmte Zeit ist.
In diesem Tutorial erfahren Sie alles über das PowerShell-Test-Path-Cmdlet und wie Sie es verwenden können, um Ihre PowerShell-Skripte zu verbessern.
Voraussetzungen
Wenn Sie die Beispiele in diesem Tutorial ausprobieren möchten, benötigen Sie eine Sache: PowerShell. Genauer gesagt wird das Tutorial PowerShell v7.03 unter Windows 10 verwenden, obwohl viele der Techniken, die Sie lernen werden, auch auf ältere Versionen anwendbar sind.
Was macht das Test-Path-Cmdlet?
Das PowerShell-Test-Path-Cmdlet ist eine der einfachsten Befehle überhaupt. Es ist ein Befehl, der seit Beginn von PowerShell vorhanden ist und nur zwei Werte zurückgibt: True oder False.
Aber lassen Sie sich von der Einfachheit nicht täuschen; es wird Ihnen so viel Zeit sparen, wenn Sie Informationen in Ihren PowerShell-Skripten validieren.
Denken Sie an das PowerShell-Test-Path-Cmdlet als Qualitätskontrolle beim Arbeiten mit PowerShell-Providern und Laufwerken. Wenn Sie ein Skript schreiben, arbeiten Sie häufig mit verschiedenen Elementen in PowerShell-Laufwerken. PowerShell-Laufwerke wie C:\, HKLM, Cert und so weiter.
Test-Path
funktioniert nicht mit allen PS-Laufwerken. Wenn Sie beispielsweise versuchen,Test-Path
gegen einen Registrierungsschlüssel zu verwenden, funktioniert es. Wenn Sie versuchen,Test-Path
gegen einen Registrierungswert zu verwenden, gibt es jedes MalFalsch
zurück.
Wenn Sie neugierig sind, führen Sie das Get-PSDrive
-Cmdlet jetzt in PowerShell aus und bemerken Sie alle PS-Laufwerke, die für Sie angezeigt werden.

All diese Laufwerke haben Pfade in ihnen wie C:\Windows, HKLM:\Software usw. Wenn Sie mit Pfaden in Ihren PowerShell-Skripten arbeiten, ist es immer ratsam, zuerst zu überprüfen, ob der Pfad gültig oder vorhanden ist. Das ist es, was das Test-Path
von PowerShell macht.
Test-Path
definiert eine Bedingung, die True
oder False
zurückgibt, abhängig davon, ob eine bestimmte Bedingung erfüllt ist (typischerweise ob eine Datei/Ordner, ein Registrierungsschlüssel, Zertifikat oder sogar eine Variable existiert oder nicht).
Test-Path-Parameter und Verwendung
Wie viele andere PowerShell-Cmdlets verfügt das Test-Path
-Cmdlet über verschiedene Parameter, die sein Verhalten ändern. Lassen Sie uns nun jeden Parameter durchgehen und zeigen, wie er funktioniert und welche Art von Ergebnissen Sie erwarten können.
Path
Der Path
-Parameter ist ein obligatorischer Parameter, den Sie bei jeder Ausführung von Test-Path
verwenden. Der Path
-Parameter definiert den Pfad des PSDrive, den Sie auf Existenz überprüfen möchten.
Wenn Sie beispielsweise überprüfen möchten, ob der Ordner C:\Foo existiert, geben Sie den entsprechenden Pfad an den Path
-Parameter an. Je nachdem, ob C:\Foo tatsächlich existiert oder nicht, würde Test-Path
entweder True
oder False
zurückgeben.
Dieselbe Technik kann auch für jeden Elementpfad verwendet werden. Vielleicht möchten Sie überprüfen, ob der Registrierungsschlüssel HKLM:\Software\Foo existiert. Verwenden Sie einfach den Registrierungsschlüsselpfad mit dem Path
-Parameter.
Beachten Sie, dass alle im Laufe dieses Tutorials vorgeführten Techniken mit jedem PowerShell-Laufwerkspfad funktionieren werden.
Verwendung von Platzhaltern
Was passiert, wenn es Ihnen nicht unbedingt wichtig ist, ob ein Pfad einen bestimmten Wert hat? Stattdessen möchten Sie nur überprüfen, ob ein Pfad einem bestimmten Muster entspricht. In diesem Fall können Sie Platzhalter im Wert des Path
verwenden.
Vielleicht möchten Sie überprüfen, ob Ihr Ordner C:\Foo einen Unterordner enthält, der mit Bar beginnt. In diesem Fall könnten Sie einen Platzhalter verwenden.
Sobald Sie den obigen Befehl ausführen, wird Test-Path
überprüfen, ob ein Ordner existiert, der mit irgendeinem Ordner beginnt, der mit Bar beginnt, und True
oder False
zurückgeben, je nachdem, ob ein Ordner existiert, der diesen Kriterien entspricht oder nicht.
Sterne (*
) passen zu einem oder mehreren Zeichen, aber Sie können auch Fragezeichen (?
) verwenden, um genauer zu sein und nach einem einzelnen Zeichen zu suchen.
Im obigen Szenario als Beispiel, wenn der Ordner C:\Foo\Bar1 existiert, könnten Sie nach einem beliebigen Unterordner von Foo suchen, der mit Bar beginnt und genau vier Zeichen lang ist, mit dem folgenden Befehl.
Wenn Sie aus irgendeinem Grund den
Path
-Parameter mit Platzhaltern verwenden möchten, aber ein Platzhalterzeichen wie*
wörtlich übereinstimmen möchten, können Sie die Platzhalterzeichen jederzeit mit einem Backtick (`) escapen.
LiteralPath
Der Parameter LiteralPath
ist nahezu identisch mit dem Parameter Path
mit einer Ausnahme; er erlaubt keine Platzhalter. Wenn Sie LiteralPath
verwenden, wird der Pfadwert wörtlich interpretiert.
Wenn Sie beispielsweise versuchen, ein Asterisk oder ein Fragezeichen innerhalb des Pfadwerts mit LiteralPath
zu verwenden, wird Test-Path
die Platzhalterzeichen komplett ignorieren und wörtlich für C:\Foo\Bar? testen, wie im folgenden Beispiel.
Sie sollten
LiteralPath
als standardmäßigen Pfadparameter verwenden, wenn Sie keine Platzhalterzeichen verwenden müssen, um sicherzustellen, dassTest-Path
den erwarteten Pfad testet.
PathType
Standardmäßig gibt Test-Path
, wenn Sie ihm einen Pfad angeben, True
zurück, wenn es etwas in diesem Pfad findet. Der Eintrag mit einem Pfad könnte ein Container wie ein Dateiordner, ein Registrierungsschlüssel, Zertifikatsspeicher usw. oder ein Blatt wie eine Datei, Registrierungswert oder Zertifikat sein.
Sie können Test-Path
dazu zwingen, granularer zu werden und speziell für einen Container- oder Blattelementtyp zu testen, indem Sie den PathType
-Parameter verwenden.
Test-Path verwendet standardmäßig den
PathType
-WertAny
.
Wenn zum Beispiel ein Ordner unter C:\Foo\Bar existiert und Sie nach einer Datei unter diesem Pfad suchen, könnten Sie den PathType
-Parameter wie unten gezeigt verwenden. Sie möchten nur überprüfen, ob eine Datei mit dem Namen C:\Foo\Bar existiert.
Vielleicht müssen Sie stattdessen bestätigen, ob C:\Foo\Bar tatsächlich eine Datei ist. In diesem Fall würden Sie nach einem Container suchen.
Einschließen
Wenn Sie den Path
-Parameter und Platzhalter verwenden, müssen Sie manchmal genauer werden. In diesem Fall müssen Sie die Include
– und Exclude
-Parameter überprüfen.
Sagen wir, Sie haben die folgenden Ordner:
- C:\Foo\Bar1
- C:\Foo\Bar2
- C:\Foo\Bar3
Sie möchten überprüfen, ob ein Ordner, der mit Bar beginnt und genau vier Zeichen wie Bar1, Bar2 usw. existiert.
Der obige Befehl funktioniert gut, aber jetzt möchten Sie nur Ordner in C:\Foo finden, die Bar2 heißen. In diesem Fall könnten Sie den Include
-Parameter verwenden.
Der obige Befehl testet jetzt nur für praktisch einen einzigen Ordner C:\Foo\Bar2. Es wäre wahrscheinlich besser, einfach Test-Path -Path 'C:\Foo\Bar2' -PathType Container
zu verwenden.
Ausschließen
Der Ausschließen
-Parameter funktioniert ähnlich wie der Einschließen
-Parameter, mit dem Unterschied, dass er diesmal Pfade ausschließt, die mit einem bestimmten String übereinstimmen.
Vielleicht möchten Sie sicherstellen, dass sich mindestens eine Datei im C:\Foo-Ordner befindet, und verwenden den folgenden Befehl:
Der obige Befehl gibt True
oder False
zurück, wenn sich Dateien in C:\Foo befinden. Aber vielleicht möchten Sie sicherstellen, dass außer Dateien mit der Dateierweiterung txt
alle anderen existieren. In diesem Fall könnten Sie den Ausschließen
-Parameter verwenden, um alle Dateien mit der Erweiterung txt
von der Prüfung auszuschließen.
Filter
Laut der Dokumentation von Microsoft „gibt der Filter
-Parameter einen Filter im Format oder in der Sprache des Anbieters an. Der Wert dieses Parameters gilt als Pfad
-Parameter. Die Syntax des Filters, einschließlich der Verwendung von Platzhalterzeichen, hängt vom Anbieter ab“.
Obwohl der Filter
-Parameter mit anderen Befehlen wie Get-Childitem
verwendet werden sollte, wird er selten bis gar nicht mit Test-Path
verwendet. Wenn Sie einen guten Verwendungszweck für den Filter
-Parameter gefunden haben, kontaktieren Sie mich bitte auf Twitter unter @adbertram.
Verwandte: Get-ChildItem: Auflisten von Dateien, Registrierung, Zertifikaten und mehr in einem
NewerThan
Haben Sie jemals den Zeitstempel einer Datei überprüfen müssen und eine Entscheidung darauf basierend treffen müssen? Wenn ja, dann sparen die Parameter NewerThan
und OlderThan
eine Menge Code. Der Parameter NewerThan
überprüft, ob der Zeitstempel eines Elements neuer ist als ein bestimmtes Datum.
Der Parameter NewerThan
akzeptiert einen String oder ein DateTime-Objekt, um einen Zeitstempel zu repräsentieren, gegen den geprüft werden soll. Um beispielsweise zu überprüfen, ob die Datei C:\Foo\bar.txt nach dem 20. Januar 2021 erstellt wurde, würden Sie Test-Path
wie unten gezeigt ausführen.
OlderThan
Der Parameter OlderThan
ist genau wie der Parameter NewerThan
, aber entgegengesetzt. Dieser Parameter überprüft, ob ein Element älter als ein bestimmtes Datum ist.
IsValid
Wenn Sie jemals dynamisch einen Pfad in einem Skript erstellt haben, kennen Sie das Problem. Manchmal tippen Sie vielleicht einen Tastenfehler oder bekommen aus irgendeinem Grund ein Sonderzeichen in einem Pfad; wenn ja, dann ist der IsValid
-Parameter für Sie.
Der Parameter IsValid
ist ein einzigartiger Parameter, der Test-Path
nicht in ein Cmdlet verwandelt, das das Vorhandensein eines Elements überprüft, sondern eins, das die Pfadsyntax überprüft. Dieser Parameter bestätigt, ob ein Pfad nur gültig ist.
Zum Beispiel müssen Sie möglicherweise überprüfen, ob ein Pfad syntaktisch gültig ist. Sie arbeiten mit einigen Variablen und verketten sie, um einen Pfad zu erstellen.
Beim Verketten von Pfaden verwenden Sie immer das
Join-Path
-Cmdlet. Dies dient nur zu Demonstrationszwecken!
Um sicherzustellen, dass der von Ihnen dynamisch erstellte Pfad gültig ist, verwenden Sie den IsValid
-Parameter wie unten gezeigt. Sie werden feststellen, dass Test-Path
False
zurückgibt.
Der Pfad abc:dffC:\
ist kein gültiger Pfad und ermöglicht es Ihnen, aus dieser Situation eine Validierungsroutine zu erstellen.
Wenn Sie PowerShell v6.1.2 oder früher verwenden und die Parameter
IsValid
undPathType
zusammen verwenden, ignoriertTest-Path
den ParameterPathType
.
Anmeldeinformationen
Auch wenn Sie den Anmeldeinformationen
-Parameter bei Test-Path
finden, könnten Sie denken, dass Sie ihn verwenden können, um sich als ein anderer Benutzer bei PS-Laufwerken anzumelden. Das ist eine gültige Annahme, aber falsch.
Leider macht der Anmeldeinformationen
-Parameter nicht viel mit dem Test-Path
-Cmdlet. Microsoft empfiehlt die Verwendung des Invoke-Command
-Cmdlets und die Verwendung des Anmeldeinformationen
-Parameters dort, wenn Sie Test-Path
mit alternativen Anmeldeinformationen aufrufen möchten.
Verwandt: Invoke-Command: Der beste Weg, um Remote-Code auszuführen