Este será un post corto respecto a una pregunta que me hacen o veo con bastante frecuencia y que merece la pena escribir.
PowerShell Comprueba si la carpeta existe
A veces, al interactuar con el sistema de archivos, por ejemplo al escribir un archivo de registro en el disco, es importante asegurarse de que la carpeta de destino en la que vamos a escribir los archivos realmente existe para evitar que PowerShell lance una excepción o, peor aún, que se pierdan datos.
PowerShell y PowerShell Core tienen un cmdlet nativo para comprobar la existencia de una ruta dada
Test-Path -Path 'C:\Temp\'
El cmdlet Test-Path tomará una ruta como argumento y devolverá un True (valor booleano) si la ruta dada existe. Esto puede usarse fácilmente en los scripts para comprobar si una carpeta dada existe y crearla si no es así como en el siguiente ejemplo
# 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}
Esto es algo que hago tan a menudo que lo he puesto en una de mis plantillas de script para no preocuparme de ello cada vez que escribo código para un nuevo script.
Comprobar si la carpeta existe al estilo .Net
El cmdlet Test-Path está llamando a una función incorporada de .Net bajo el capó, por si quieres impresionar a tus amigos lo anterior se puede reescribir así
# Define where to store logs$logPath = 'C:\MyLogPath\'# Create folder if does not existif (!(::Exists($logPath)){ ::CreateDirectory($logPath)}
Notas finales
Los dos métodos para comprobar si una carpeta existe que he descrito en el artículo son equivalentes. El segundo método es ligeramente más performante pero corre el riesgo de hacer su código menos legible.
Dada la insignificante ganancia de rendimiento tiendo a preferir el primer método ya que hace que el código sea mucho más claro para alguien que está tomando o modificando mi trabajo.