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
Please also mark the comments that contributed to the solution of the article
Content-Key: 290891
Url: https://administrator.de/contentid/290891
Printed on: April 20, 2024 at 09:04 o'clock
9 Comments
Latest comment
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 ...