deyavue88
Goto Top

Powershell script um Veraltete Software Cache Ordner zu löschen

Hallo Administrator Forum Community,

Ich bin dabei mich im Thema Powershell neu einzuarbeiten, da ich in Zukunft viel mit Powershell Arbeiten soll.
Nun stehe ich leider vor einer Aufgabe die mir ein wenig Kopfzerbrechen bringt, wie diese zu lösen ist.

Ich soll in dem Ordner "C:\Winodows\ccmcache" Unterordner durchsuchen, nach einer bestimmten Datei. Der Name der Datei ist bis auf die Version in dem Namen immer gleich.
Anhand von dieser Datei sehe ich, welche Software mit welcher Version das ist.

Sollte diese Datei gefunden werden, soll der Hauptordner in dem die Datei im ".\ccmcache" liegt gelöscht werden. Wobei die aktuellste Datei (Softwareversion) wiederum nicht gelöscht werden soll.
Ich soll dort aber nur nach einer Software suchen. die verschiedenen Ordner machen nur die Verschiedenen Versionen.

Ich weis wohl wie ich diese Datei finde und auch wie ich den Hauptordner, in dem die Datei liegt löschen werde.
Mein Problem ist der Vergleich, nach der Version und wie die aktuellste gefunden wird.

Die Damen der Dateien lauten übrigens beispielsweise "Google-Chrome_80.0.3987.122_DE_X86.mst", wobei dann natürlich die 80.0.3987.122 die Version ist.

Hat dort vielleicht einer von euch eine Idee, wie dies zu lösen ist?

Liebe Grüße Sebastian

Content-ID: 552219

Url: https://administrator.de/forum/powershell-script-um-veraltete-software-cache-ordner-zu-loeschen-552219.html

Ausgedruckt am: 02.01.2025 um 14:01 Uhr

143127
Lösung 143127 27.02.2020, aktualisiert am 02.03.2020 um 10:50:57 Uhr
Goto Top
gci 'c:\windows\ccmcache' -file -Filter 'Google-Chrome_*.mst' -Force -Recurse | sort {$_.Basename.split('_')[1]} -Desc | select -Skip 1 | %{Remove-Item $_.DirectoryName -Recurse -verbose}  
Deyavue88
Deyavue88 02.03.2020 um 10:33:32 Uhr
Goto Top
Hallo vibrations,

auch wenn es ein wenig spät kommt, erst ein mal vielen Dank, für deine Antwort. Ich habe damit nur ein Problem, es werden keine Unterordner durchsucht und die Ordner werden nicht gelöscht.
Wenn ich die Unterordner durchsuche (gci $ccmcachepath -file -Filter "SV_SVIS-Offline*.mst" -Force -Recurse), findet er die Dateien, ich bekomme dann aber die Die Fehlermeldung ("Das Argument kann nicht an den Parameter "Path" gebunden werden, da es NULL ist"). Ohne die Remove funktion findet er aber die Dateien.
könntest du mir noch ein mal einen Tipp geben?

Liebe Grüße Sebastian
143127
143127 02.03.2020 aktualisiert um 10:50:19 Uhr
Goto Top
Kleiner Verschreiber, ist oben korrigiert.
Deyavue88
Deyavue88 02.03.2020 um 12:13:28 Uhr
Goto Top
Hallo Vibrations,

wie bekomme ich es hin, das der die Dateien die er gefunden hat, sortiert und die höhste Version überspringt?
Aktuell sortiert er, wenn ich es richtig sehe, den Ordnernamen, in dem die Datei liegt.

Liebe Grüße Sebastian
143127
143127 02.03.2020 aktualisiert um 12:50:53 Uhr
Goto Top
Zitat von @Deyavue88:
wie bekomme ich es hin, das der die Dateien die er gefunden hat, sortiert und die höhste Version überspringt?
Macht das Skript schon!
Aktuell sortiert er, wenn ich es richtig sehe, den Ordnernamen, in dem die Datei liegt.
Nein! Es wird anhand der Versionsnummer sortiert, siehst du ja anhand des Sort-Befehls. Und dahinter folgt dann ein select -skip 1 das die höchste Nummer überspringt
Deyavue88
Deyavue88 02.03.2020 um 13:57:38 Uhr
Goto Top
Du hast vollkommen recht face-smile, du hatte ich Tomaten auf den Augen face-smile
Ich danke dir.

Nur eine Frage hätte ich noch sagen wir mal, die Datei liegt nicht in dem Ordner "C:\Winodows\ccmcache\Unterordner", sondern in dem Unterordner Files Ordner, "C:\Winodows\ccmcache\Unterordner\Files", wie würde das denn dann aussehen?

Liebe Grüße Sebastian
143127
143127 02.03.2020 aktualisiert um 15:22:09 Uhr
Goto Top
wie würde das denn dann aussehen?

Einfach stattdessen $_.Directory.Parent.Fullname nutzen

gci 'c:\windows\ccmcache' -file -Filter 'Google-Chrome_*.mst' -Force -Recurse | sort {$_.Basename.split('_')[1]} -Desc | select -Skip 1 | %{Remove-Item $_.Directory.Parent.Fullname -Recurse -verbose}