Se hai bisogno di convalidare un percorso verso un file, una chiave del registro, un certificato o qualsiasi altro percorso di unità PowerShell, devi utilizzare il cmdlet Test-Path.
Il cmdlet Test-Path è un modo semplice ma utile per verificare rapidamente molte proprietà di un file e di altri elementi. Può verificare se un file esiste (o altri tipi di elementi), se una stringa è nel formato di percorso corretto, o anche se un elemento è più recente o più vecchio di un determinato momento.
In questo tutorial, imparerai tutto sul cmdlet Test-Path di PowerShell e come puoi utilizzarlo per migliorare i tuoi script di PowerShell.
Prerequisiti
Se desideri seguire gli esempi di questo tutorial, avrai bisogno di una cosa: PowerShell. Più precisamente, il tutorial utilizzerà PowerShell v7.03 su Windows 10, anche se molte delle tecniche che imparerai si applicheranno anche alle versioni precedenti.
Cosa fa il cmdlet Test-Path?
Il cmdlet Test-Path di PowerShell è uno dei comandi più semplici. È un comando che è presente in PowerShell fin dall’inizio e restituisce solo due valori: Vero o Falso.
Ma non lasciarti ingannare dalla semplicità; ti farà risparmiare così tanto tempo nella convalida delle informazioni nei tuoi script di PowerShell.
Pensa al cmdlet Test-Path di PowerShell come controllo di qualità quando si lavora con provider e unità di PowerShell. Quando si scrive uno script, si lavorerà comunemente con vari elementi contenuti nelle unità di PowerShell. Le unità di PowerShell come C:\, HKLM, Cert, e così via.
Test-Path
non funziona con tutte le unità di PS. Ad esempio, se si tenta di utilizzareTest-Path
su una chiave di registro, funzionerà. Se si tenta di utilizzareTest-Path
su un valore di registro, restituiràFalse
ogni volta.
Se sei curioso, esegui subito il cmdlet Get-PSDrive
in PowerShell e osserva tutte le unità di PS che compaiono per te.

