Test-Path

Determina se sono presenti tutti gli elementi di un percorso.

Sintassi

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>]

Descrizione

Il Test-Path cmdlet determina se tutti gli elementi del percorso esistono. Restituisce $true se tutti gli elementi esistono e $false se mancano. Può anche indicare se la sintassi del percorso è valida e se il percorso conduce a un contenitore o a un terminale o a un elemento foglia. Se Path è una stringa vuota o uno spazio vuoto, il cmdlet restituisce $false. Se Path è $null, una matrice di $null o una matrice vuota, il cmdlet restituisce un errore non irreversibile.

Esempio

Esempio 1: Testare un percorso

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

True

Questo comando controlla se tutti gli elementi nel percorso esistono, tra cui la C: directory, la Documents and Settings directory e la DavidC directory. Se mancano, il cmdlet restituisce $false. In caso contrario, viene restituito $true.

Esempio 2: Testare il percorso di un profilo

Test-Path -Path $profile

False

Test-Path -Path $profile -IsValid

True

Questi comandi testano il percorso del profilo di PowerShell.

Il primo comando determina l'esistenza di tutti gli elementi del percorso. Il secondo comando determina se la sintassi del percorso è corretta. In questo caso, il percorso è $false, ma la sintassi è corretta $true. Questi comandi usano $profile, la variabile automatica che punta alla posizione del profilo, anche se il profilo non esiste.

Per altre informazioni sulle variabili automatiche, vedere about_Automatic_Variables.

Esempio 3: Verificare se sono presenti file oltre a un tipo specificato

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

False

Questo comando controlla se nella directory Commercial Buildings sono presenti file diversi da .dwg file.

Il comando usa il parametro Path per specificare il percorso. Poiché il percorso include uno spazio, il percorso è racchiuso tra virgolette. L'asterisco alla fine del percorso indica il contenuto della directory Commercial Building. Con percorsi lunghi, ad esempio questo, digitare le prime lettere del percorso e quindi usare il tasto TAB per completare il percorso.

Il comando specifica il parametro Exclude per specificare i file da omettere dalla valutazione.

In questo caso, poiché la directory contiene solo .dwg file, il risultato è $false.

Esempio 4: Verificare la presenza di un file

Test-Path -Path $profile -PathType leaf

True

Questo comando controlla se il percorso archiviato nella $profile variabile porta a un file. In questo caso, poiché il profilo di PowerShell è un .ps1 file, il cmdlet restituisce $true.

Esempio 5: Controllare i percorsi nel Registro di sistema

Questi comandi vengono usati Test-Path con il provider del Registro di sistema di PowerShell.

Il primo comando verifica se il percorso del Registro di sistema della chiave del Registro di sistema Microsoft.PowerShell è corretto nel sistema. Se PowerShell è installato correttamente, il cmdlet restituisce $true.

Importante

Test-Path non funziona correttamente con tutti i provider di PowerShell. Ad esempio, è possibile usare Test-Path per testare il percorso di una chiave del Registro di sistema, ma se lo si usa per testare il percorso di una voce del Registro di sistema, restituisce $falsesempre , anche se la voce del Registro di sistema è presente.

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

Esempio 6: Verificare se un file è più recente di una data specificata

Questo comando usa il parametro dinamico NewerThan per determinare se il pwsh.exe file nel computer è più recente di July 13, 2009.

Il parametro NewerThan funziona solo nelle unità del file system.

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

True

Esempio 7: Testare un percorso con null come valore

L'errore restituito per null, matrice di null o matrice vuota è un errore non irreversibile. Può essere eliminato tramite -ErrorAction SilentlyContinue. Nell'esempio seguente vengono illustrati tutti i casi che restituiscono l'errore NullPathNotPermitted .

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

Esempio 8: Testare un percorso con spazi vuoti come valore

Quando viene specificata una stringa di spazi vuoti per il parametro Path , restituisce $false. Si tratta di una modifica da Windows PowerShell 5.1. Quando viene specificata una stringa vuota, Test-Path restituisce un errore. L'esempio seguente mostra spazi vuoti e stringhe vuote.

Test-Path ' '
Test-Path ''

False
False

Esempio 9: Testare un percorso che potrebbe avere un'unità non valida

Quando si testa un percorso che include una specifica di unità, il test della validità del percorso ha esito negativo se l'unità non esiste. È possibile anteporre all'unità il nome del provider per risolvere il problema.

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

False
True

Parametri

-Credential

Nota

Questo parametro non è supportato da alcun provider installato con PowerShell. Per rappresentare un altro utente o elevare le credenziali durante l'esecuzione di questo cmdlet, usare Invoke-Command.

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

-Exclude

Specifica gli elementi omessi da questo cmdlet. Il valore di questo parametro qualifica il parametro Path . Immettere un elemento o un modello di percorso, ad esempio *.txt. I caratteri jolly sono consentiti.

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

-Filter

