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

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

Printed on: April 20, 2024 at 09:04 o'clock

Mitglied: 122990
Solution 122990 Dec 14, 2015, updated at Dec 15, 2015 at 08:12:52 (UTC)
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
Member: ThunderbirdOP
ThunderbirdOP Dec 14, 2015 at 15:07:05 (UTC)
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!
Mitglied: 122990
122990 Dec 14, 2015 updated at 17:15:43 (UTC)
Goto Top
Guckst du oben die Änderung ...
Member: ThunderbirdOP
ThunderbirdOP Dec 15, 2015 at 08:48:42 (UTC)
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  
Mitglied: 122990
Solution 122990 Dec 15, 2015 updated at 12:01:45 (UTC)
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
Member: ThunderbirdOP
ThunderbirdOP Dec 15, 2015 at 12:03:16 (UTC)
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*"
Mitglied: 122990
Solution 122990 Dec 15, 2015 updated at 12:32:20 (UTC)
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
Member: ThunderbirdOP
ThunderbirdOP Dec 15, 2015 at 12:27:17 (UTC)
Goto Top
Gibt es einen besonderen Grund dafür, dass du "or" statt "and" verwendest?
Mitglied: 122990
122990 Dec 15, 2015 updated at 12:34:30 (UTC)
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 ...