Wie man das Test-Path Cmdlet in PowerShell verwendet
Wenn Sie mit Dateien oder Ordnern in PowerShell arbeiten, ist es wichtig, zu überprüfen, ob der Pfad existiert, bevor Sie versuchen, Inhalte zu lesen oder zu speichern. Hier kommt das Cmdlet Test-Path ins Spiel. Es überprüft, ob alle Elemente eines Pfades existieren und gibt $true oder $false zurück.
Jetzt ist das Test-Path Cmdlet in PowerShell nicht nur auf Dateien und Ordner beschränkt. Es kann auch verwendet werden, um den Registrierungspfad zu testen, um zu prüfen, ob eine Datei neuer ist als ein bestimmtes Datum, und um zu überprüfen, ob ein Pfad ein gültiger Pfad ist oder nicht.
In diesem Artikel werden wir uns ansehen, wie man das Test-Path Cmdlet verwendet und die verschiedenen Optionen betrachten, die man damit hat.
PowerShell Test-Path
Das PowerShell Test-Path Cmdlet kommt mit verschiedenen Parametern, die wir verwenden können. Ich habe die am häufigsten verwendeten Parameter unten aufgeführt:
- -Path
Der Weg zum Test
- -Include
Gibt ein Pfadelement an, das einbezogen werden soll, zum Beispiel *.txt
- -Exclude
Gibt ein Pfadelement an, das ausgeschlossen werden soll, zum Beispiel *.txt
- -PathType
Ermöglicht Ihnen zu überprüfen, ob ein Pfad ein Container, Blatt oder beides ist.
- -IsValid
Überprüfen Sie, ob ein Pfad ein gültiger Pfad ist
- -OlderThan
Überprüfen Sie, ob die Datei älter ist als das angegebene Datetime-Objekt.
- -NewerThan
Überprüfen Sie, ob die Datei neuer ist als das angegebene Datetime-Objekt.
Um einfach zu testen, ob ein Pfad existiert, müssen wir nur den Pfad angeben, und das Cmdlet gibt entweder $true oder $false zurück, je nachdem, ob alle Elemente des Pfades existieren oder nicht:
Test-Path -Path "c:\Temp\TestFiles"
Result
TrueWir können dies in unseren Skripten mit einer einfachen if-Anweisung wie folgt verwenden:
$path = "c:\Temp\TestFiles"
if (Test-Path -Path $path) {
Get-ChildItem -Path $path
}PowerShell überprüfen, ob die Datei existiert
Wir können auch Test-Path in PowerShell verwenden, um zu überprüfen, ob eine Datei existiert oder nicht. Dafür müssen wir den vollständigen Pfad angeben, einschließlich des Dateinamens im Pfad-Parameter:
Check if the file LineNumbers.txt exists
$file = "C:\Temp\TestFiles\LineNumbers.txt"
Test-Path -Path $file
Result
TrueIn diesem Fall überprüfen wir offensichtlich auf eine Datei, da wir den vollständigen Pfad einschließlich der Datei mit der Erweiterung angegeben haben. Wenn Sie jedoch nicht wissen, ob der Pfad zu einer Datei oder einem Ordner führt, können Sie den Parameter PathType angeben.
Angenommen, wir möchten wissen, ob der $profile auf eine Datei verweist. Dazu setzen wir den PathType auf Leaf:
Check if $profile is a file:
Test-Path -Path $profile -PathType leaf
Result
TruePowerShell überprüfen, ob der Ordner existiert
Genau wie bei einer Datei können wir auch in PowerShell überprüfen, ob ein Ordner existiert. Dafür müssen wir nur den Pfad zum Ordner angeben:
Test-Path -Path "c:\Temp\TestFiles"
Result
TrueWenn wir sicherstellen wollen, dass der Pfad auf einen Ordner zeigt, können wir den -PathType-Parameter hinzufügen und ihn auf container setzen. Auf diese Weise überprüft das Cmdlet Test-Path nicht nur, ob der Pfad existiert, sondern auch, ob es sich um einen Ordner handelt oder nicht:
Check if $profile is a folder:
Test-Path -Path $profile -PathType container
Result
FalseWenn Sie wissen möchten, ob der Ordner Dateien enthält, müssen Sie keine Zählung mit Get-ChildItem usw. durchführen. Wir können einfach Test-Path verwenden und ein Platzhalterzeichen * hinzufügen, um zu überprüfen, ob sich Dateien im angegebenen Pfad befinden:
Check if there are files in the folder
Test-Path -Path "c:\Temp\TestFiles\*"
Result
TrueBenutzen Sie Einschließen und Ausschließen
Wenn Sie testen möchten, ob ein Ordner bestimmte Dateien enthält oder nicht, können Sie die Parameter -include und -exclude verwenden. Auf diese Weise können wir überprüfen, ob ein Ordner einen bestimmten Dateityp oder eine beliebige Datei mit Ausnahme des angegebenen Dateityps enthält.
Zum Beispiel möchten wir überprüfen, ob sich Protokolldateien im folgenden Pfad befinden:
Check if the path contains .log files
Test-Path -Path "C:\Temp\TestFiles\*" -PathType leaf -Include *.log
Result
FalseWenn wir testen möchten, ob es Dateien außer der .log-Datei gibt, können wir die Ausschlussregel verwenden, zum Beispiel:
Check if the path contains .log files
Test-Path -Path "C:\Temp\TestFiles\*" -PathType leaf -Exclude *.log
Result
TrueÜberprüfen Sie, ob ein Pfad gültig ist
Wenn Sie in Ihrem Skript einen Pfad dynamisch erstellen, kann es eine gute Idee sein, zu testen, ob der generierte Pfad ein gültiger Pfad ist oder nicht. Dafür können wir den Parameter -IsValid verwenden. Dies überprüft nicht, ob der Pfad existiert oder nicht, sondern nur, ob es sich um einen gültigen Pfad handelt.
Zum Beispiel können wir überprüfen, ob alle Standorte in der PATH-Systemvariable gültige Pfade sind oder nicht:
$env:path -split ";" | Test-Path -IsValidOder vielleicht ist ein etwas einfacheres Beispiel:
$storage = "c:\temp\testfiles\"
$newFolder = "\LazyFolder"
$path = $newFolder + $storage # yes, the wrong way around
Test-Path -path $path -IsValid
Result
FalseÜberprüfen, ob eine Datei oder ein Ordner neuer oder älter als ein Datum ist.
Neben der Überprüfung, ob ein Pfad existiert oder nicht, können wir auch prüfen, ob eine Datei oder ein Ordner neuer oder älter als ein bestimmtes Datum ist. Dies ist besonders nützlich, wenn Sie wissen möchten, ob eine Datei aktualisiert wurde oder nicht.
Die Parameter -NewerThan und -OlderThan benötigen ein Datum oder ein Datetime-Objekt. Dies kann ein Datetime-String oder ein Datetime-Objekt sein. Um zu testen, ob der Ordner „testfiles“ neuer ist als der erste Februar, können wir Folgendes tun:
Test-Path -Path "C:\Temp\TestFiles\" -NewerThan "01 feb 2023"
Result
TrueAber wir können auch überprüfen, ob der Ordner älter als 3 Tage ist, zum Beispiel. Dafür erstellen wir zuerst ein Datumsobjekt in PowerShell, das wir dann im Test-Path Cmdlet verwenden können:
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 $dateNatürlich kannst du das Gleiche mit OlderThan machen.
Testen Sie Registrierungs-Pfade mit PowerShell
Das Test-Path Cmdlet in PowerShell kann auch verwendet werden, um zu überprüfen, ob Registrierungs-Pfade existieren oder nicht. Es gibt jedoch eine wichtige Sache zu beachten: Es kann die Registrierungseinträge nicht testen.
Wenn Sie sich den Screenshot unten ansehen, können wir testen, ob der Schlüssel Outlook (1) existiert oder nicht. Aber wir können nicht testen, ob der Eintrag "OutlookName" (2) existiert.
Um den Registrierungswert zu testen, müssen wir nur den Pfad des Werts wie folgt angeben:
Test-Path -Path "HKCU:\Software\Microsoft\Office\16.0\Outlook"Wie Sie in den untenstehenden Ergebnissen sehen können, existiert der Schlüsselpfad Outlook, aber der Pfad zum OutlookName-Eintrag kann nicht gefunden werden:
Zusammenfassung
Das Testen oder Überprüfen, ob Ressourcen vorhanden sind oder nicht, ist in jeder Programmiersprache oder Skriptsprache wichtig. Es hilft Ihnen, Fehler oder unerwartetes Verhalten in Ihren Skripten zu verhindern und ermöglicht Ihnen eine ordnungsgemäße Fehlerbehandlung.
Das Test-Path Cmdlet in PowerShell kann mehr tun, als die meisten denken, aber in allen Fällen gibt es nur true oder false aus.
Ich hoffe, Sie fanden diesen Artikel nützlich. Wenn Sie Fragen haben, hinterlassen Sie einfach einen Kommentar unten.


