Script/Batch Si el directorio tiene cierta antigüedad, ejecute .exe

Script/Batch Si el directorio tiene cierta antigüedad, ejecute .exe

Actualmente tengo un archivo por lotes que busca si existe una carpeta y luego, si existe, ejecuta el archivo ejecutable de desinstalación dentro de ella y luego instala el programa con un msi. Necesito modificarlo o simplemente convertirlo a PowerShell para que primero verifique la antigüedad de la carpeta antes de continuar. La edad que pensaba usar sería mayor de 12 meses. Un problema con el que me seguía encontrando era que necesitaba usar un comodín para verificar si el directorio existe debido a que es ligeramente diferente en cada computadora al final del nombre. Esto es lo que tengo hasta ahora sin incluir nada relacionado con la edad.

@echo off
IF exist C:\ProgramData\bomgar*  ( goto Uninstall ) ELSE ( goto Install )

:Uninstall
cd C:\ProgramData\bomgar* 

remove.exe

:Install
msiexec /i "C:\pathtomsi" 

:End
Echo Test Complete

Cualquier ayuda o consejo será muy apreciado.

Respuesta1

En Powershell, puedes usar el comodín de la misma manera. También puedes completar las comparaciones de fechas añadiendo 12 meses negativos:

$folders = Get-Item "C:\ProgramData\bomgar*" | Where-Object {
   $_.PSIsContainer -and $_.CreationTime -le (Get-Date).AddMonths(-12)
}

Si devuelve un resultado, desinstálelo; de lo contrario, instale:

If ($folders) {
   Foreach ($folder In $folders) {
      "UNINSTALL $($folder.FullName) - $($folder.CreationTime)"
   }
} Else {
   "INSTALL $($folder.FullName) - $($folder.CreationTime)"
}

Editar:posiblemente hubo un error lógico en mi mayor o igual a ( -ge). Intente cambiarlo a -le. También agregué líneas de salida para que haya cierta visibilidad sobre qué carpetas está seleccionando, solo para ayudarlo a depurar.

información relacionada