Questo sarà un breve post riguardante una domanda che ricevo o vedo posta piuttosto frequentemente e di cui vale la pena scrivere.
PowerShell Controlla se la cartella esiste
A volte quando si interagisce con il filesystem, per esempio quando si scrive un file di log su disco, è importante assicurarsi che la cartella di destinazione in cui stiamo per scrivere i file esista davvero per evitare che PowerShell lanci un’eccezione o, peggio, perda i dati.
PowerShell e PowerShell Core hanno un cmdlet nativo per controllare l’esistenza di un dato percorso
Test-Path -Path 'C:\Temp\'
Il cmdlet Test-Path prende un percorso come argomento e restituisce un True (valore booleano) se il percorso dato esiste. Questo può essere facilmente usato negli script per controllare se una data cartella esiste e crearla se non esiste come nel seguente esempio
# Define where to store logs$logPath = 'C:\MyLogPath\'# Create folder if does not existif (!(Test-Path -Path $logPath)){ $paramNewItem = @{ Path = $logPAth ItemType = 'Directory' Force = $true } New-Item @paramNewItem}
Questo è qualcosa che faccio così spesso che l’ho messo in uno dei miei modelli di script in modo da non preoccuparmene ogni volta che scrivo codice per un nuovo script.
Check if folder exists the .Net Way
La cmdlet Test-Path sta chiamando una funzione .Net integrata sotto il cofano, nel caso vogliate impressionare i vostri amici quanto sopra può essere riscritto così
# Define where to store logs$logPath = 'C:\MyLogPath\'# Create folder if does not existif (!(::Exists($logPath)){ ::CreateDirectory($logPath)}
Note conclusive
I due metodi per controllare se una cartella esiste che ho descritto nell’articolo sono equivalenti. Il secondo approccio è leggermente più performante ma rischia di rendere il vostro codice meno leggibile.
Dato il trascurabile guadagno di prestazioni tendo a preferire il primo metodo in quanto rende il codice molto più chiaro per qualcuno che sta prendendo in mano o modificando il mio lavoro.