Test-Path

Bestimmt, ob alle Elemente eines Pfads vorhanden sind.

Syntax

Test-Path
    [-Path] <String[]>
    [-Filter <String>]
    [-Include <String[]>]
    [-Exclude <String[]>]
    [-PathType <TestPathType>]
    [-IsValid]
    [-Credential <PSCredential>]
    [-OlderThan <DateTime>]
    [-NewerThan <DateTime>]
    [<CommonParameters>]
Test-Path
    -LiteralPath <String[]>
    [-Filter <String>]
    [-Include <String[]>]
    [-Exclude <String[]>]
    [-PathType <TestPathType>]
    [-IsValid]
    [-Credential <PSCredential>]
    [-OlderThan <DateTime>]
    [-NewerThan <DateTime>]
    [<CommonParameters>]
Test-Path
    [-Path] <string[]>
    [-Filter <string>]
    [-Include <string[]>]
    [-Exclude <string[]>]
    [-PathType <TestPathType>]
    [-IsValid]
    [-Credential <pscredential>]
    [<CommonParameters>]
Test-Path
    -LiteralPath <string[]>
    [-Filter <string>]
    [-Include <string[]>]
    [-Exclude <string[]>]
    [-PathType <TestPathType>]
    [-IsValid]
    [-Credential <pscredential>]
    [<CommonParameters>]

Beschreibung

Das Test-Path Cmdlet bestimmt, ob alle Elemente des Pfads vorhanden sind. Es wird zurückgegeben $true , wenn alle Elemente vorhanden sind und $false wenn keine vorhanden sind. Es kann auch erkennen, ob die Pfadsyntax gültig ist und ob der Pfad zu einem Container, einem Terminal- oder Blattelement führt. Wenn der Pfad ein Leerzeichen oder eine leere Zeichenfolge ist, gibt das Cmdlet zurück $false. Wenn der Pfad ist $null, ein Array von $null oder ein leeres Array, gibt das Cmdlet einen Fehler zurück, der nicht beendet wird.

Beispiele

Beispiel 1: Testen eines Pfads

Test-Path -Path "C:\Documents and Settings\DavidC"

True

Dieser Befehl überprüft, ob alle Elemente im Pfad vorhanden sind, einschließlich des C: Verzeichnisses, des Documents and Settings Verzeichnisses und des Verzeichnisses DavidC . Wenn keine vorhanden sind, gibt das Cmdlet zurück $false. Andernfalls wird $truezurückgegeben.

Beispiel 2: Testen des Pfads eines Profils

Test-Path -Path $profile

False

Test-Path -Path $profile -IsValid

True

Diese Befehle testen den Pfad des PowerShell-Profils.

Mit dem ersten Befehl wird bestimmt, ob alle Elemente im Pfad vorhanden sind. Mit dem zweiten Befehl wird bestimmt, ob die Syntax des Pfads gültig ist. In diesem Fall ist $falseder Pfad , aber die Syntax ist richtig $true. Diese Befehle verwenden $profile, die automatische Variable, die auf den Speicherort für das Profil verweist, auch wenn das Profil nicht vorhanden ist.

Weitere Informationen zu automatischen Variablen finden Sie unter about_Automatic_Variables.

Beispiel 3: Überprüfen, ob neben einem angegebenen Typ Dateien vorhanden sind

Test-Path -Path "C:\CAD\Commercial Buildings\*" -Exclude *.dwg

False

Mit diesem Befehl wird überprüft, ob im Verzeichnis Commercial Buildings andere Dateien als .dwg Dateien vorhanden sind.

Der Befehl verwendet den Path-Parameter , um den Pfad anzugeben. Da der Pfad ein Leerzeichen enthält, wird der Pfad in Anführungszeichen eingeschlossen. Das Sternchen am Ende des Pfads gibt den Inhalt des Verzeichnisses %%amp;quot;Commercial Building%%amp;quot; an. Geben Sie bei langen Pfaden wie diesem die ersten Buchstaben des Pfads ein, und verwenden Sie dann die TAB-TASTE, um den Pfad zu vervollständigen.

