Este será um pequeno post sobre uma pergunta que me fazem ou que me fazem com bastante frequência e sobre a qual vale a pena escrever.
PowerShell Verificar se a pasta existe
Por vezes, ao interagir com o sistema de ficheiros, por exemplo, ao escrever um ficheiro de registo no disco, é importante certificar-se de que a pasta de destino para a qual vamos escrever os ficheiros existe realmente para evitar que o PowerShell lance uma excepção ou, pior ainda, perca dados.
PowerShell e PowerShell Core têm um cmdlet nativo para verificar a existência de um determinado caminho
Test-Path -Path 'C:\Temp\'
O cmdlet de Test-Path tomará um caminho como argumento e devolverá um True (valor booleano) se o caminho dado existir. Isto pode ser facilmente utilizado em scripts para verificar se uma determinada pasta existe e criar se não for como no exemplo seguinte
# 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}
Isto é algo que faço tão frequentemente que o coloquei num dos meus modelos de script para não me preocupar com ele cada vez que escrevo código para um novo script.
Verifica se a pasta .Net Way
A Test-Path cmdlet está a chamar uma função .Net incorporada debaixo da capa, no caso de querer impressionar os seus amigos o acima descrito pode ser reescrito assim
# Define where to store logs$logPath = 'C:\MyLogPath\'# Create folder if does not existif (!(::Exists($logPath)){ ::CreateDirectory($logPath)}
Notações de fecho
Os dois métodos para verificar se existe uma pasta que descrevi no artigo são equivalentes. A segunda abordagem é ligeiramente mais performante mas arrisca-se a tornar o seu código menos legível.
Dado o insignificante ganho de desempenho, tenho tendência a preferir o primeiro método pois torna o código muito claro para alguém que está a assumir ou a modificar o meu trabalho.