Powershell: TMP Ordner löschen aber bestimmte Unterordner ignorieren, bzw. nur teilweise leeren
Hallo Leute,
Ich habe mittlerweile folgendes Script laufen, um einen TMP-Ordner regelmäßig zu löschen: (vielend Dank nochmals an Grexit!)
Jetzt brauche ich eine Version für einen Scan Ordner. Allerdings hänge ich an folgendem Problem:
Ich habe 9 Ordner im Scan Ordner. Diese sollen nicht gelöscht werden, der Inhalt derer aber schon! Einer davon soll zusätzlich nicht geleert werden, d.h. er soll völlig ignoriert werden.
Was muss ich ändern um das zu erreichen?
Mit freundlichen Grüßen
ThunderbirdOP
Ich habe mittlerweile folgendes Script laufen, um einen TMP-Ordner regelmäßig zu löschen: (vielend Dank nochmals an Grexit!)
If((get-date).DayofWeek -match '[1-2]'){$d = -4}else{$d = -2}
gci "C:\TMP" | ?{$_.Name -notmatch "IT_AntiScript*" -and $_.CreationTime -lt (get-date).AddDays($d).Date} | Remove-item -recurse -Force
Jetzt brauche ich eine Version für einen Scan Ordner. Allerdings hänge ich an folgendem Problem:
Ich habe 9 Ordner im Scan Ordner. Diese sollen nicht gelöscht werden, der Inhalt derer aber schon! Einer davon soll zusätzlich nicht geleert werden, d.h. er soll völlig ignoriert werden.
Was muss ich ändern um das zu erreichen?
Mit freundlichen Grüßen
ThunderbirdOP
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 290891
Url: https://administrator.de/forum/powershell-tmp-ordner-loeschen-aber-bestimmte-unterordner-ignorieren-bzw-nur-teilweise-leeren-290891.html
Ausgedruckt am: 15.04.2025 um 08:04 Uhr
9 Kommentare
Neuester Kommentar

If((get-date).DayofWeek -match '[1-2]'){$d = -4}else{$d = -2}
gci "C:\TMP" -recurse | ?{!$_.PSIscontainer -and $_.DirectoryName -notlike 'c:\TMP\Ausgeschlossen*' -and $_.CreationTime -lt (get-date).AddDays($d).Date} | Remove-item -Force

Guckst du oben die Änderung ...

Du vergleichst ja in der If-Abfrage ob der Tag der Woche 1 oder 2 ist. Aber DayOfWeek gibt Namen, keine Zahlen aus.
Das stimmt so nicht ganz, denn DayOfWeek ist eine Variable vom Typ Enum bei dem Strings zu Werten zugeordnet werden. Mein Fehler war hier nur das -match wegen den RegularExpressions hier die Strings zum Vergleich heranzieht nicht die tatsächlichen Werte des EnumsAn die tatsächlichen Werte des Enums kommt man hier mit der Eigenschaft value__
If([int](get-date).DayofWeek.value__ -match '[1-2]'){$d = -4}else{$d = -2}

Wenn dann value__.
Klar funktioniert das weil du es ja schon zu einem integer konvertierst, kannst du beiden verwenden
und so weiter
oder mit RegEx
Aber beachte, hier wird mit Reguar-Expressions gearbeitet, Sonderzeichen haben also besondere Bedeutung !
Regular Expressions Tutorial
Klar funktioniert das weil du es ja schon zu einem integer konvertierst, kannst du beiden verwenden
Was genau macht das denn?
Kannst du oben in der Referenz zum Enum-Wert nachlesen.Ich habe noch ein Anliegen: Ich muss mehrere Ordner als Ausnahme hinzufügen, wie muss ich das machen?
Vielleicht so?
-notlike "C:\SCAN\Rechnungen*"|"C:\SCAN\Bearbeitet*"
nein entweder soVielleicht so?
-notlike "C:\SCAN\Rechnungen*"|"C:\SCAN\Bearbeitet*"
-notlike 'C:\SCAN\Rechnungen*' -and -notlike 'C:\SCAN\Bearbeitet*'
oder mit RegEx
-notmatch 'C:\\SCAN\\(Rechnungen|Bearbeitet|BlaBlaBla).*'
Regular Expressions Tutorial

Sorry war gerade bei einem anderen Projekt, da ist mir das reingerutscht ...