Atualmente, tenho um arquivo em lote que verifica se existe uma pasta e, se existir, executa o exe de desinstalação dentro dela e instala o programa com um msi. Preciso alterá-lo ou apenas convertê-lo para o PowerShell para que primeiro verifique a idade da pasta antes de continuar. A idade que pensei que usaria seria superior a 12 meses. Um problema que sempre encontrei foi que preciso usar um curinga para verificar se o diretório existe devido ao fato de ser um pouco diferente em cada computador no final do nome. Aqui está o que tenho até agora, sem nada relacionado à idade incluído.
@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
Qualquer ajuda ou conselho seria muito apreciado.
Responder1
No Powershell, você pode usar o curinga da mesma forma. Você também pode completar as comparações de datas adicionando 12 meses negativos:
$folders = Get-Item "C:\ProgramData\bomgar*" | Where-Object {
$_.PSIsContainer -and $_.CreationTime -le (Get-Date).AddMonths(-12)
}
Se retornar um resultado, desinstale; caso contrário, instale:
If ($folders) {
Foreach ($folder In $folders) {
"UNINSTALL $($folder.FullName) - $($folder.CreationTime)"
}
} Else {
"INSTALL $($folder.FullName) - $($folder.CreationTime)"
}
Editar:possivelmente houve um erro lógico no meu valor maior ou igual a ( -ge
). Tente alterá-lo para -le
. Também adicionei linhas de saída para que haja alguma visibilidade sobre quais pastas estão sendo selecionadas - apenas para ajudá-lo a depurar.