Der Befehl gibt den Exclude-Parameter an, um Dateien anzugeben, die bei der Auswertung ausgelassen werden sollen.

In diesem Fall ist das Ergebnis $false, da das Verzeichnis nur .dwg Dateien enthält.

Beispiel 4: Suchen nach einer Datei

Test-Path -Path $profile -PathType leaf

True

Dieser Befehl überprüft, ob der in der $profile Variablen gespeicherte Pfad zu einer Datei führt. In diesem Fall gibt das Cmdlet $truezurück, da das PowerShell-Profil eine .ps1 Datei ist.

Beispiel 5: Überprüfen von Pfaden in der Registrierung

Diese Befehle werden mit dem PowerShell-Registrierungsanbieter verwendet Test-Path .

Der erste Befehl testet, ob der Registrierungspfad des Registrierungsschlüssels Microsoft.PowerShell auf dem System korrekt ist. Wenn PowerShell ordnungsgemäß installiert ist, gibt das Cmdlet zurück $true.

Wichtig

Test-Path funktioniert nicht ordnungsgemäß mit allen PowerShell-Anbietern. Sie können beispielsweise verwenden Test-Path , um den Pfad eines Registrierungsschlüssels zu testen. Wenn Sie ihn jedoch zum Testen des Pfads eines Registrierungseintrags verwenden, wird immer zurückgegeben $false, auch wenn der Registrierungseintrag vorhanden ist.

Test-Path -Path "HKLM:\Software\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell"

True

Test-Path -Path "HKLM:\Software\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell\ExecutionPolicy"

False

Beispiel 6: Testen, ob eine Datei neuer als ein angegebenes Datum ist

Dieser Befehl verwendet den dynamischen Parameter NewerThan , um zu bestimmen, ob die pwsh.exe Datei auf dem Computer neuer als July 13, 2009ist.

Der Parameter NewerThan funktioniert nur in Dateisystemlaufwerken.

Test-Path $pshome\pwsh.exe -NewerThan "July 13, 2009"

True

Beispiel 7: Testen eines Pfads mit NULL als Wert

Der fehler, der für null, array of null oder empty array zurückgegeben wird, ist ein fehler, der nicht beendet wird. Sie kann mithilfe -ErrorAction SilentlyContinuevon unterdrückt werden. Das folgende Beispiel zeigt alle Fälle, in denen der NullPathNotPermitted Fehler zurückgegeben wird.

Test-Path $null
Test-Path $null, $null
Test-Path @()

Test-Path : Cannot bind argument to parameter 'Path' because it is null.
At line:1 char:11
+ Test-Path $null
+           ~~~~~
    + CategoryInfo          : InvalidData: (:) [Test-Path], ParameterBindingValidationException
    + FullyQualifiedErrorId : ParameterArgumentValidationErrorNullNotAllowed,Microsoft.PowerShell.Commands.TestPathCommand

Beispiel 8: Testen eines Pfads mit Leerzeichen als Wert

Wenn eine Leerzeichenzeichenfolge für den Path-Parameter bereitgestellt wird, wird zurückgegeben $false. Dies ist eine Änderung gegenüber Windows PowerShell 5.1. Wenn eine leere Zeichenfolge bereitgestellt wird, Test-Path wird ein Fehler zurückgegeben. Das folgende Beispiel zeigt Leerzeichen und leere Zeichenfolgen.

Test-Path ' '
Test-Path ''

False
False

Beispiel 9: Testen eines Pfads, der möglicherweise ein ungültiges Laufwerk aufweist

Wenn Sie einen Pfad testen, der eine Laufwerksspezifikation enthält, schlägt das Testen der Gültigkeit des Pfads fehl, wenn das Laufwerk nicht vorhanden ist. Sie können dem Laufwerk den Anbieternamen voran stellen, um dieses Problem zu umgehen.

