Website-Suche

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.

Test-Path Parameter

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
True

Wir 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
True

In 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
True

PowerShell ü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
True

Wenn 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
False

Wenn 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
True

Benutzen 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
False

Wenn 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 -IsValid

Oder 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
True

Aber 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 $date

Natü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.