Specifica un filtro nel formato o nella lingua del provider. Il valore di questo parametro qualifica il parametro Path . La sintassi del filtro, incluso l'uso di caratteri jolly, dipende dal provider. I filtri sono più efficienti rispetto ad altri parametri, perché il provider li applica quando recupera gli oggetti invece di filtrare gli oggetti dopo il recupero.

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

-Include

Specifica i percorsi di test di questo cmdlet. Il valore di questo parametro qualifica il parametro Path . Immettere un elemento o un modello di percorso, ad esempio *.txt. I caratteri jolly sono consentiti.

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

-IsValid

Indica che questo cmdlet verifica la sintassi del percorso, indipendentemente dal fatto che gli elementi del percorso esistano. Questo cmdlet restituisce $true se la sintassi del percorso è valida e $false in caso contrario. Se il percorso sottoposto a test include una specifica dell'unità, il cmdlet restituisce false quando l'unità non esiste. PowerShell restituisce false perché non conosce il provider di unità da testare.

Nota

In .NET 2.1 è stata introdotta una modifica che causa un'interruzione nelle API Path. Questi metodi non controllano più la presenza di caratteri di percorso non validi. Questa modifica ha causato una regressione in PowerShell in cui il controllo IsValid non verifica più i caratteri non validi. La regressione verrà risolta in una versione futura. Per altre informazioni, vedere Modifiche di rilievo in .NET Core 2.1.

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

-LiteralPath

Specifica un percorso da testare. A differenza di Path, il valore del parametro LiteralPath viene usato esattamente come viene digitato. Nessun carattere viene interpretato come carattere jolly. Se il percorso include caratteri che possono essere interpretati da PowerShell come sequenze di escape, è necessario racchiudere il percorso tra virgolette singole in modo che non vengano interpretate.

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

-NewerThan

Si tratta di un parametro dinamico reso disponibile dal provider FileSystem .

Specificare un'ora come oggetto DateTime .

Prima di PowerShell 7.5, il cmdlet ignora:

  • Questo parametro quando si specifica PathType come qualsiasi valore diverso da Any.
  • Parametro OlderThan se usato con questo parametro.
  • Questo parametro quando Path punta a una directory.

A partire da PowerShell 7.5, è possibile usare questo parametro con qualsiasi valore per il parametro PathType , per testare un intervallo di date con il parametro OlderThan e per testare l'età delle directory.

Per altre informazioni, vedere about_FileSystem_Provider.

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

-OlderThan

Si tratta di un parametro dinamico reso disponibile dal provider FileSystem .

Specificare un'ora come oggetto DateTime .

Prima di PowerShell 7.5, il cmdlet ignora:

  • Questo parametro quando si specifica PathType come qualsiasi valore diverso da Any.
  • Questo parametro quando viene usato con il parametro NewerThan .
  • Questo parametro quando Path punta a una directory.

A partire da PowerShell 7.5, è possibile usare questo parametro con qualsiasi valore per il parametro PathType , testare un intervallo di date con il parametro NewerThan e testare l'età delle directory.

Per altre informazioni, vedere about_FileSystem_Provider.

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

-Path

Specifica un percorso da testare. I caratteri jolly sono consentiti. Se il percorso include spazi, racchiuderlo tra virgolette.

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

-PathType

Specifica il tipo dell'elemento finale nel percorso. Questo cmdlet restituisce $true se l'elemento è del tipo specificato e $false , in caso contrario, . I valori validi per questo parametro sono:

  • Container - Elemento che contiene altri elementi, ad esempio una directory o una chiave del Registro di sistema.
  • Leaf - Elemento che non contiene altri elementi, ad esempio un file.
  • Any : contenitore o foglia.

Indica se l'elemento finale del percorso è di un determinato tipo.

Attenzione

Fino a PowerShell versione 6.1.2, quando le opzioni IsValid e PathType vengono specificate insieme, il Test-Path cmdlet ignora l'opzione PathType e convalida solo il percorso sintattico senza convalidare il tipo di percorso.

In base al problema 8607, la correzione di questo comportamento potrebbe essere una modifica di rilievo in una versione futura, in cui le opzioni IsValid e PathType appartengono a set di parametri separati e pertanto non possono essere usate insieme evitando questa confusione.

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

Input

String

È possibile inviare tramite pipe una stringa contenente un percorso, ma non un percorso letterale, a questo cmdlet.

Output

Boolean

Il cmdlet restituisce un valore booleano .

Note

I cmdlet che contengono il sostantivo Path (i cmdlet Path ) funzionano con il percorso e restituiscono i nomi in un formato conciso che tutti i provider di PowerShell possono interpretare. Sono progettati per l'uso in programmi e script in cui si desidera visualizzare tutto o parte di un percorso in un formato specifico. Usarli come usare Dirname, Normpath, Realpath, Join o altri manipolatori di percorso.

Test-Path è progettato per lavorare con i dati esposti da qualsiasi provider. Per elencare i provider disponibili nella sessione, digitare Get-PSProvider. Per altre informazioni, vedere about_Providers.