Test-Path -IsValid Z:\abc.txt
Test-Path -IsValid FileSystem::Z:\abc.txt

False
True

Parameter

-Credential

Hinweis

Dieser Parameter wird von anbietern, die mit PowerShell installiert sind, nicht unterstützt. Verwenden Sie Invoke-Command, um die Identität eines anderen Benutzers zu annehmen oder Ihre Anmeldeinformationen beim Ausführen dieses Cmdlets zu erhöhen.

Type:PSCredential
Position:Named
Default value:None
Required:False
Accept pipeline input:True
Accept wildcard characters:False

-Exclude

Gibt Elemente an, die von diesem Cmdlet weggelassen werden. Der Wert dieses Parameters qualifiziert den Path-Parameter. Geben Sie ein Path-Element oder -Muster ein, z *.txt. B. . Platzhalterzeichen sind zulässig.

Type:String[]
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:True

-Filter

Gibt einen Filter im Format oder der Sprache des Anbieters an. Der Wert dieses Parameters qualifiziert den Path-Parameter. Die Syntax des Filters, einschließlich der Verwendung von Wildcardzeichen, hängt vom Anbieter ab. Filter sind effizienter als andere Parameter, da der Anbieter sie anwendet, wenn er die Objekte abruft, anstatt die Objekte nach dem Abrufen von PowerShell filtern zu lassen.

Type:String
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:True

-Include

Gibt Pfade an, die von diesem Cmdlet getestet werden. Der Wert dieses Parameters qualifiziert den Path-Parameter. Geben Sie ein Path-Element oder -Muster ein, z *.txt. B. . Platzhalterzeichen sind zulässig.

Type:String[]
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:True

-IsValid

Gibt an, dass dieses Cmdlet die Syntax des Pfads testet, unabhängig davon, ob die Elemente des Pfads vorhanden sind. Dieses Cmdlet gibt zurück $true , wenn die Pfadsyntax gültig ist und $false wenn dies nicht der Fall ist. Wenn der getestete Pfad eine Laufwerksspezifikation enthält, gibt das Cmdlet false zurück, wenn das Laufwerk nicht vorhanden ist. PowerShell gibt false zurück, da es nicht weiß, welcher Laufwerkanbieter getestet werden soll.

Hinweis

In .NET 2.1 wurde ein Breaking Change in den Pfad-APIs eingeführt. Diese Methoden überprüfen nicht mehr auf ungültige Pfadzeichen. Diese Änderung führte zu einer Regression in PowerShell, bei der die IsValid-Überprüfung nicht mehr auf ungültige Zeichen testet. Die Regression wird in einem zukünftigen Release behandelt. Weitere Informationen finden Sie unter Breaking Changes in .NET Core 2.1.

Type:SwitchParameter
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-LiteralPath

Gibt den zu testenden Pfad an. Im Gegensatz zu Path wird der Wert des LiteralPath-Parameters genau so verwendet, wie er eingegeben wird. Es werden keine Zeichen als Platzhalter interpretiert. Wenn der Pfad Zeichen enthält, die von PowerShell als Escapesequenzen interpretiert werden können, müssen Sie den Pfad in ein einfaches Anführungszeichen einschließen, damit sie nicht interpretiert werden.

Type:String[]
Aliases:PSPath, LP
Position:Named
Default value:None
Required:True
Accept pipeline input:True
Accept wildcard characters:False

-NewerThan

Dies ist ein dynamischer Parameter, der vom FileSystem-Anbieter zur Verfügung gestellt wird.

Geben Sie eine Uhrzeit als DateTime-Objekt an.

Vor PowerShell 7.5 ignoriert das Cmdlet Folgendes:

  • Dieser Parameter, wenn Sie PathType als einen anderen Wert als Anyangeben.
  • Der OlderThan-Parameter , wenn er mit diesem Parameter verwendet wird.
  • Dieser Parameter, wenn Path auf ein Verzeichnis zeigt.