Tutte queste unità hanno percorsi al loro interno come C:\Windows, HKLM:\Software, ecc. Quando si lavora con i percorsi all’interno degli script di PowerShell, è sempre buona pratica testare prima se il percorso è valido o se esiste o meno. Questo è ciò che fa Test-Path
di PowerShell.
Test-Path
definisce una condizione che restituisce True
o False
a seconda che una specifica condizione sia soddisfatta (tipicamente se un file/cartella, una chiave di registro, un certificato o anche una variabile esiste o meno).
Parametri e utilizzo di Test-Path.
Come molti altri cmdlet di PowerShell, il cmdlet Test-Path
ha vari parametri che ne modificano il comportamento. Ora vediamo ciascun parametro e mostriamo come funziona e quali risultati ci si può aspettare di vedere.
Path
Il parametro Path
è un parametro obbligatorio che si utilizza con ogni esecuzione di Test-Path
. Il parametro Path
definisce il percorso del PSDrive che si desidera verificare l’esistenza.
Ad esempio, se si desidera verificare se la cartella C:\Foo esiste o meno, si fornirà il percorso appropriato al parametro Path
. Quindi, a seconda che C:\Foo esista effettivamente o meno, Test-Path
restituirà True
o False
.
La stessa tecnica può essere utilizzata per qualsiasi percorso di elemento. Forse si desidera verificare se la chiave del registro HKLM:\Software\Foo esiste o meno. Basta utilizzare il percorso della chiave del registro con il parametro Path
.
Sappiate che tutte le tecniche dimostrate in questo tutorial funzioneranno con qualsiasi percorso di PowerShell.
Utilizzo di caratteri jolly
Cosa succede se non si è interessati se un percorso ha un valore letterale. Invece, si desidera solo verificare se un percorso corrisponde a un determinato modello. In tal caso, è possibile utilizzare caratteri jolly nel valore del parametro Path
.
Forse si desidera verificare se la cartella C:\Foo contiene una sottocartella che inizia con Bar. In tal caso, si potrebbe utilizzare un carattere jolly.
Una volta eseguito il comando sopra, Test-Path
verificherà l’esistenza di qualsiasi cartella che inizia con Bar e restituirà True
o False
a seconda che esista o meno una cartella corrispondente a tale criterio.
Gli asterischi (*
) corrispondono a uno o più caratteri, ma è anche possibile utilizzare il punto interrogativo (?
) per ottenere una corrispondenza più specifica e testare un singolo carattere.
Utilizzando lo scenario precedente come esempio, se la cartella C:\Foo\Bar1 esiste, è possibile testare la presenza di una sottocartella di Foo che inizia con Bar ed è esattamente di quattro caratteri utilizzando il seguente comando.
Se, per qualche motivo, si desidera utilizzare il parametro
Path
con caratteri jolly, ma si vuole corrispondere letteralmente a un carattere jolly come*
, è sempre possibile eseguire l’escape dei caratteri jolly con un accent grave (`).
LiteralPath
Il parametro LiteralPath
è quasi identico al parametro Path
con un’eccezione: non consente caratteri jolly. Utilizzando LiteralPath
, il valore del percorso verrà interpretato letteralmente.
Ad esempio, se si cerca di utilizzare un asterisco o un punto interrogativo all’interno del valore del percorso utilizzando LiteralPath
, Test-Path
ignorerà completamente i caratteri jolly e testerà letteralmente C:\Foo\Bar? come nell’esempio seguente.
Si consiglia di utilizzare
LiteralPath
come parametro di percorso predefinito se non è necessario utilizzare caratteri jolly per garantire cheTest-Path
testi il percorso previsto.
PathType
Per impostazione predefinita, quando si esegue il comando Test-Path
e si fornisce un percorso, restituirà True
se trova qualcosa in quel percorso. L’elemento con un percorso potrebbe essere un contenitore come una cartella, una chiave di registro, un archivio di certificati, ecc., o una figlia come un file, un valore di registro o un certificato.
È possibile forzare Test-Path
a essere più dettagliato e testare specificamente un contenitore o un elemento figlio utilizzando il parametro PathType
.
Test-Path utilizza il valore
Any
per il parametroPathType
per impostazione predefinita.
Ad esempio, se esiste una cartella in C:\Foo\Bar e si sta cercando un file in quel percorso, è possibile utilizzare il parametro PathType
come mostrato di seguito. Si desidera solo verificare se esiste un file chiamato C:\Foo\Bar.
Forse invece è necessario confermare se C:\Foo\Bar è effettivamente un file. In tal caso, si verificherebbe un contenitore.
Includi
Se si utilizza il parametro Path
e caratteri jolly, talvolta è necessario essere più specifici. In tal caso, è necessario utilizzare i parametri Include
ed Exclude
.
Supponiamo di avere le seguenti cartelle:
- C:\Foo\Bar1
- C:\Foo\Bar2
- C:\Foo\Bar3
Si desidera verificare se esiste una cartella che inizia con Bar che ha esattamente quattro caratteri come Bar1, Bar2, ecc.
Il comando precedente funziona bene, ma ora si desidera trovare solo le cartelle in C:\Foo chiamate Bar2. In tal caso, è possibile utilizzare il parametro Include
.
Il comando sopra ora controlla solo essenzialmente una singola cartella C:\Foo\Bar2. Probabilmente sarebbe meglio usare semplicemente Test-Path -Path 'C:\Foo\Bar2' -PathType Container
al suo posto.
Escludi
Il parametro Exclude
funziona in modo simile al parametro Include
, ma questa volta esclude i percorsi che corrispondono a una stringa.
Forse vuoi assicurarti che ci sia almeno un file all’interno della cartella C:\Foo e utilizzi il seguente comando:
Il comando sopra restituisce Vero
o Falso
se ci sono file in C:\Foo. Ma forse vuoi assicurarti che esistano file diversi da quelli con un’estensione di file txt
. In tal caso, potresti utilizzare il parametro Exclude
utilizzando un carattere jolly per escludere tutti i file con estensione txt
dal controllo.
Filtro
Secondo la documentazione di Microsoft, il parametro Filter
“specifica un filtro nel formato o nel linguaggio del provider. Il valore di questo parametro qualifica come parametro Path
. La sintassi del filtro, compreso l’uso dei caratteri jolly, dipende dal provider”.
Sebbene il parametro Filter
debba essere utilizzato con altri cmdlet come Get-Childitem
, ad esempio, è raramente, se mai, utilizzato con Test-Path
. Se hai trovato un buon utilizzo per il parametro Filter
, ti prego di contattarmi su Twitter all’indirizzo @adbertram.
Correlato: Ottieni-ChildItem: Elenco file, registro, certificati e altro come uno solo
NewerThan
Hai mai avuto bisogno di verificare il timestamp di un file e prendere una decisione in base a quello? Se sì, i parametri NewerThan
e OlderThan
risparmiano molto codice. Il parametro NewerThan
verifica se il timestamp di un elemento è più recente di una data specifica.
Il parametro NewerThan
accetta una stringa o un oggetto DateTime per rappresentare un timestamp da verificare. Ad esempio, per verificare se il file C:\Foo\bar.txt è stato creato dopo il 20 gennaio 2021, esegui Test-Path
come mostrato di seguito.
OlderThan
Il parametro OlderThan
è esattamente identico al parametro NewerThan
ma opposto. Questo parametro verifica se un elemento è più vecchio di una data specifica.
IsValid
Se hai mai costruito dinamicamente un percorso in uno script, conoscerai la difficoltà. A volte potresti digitare erroneamente una chiave o inserire un carattere speciale nel percorso; se è così, il parametro IsValid
è fatto per te.
Il parametro IsValid
è un parametro unico che trasforma Test-Path
, non in un cmdlet che verifica l’esistenza di un elemento, ma in uno che controlla la sintassi del percorso. Questo parametro conferma se un percorso è valido solo.
Ad esempio, potresti dover verificare se un percorso è sintatticamente valido. Stai lavorando con un paio di variabili e le concateni per costruire un percorso.
Quando si concatenano percorsi, utilizzare sempre il cmdlet
Join-Path
. Questo è solo a scopo di esempio!
Ora, per assicurarti che il percorso che hai creato dinamicamente sia valido, utilizza il parametro IsValid
come mostrato di seguito. Troverai che Test-Path
restituisce False
.
Il percorso abc:dffC:\
non è un percorso valido, consentendoti di creare una routine di convalida da questa situazione.
Se stai utilizzando PowerShell v6.1.2 o una versione precedente e stai utilizzando i parametri
IsValid
ePathType
insieme,Test-Path
ignorerà il parametroPathType
.
Credenziali
Anche se troverai il parametro Credential
in Test-Path
, potresti pensare di poterlo utilizzare per autenticarti alle unità PS come altro utente. Questa è un’assunzione valida, ma è sbagliata.
Purtroppo, il parametro Credential
non fa molto con il cmdlet Test-Path
. Microsoft consiglia di utilizzare il cmdlet Invoke-Command
e utilizzare il parametro Credential
lì se si desidera invocare Test-Path
con credenziali alternative.
Correlato: Invoke-Command: il modo migliore per eseguire codice remoto