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-Key: 552219

Url: https://administrator.de/contentid/552219

Printed on: April 24, 2024 at 18:04 o'clock

Mitglied: 143127
Solution 143127 Feb 27, 2020, updated at Mar 02, 2020 at 09:50:57 (UTC)
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}  
Member: Deyavue88
Deyavue88 Mar 02, 2020 at 09:33:32 (UTC)
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
Mitglied: 143127
143127 Mar 02, 2020 updated at 09:50:19 (UTC)
Goto Top
Kleiner Verschreiber, ist oben korrigiert.
Member: Deyavue88
Deyavue88 Mar 02, 2020 at 11:13:28 (UTC)
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
Mitglied: 143127
143127 Mar 02, 2020 updated at 11:50:53 (UTC)
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
Member: Deyavue88
Deyavue88 Mar 02, 2020 at 12:57:38 (UTC)
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
Mitglied: 143127
143127 Mar 02, 2020 updated at 14:22:09 (UTC)
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}