В настоящее время у меня есть пакетный файл, который проверяет, существует ли папка, а затем, если она существует, запускает в ней exe-файл удаления, а затем устанавливает программу с помощью msi. Мне нужно изменить его или просто преобразовать в powershell, чтобы он сначала проверял возраст папки перед продолжением. Возраст, который я думал использовать, будет старше 12 месяцев. Проблема, с которой я постоянно сталкивался, заключалась в том, что мне нужно было использовать подстановочный знак для проверки существования каталога, поскольку он немного отличался на каждом компьютере в конце имени. Вот что у меня есть на данный момент, не включая ничего, связанного с возрастом.
@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
Любая помощь или совет будут высоко оценены.
решение1
В Powershell вы можете использовать тот же wild card. Вы также можете завершить сравнение дат, добавив отрицательные 12 месяцев:
$folders = Get-Item "C:\ProgramData\bomgar*" | Where-Object {
$_.PSIsContainer -and $_.CreationTime -le (Get-Date).AddMonths(-12)
}
Если результат есть, то удалите, в противном случае установите:
If ($folders) {
Foreach ($folder In $folders) {
"UNINSTALL $($folder.FullName) - $($folder.CreationTime)"
}
} Else {
"INSTALL $($folder.FullName) - $($folder.CreationTime)"
}
Редактировать:возможно, в моем больше или равно ( -ge
) была логическая ошибка. Попробуйте изменить его на -le
. Я также добавил выходные строки, чтобы было видно, какие папки он выбирает — просто чтобы помочь вам отладить.