Skript/Batch Wenn das Verzeichnis ein bestimmtes Alter hat, dann .exe ausführen

Skript/Batch Wenn das Verzeichnis ein bestimmtes Alter hat, dann .exe ausführen

Ich habe derzeit eine Batchdatei, die prüft, ob ein Ordner vorhanden ist. Wenn dies der Fall ist, führt sie die darin enthaltene Deinstallations-EXE aus und installiert dann das Programm mit einer MSI. Ich muss sie ändern oder einfach in Powershell konvertieren, damit sie zuerst das Alter des Ordners prüft, bevor sie fortfährt. Das Alter, das ich verwenden wollte, wäre älter als 12 Monate. Ein Problem, auf das ich immer wieder stieß, war, dass ich ein Platzhalterzeichen verwenden musste, um zu prüfen, ob das Verzeichnis vorhanden ist, da es auf jedem Computer am Ende des Namens etwas anders ist. Hier ist, was ich bisher habe, ohne Angaben zum Alter.

@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

Ich wäre für jede Hilfe und jeden Rat sehr dankbar.

Antwort1

In Powershell können Sie das Platzhalterzeichen genauso verwenden. Sie können die Datumsvergleiche auch vervollständigen, indem Sie negative 12 Monate hinzufügen:

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

Wenn ein Ergebnis zurückgegeben wird, deinstallieren Sie es, andernfalls installieren Sie:

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

Bearbeiten:es gab möglicherweise einen Logikfehler in meinem „größer als oder gleich (“ -ge). Versuchen Sie, es in zu ändern -le. Ich habe auch Ausgabezeilen hinzugefügt, damit man sehen kann, welche Ordner ausgewählt werden – nur um Ihnen beim Debuggen zu helfen.

verwandte Informationen