thunderbirdop
Goto Top

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!)

 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

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

122990
Lösung 122990 14.12.2015, aktualisiert am 15.12.2015 um 09:12:52 Uhr
Goto Top
 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  
Gruß grexit
ThunderbirdOP
ThunderbirdOP 14.12.2015 um 16:07:05 Uhr
Goto Top
So, jetzt habe ich aber das Problem, dass in dem einen Ordner, der ignoriert werden soll, noch Unterordner existieren, in welchen wiederum Unterordner existieren. Aus diesen löscht er aber immernoch Dateien. Wie kann ich das beheben?

Vielen Dank im Vorraus!
122990
122990 14.12.2015 aktualisiert um 18:15:43 Uhr
Goto Top
Guckst du oben die Änderung ...
ThunderbirdOP
ThunderbirdOP 15.12.2015 um 09:48:42 Uhr
Goto Top
Mir ist gerade etwas aufgefallen: Du vergleichst ja in der If-Abfrage ob der Tag der Woche 1 oder 2 ist. Aber DayOfWeek gibt Namen, keine Zahlen aus. Ich musste noch ein[int] davor setzten, dann funktioniert es perfekt!

Hier nochmal der endgültige Code:

If([int](get-date).DayofWeek -match '[1-2]'){$d = -4}else{$d = -2}   
gci "C:\SCAN" -recurse | ?{!$_.PSIsContainer -and $_.DirectoryName -notlike "C:\SCAN\Rechnungen*" -and $_.CreationTime -lt (get-date).AddDays($d).Date} | Remove-item -Force  
122990
Lösung 122990 15.12.2015 aktualisiert um 13:01:45 Uhr
Goto Top
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 Enums
An 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}  
DayOfWeek-Enumeration
ThunderbirdOP
ThunderbirdOP 15.12.2015 um 13:03:16 Uhr
Goto Top
Funktioniert komsicherweise auch ohne das "__value". Was genau macht das denn? 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*"
122990
Lösung 122990 15.12.2015 aktualisiert um 13:32:20 Uhr
Goto Top
Zitat von @ThunderbirdOP:

Funktioniert komsicherweise auch ohne das "__value".
Wenn dann value__.
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 so
-notlike 'C:\SCAN\Rechnungen*' -and -notlike 'C:\SCAN\Bearbeitet*'
und so weiter
oder mit RegEx
-notmatch 'C:\\SCAN\\(Rechnungen|Bearbeitet|BlaBlaBla).*'  
Aber beachte, hier wird mit Reguar-Expressions gearbeitet, Sonderzeichen haben also besondere Bedeutung !
Regular Expressions Tutorial
ThunderbirdOP
ThunderbirdOP 15.12.2015 um 13:27:17 Uhr
Goto Top
Gibt es einen besonderen Grund dafür, dass du "or" statt "and" verwendest?
122990
122990 15.12.2015 aktualisiert um 13:34:30 Uhr
Goto Top
Zitat von @ThunderbirdOP:
Gibt es einen besonderen Grund dafür, dass du "or" statt "and" verwendest?
Sorry war gerade bei einem anderen Projekt, da ist mir das reingerutscht ...