Ab PowerShell 7.5 können Sie diesen Parameter mit einem beliebigen Wert für den PathType-Parameter verwenden, um einen Datumsbereich mit dem OlderThan-Parameter zu testen und das Alter von Verzeichnissen zu testen.

Weitere Informationen finden Sie unter about_FileSystem_Provider.

Type:Nullable<T>[[DateTime]]
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-OlderThan

Dies ist ein dynamischer Parameter, der vom FileSystem-Anbieter zur Verfügung gestellt wird.

Geben Sie eine Uhrzeit als DateTime-Objekt an.

Vor PowerShell 7.5 ignoriert das Cmdlet Folgendes:

  • Dieser Parameter, wenn Sie PathType als einen anderen Wert als Anyangeben.
  • Dieser Parameter, wenn er mit dem Parameter NewerThan verwendet wird.
  • Dieser Parameter, wenn Path auf ein Verzeichnis verweist.

Ab PowerShell 7.5 können Sie diesen Parameter mit einem beliebigen Wert für den PathType-Parameter verwenden, um einen Datumsbereich mit dem Parameter NewerThan zu testen und das Alter von Verzeichnissen zu testen.

Weitere Informationen finden Sie unter about_FileSystem_Provider.

Type:Nullable<T>[[DateTime]]
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Path

Gibt den zu testenden Pfad an. Platzhalterzeichen sind zulässig. Wenn der Pfad Leerzeichen enthält, müssen Sie ihn in Anführungszeichen einschließen.

Type:String[]
Position:0
Default value:None
Required:True
Accept pipeline input:True
Accept wildcard characters:True

-PathType

Gibt den Typ des letzten Elements im Pfad an. Dieses Cmdlet gibt zurück $true , wenn das Element vom angegebenen Typ ist und $false nicht. Zulässige Werte für diesen Parameter:

  • Container - Ein Element, das andere Elemente enthält, z. B. ein Verzeichnis oder einen Registrierungsschlüssel.
  • Leaf - Ein Element, das keine anderen Elemente enthält, z. B. eine Datei.
  • Any – Entweder ein Container oder ein Blatt.

Gibt an, ob das letzte Element im Pfad einen bestimmten Typ aufweist.

Achtung

Bis zur PowerShell-Version 6.1.2 ignoriert das Cmdlet den PathType-Switch und überprüft nur den syntaktischen Pfad, Test-Path ohne den Pfadtyp zu überprüfen.

Gemäß Problem #8607 kann das Beheben dieses Verhaltens eine breaking Change in einer zukünftigen Version sein, bei der die IsValid - und PathType-Switches zu separaten Parametersätzen gehören und daher nicht zusammen verwendet werden können, um diese Verwirrung zu vermeiden.

Type:TestPathType
Aliases:Type
Accepted values:Any, Container, Leaf
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

Eingaben

String

Sie können eine Zeichenfolge, die einen Pfad, aber keinen Literalpfad enthält, an dieses Cmdlet übergeben.

Ausgaben

Boolean

Das Cmdlet gibt einen booleschen Wert zurück.

Hinweise

Die Cmdlets, die das Pfad-Substantiv (die Pfad-Cmdlets) enthalten, arbeiten mit path und geben die Namen in einem präzisen Format zurück, das alle PowerShell-Anbieter interpretieren können. Sie sind für die Verwendung in Programmen und Skripts konzipiert, in denen Sie einen Pfad ganz oder teilweise in einem bestimmten Format anzeigen möchten. Verwenden Sie sie genauso wie Dirname, Normpath, Realpath, Join oder andere Pfadmanipulatoren.

Ist Test-Path für die Arbeit mit den Daten konzipiert, die von jedem Anbieter verfügbar gemacht werden. Um die in Ihrer Sitzung verfügbaren Anbieter aufzulisten, geben Sie ein Get-PSProvider. Weitere Informationen finden Sie unter about_Providers.