novae7
Goto Top

Alte Dateien u. Unterordner in Ordnerstruktur automatisch entfernen

Hi,
Es geht ums Löschen von alten Sachen in vielen Unterordnern ;)

Hiho,

ich hab da ein kleines großes Problemchen ;)

Ich fass es mal kurz


Ich hab auf einem Fileserver nen Share liegen dieser wird als Austauschordner für die Einzelnen Abteilungen bei uns Verwendet

P:\[Gebäude]\[Abteilung]\[Username]\[ne menge krempel inklusive vieler ordner]

Nun soll ich ein Script oder Programm besorgen -.- welches alles unter [Username] älter als 14 Tage löscht

Mein erster Vorschlag war Delage32 auf P:\ direkt mit 14 Tage laufen zu lassen (dadurch würde alles alte verschwinden)
dabei bleiben aber alle Ordner erhalten.

Auch die die in den Posteingängen von der Person selbst sind.
Diese sollen aber mit Verschwinden.

Ordner löschen kommt bei P:\ direkt nicht in frage da die Ordnerstruktur so erhalten bleiben Soll.
Also wäre nurnoch die möglichkeit für jeden Nutzer einzeln einen Eintrag zu machen für seinen Ordner... und dann alte Datein inklusive Unterordner löschen...

Wären dann ca 450 User.....
Das mir das zuviel ist sollte verständlich sein ;)


Nun die Frage(n):

Kennt noch jemand eine Alternative wo ich angeben kann ab welcher Ordnertiefe er Ordner löschen soll die älter als X sind?
(anderes Programm, VBS o.ä.)
Oder lässt sich das eventuel doch mit Delage32 machen und nem Script das die Ordner durchgeht?


OS ist W2k3s mit NTFS


Danke im Vorraus face-smile
(hoffe das ist inhaltlich verständlich ;)

Content-Key: 120082

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

Printed on: May 10, 2024 at 22:05 o'clock

Mitglied: 80220
80220 Jul 09, 2009 at 08:51:28 (UTC)
Goto Top
Funktioniert die Suchfunktion bei dir nicht?

Dann probiere es mal hiermit:
Member: novae7
novae7 Jul 09, 2009 at 09:15:17 (UTC)
Goto Top
Doch die Funktioniert

Das doofe ist nur das ich Delage32 ja schon ausprobiert habe und es soweit auch funktioniert!

Nur bleiben Leere Ordner übrig!

Die will ich auch weg haben allerdings erst ab einer bestimmten ordner TIEFE und darauf bezog sichd as problem

Und für jeden Nutzer nen einzelnes Löschscript schreiben find ich wie gesagt sehr umständlich...
Darum ja die Frage hier
Member: mexx
mexx Jul 09, 2009 at 09:20:37 (UTC)
Goto Top
Ich werde bestimmt noch gebannt, weil ich ständig die Powershell von Microsoft lobe, aber damit kannst Du ein Script schreiben, welches Deine Aufgabe erfüllt.

Zuerst müsste das Script eine rekursive Suche des Ordners vornehmen. Dabei kannst Du zahlreiche Kriterien ansetzten, wie Deine 14 Tage. Selbst den Username kannst Du die Pfadsuche oder Filter einbringen. Ich vermute mal, dass Besitzrechte ein Thema sind. Kein Problem für die Powershell. Da kann man beim Zugriff auf den Ordner die Besitzinformationen mitliefern. Das Script kann dan prüfen, ob nach dem Löschen der alten Dateien noch Daten in den Ordner sind und wenn nicht dann kann der gesamte Ordner gelöscht werden.

Sowas ähnliches habe ich schon mit unseren Filesystem machen wollen. Hier mal der Code, der zum Einsatz kam. Vielleicht hilft er Dir. Aber sei vorsichtig damit!

cls
write-host "--- BEGIN --- " -foregroundcolor GREEN -backgroundcolor BLACK  
write-host "Setzte Variablen" -foregroundcolor GREEN -backgroundcolor BLACK  

#PRÜFPFAD
$CHKPATH = "D:\"  

#LOGFILES
$FEHLERFILE = "G:\fehler.txt"  
$ERFOLGFILE = "G:\okay.txt"  

#PRÜFDATEI
$EXPFILE = "G:\export.txt"  

write-host "Schreibe Prüfdatei" -foregroundcolor GREEN -backgroundcolor BLACK  
Get-ChildItem $CHKPATH -recurse | Where {$_.LastWriteTime -le "01.01.2008"} |Select-Object Name,Fullname,Length,Attributes,LastWriteTime |Export-CSV $EXPFILE –encoding "unicode"  

write-host "Lade Prüfdatei" $EXPFILE -foregroundcolor GREEN -backgroundcolor BLACK  
$FILES = Import-CSV $EXPFILE

write-host "Berechne Summe" $EXPFILE -foregroundcolor GREEN -backgroundcolor BLACK  
$FILES |Measure-Object length -sum

$MAX = $Files.count
$COUNTER = 0

write-host "Starte Vorgang" $EXPFILE -foregroundcolor GREEN -backgroundcolor BLACK  
foreach ($FILE in $FILES)
 {
  if ($FILE.Attributes -eq "Archive")  
   {
    $COUNTER = $COUNTER + 1 
    "Bearbeite " + $COUNTER + " von " + $MAX + ": " + $FILE.NAME    

    $DESTPATH = $file.fullname.split(":")  
    $DESTPATH = "G:" + $DESTPATH[1]    

    $temp = $DESTPATH.TRIMEND($FILE.NAME)
    $temp = $temp.trimend("\")  

    write-host "Erzeuge Datei" $DESTPATH  
    NEW-ITEM $temp -type directory -force
    COPY-ITEM $FILE.FULLNAME $DESTPATH -force
     if ($FILE.LENGTH -eq (GET-ITEM $DESTPATH).LENGTH)
      {
       write-host "ERFOLGREICH" -foregroundcolor GREEN -backgroundcolor BLACK  
       $FILE.FULLNAME |OUT-FILE $ERFOLGFILE -append
      }ELSE
      {
       write-host "FEHLER" -foregroundcolor RED -backgroundcolor BLACK  
       $FILE.FULLNAME |OUT-FILE $FEHLERFILE -append       
      }  
   }
 }
write-host "--- ENDE --- " -foregroundcolor GREEN -backgroundcolor BLACK  
Member: novae7
novae7 Jul 09, 2009 at 09:40:07 (UTC)
Goto Top
Danke ;)

Das geht in die richtung über die ich selbst grad nachgedacht hab face-smile

wenn ich das richtig verstehe geht er an der stelle die verzeichnisse durch

Get-ChildItem $CHKPATH -recurse | Where {$_.LastWriteTime -le "01.01.2008"} |Select-Object Name,Fullname,Length,Attributes,LastWriteTime |Export-CSV $EXPFILE –encoding "unicode"

schreibt die in eine datei und arbeitet dann mit einer schleife alle ordner durch zum löschen?

das hilft mir schonmal weiter face-smile

Danke!
Member: novae7
novae7 Jul 09, 2009, updated at Oct 18, 2012 at 16:38:41 (UTC)
Goto Top
So problem mehr oder weniger gelöst ;)

aufgrund der rekursiven abfrage bin ich dann auf ne andere such idee gekommen..
da das probelm ja nur die leeren ordner waren einfach mal "leere ordner löschen" in die suche eingeben...

da gibts dann auch die lösungen ;)
Alte Dateien löschen, aber nicht die 1. Ebene der Unterverzeichnisse


danke trotzdem an mexx für den denkanstoß


*und als gelöst makier*
Member: mexx
mexx Jul 09, 2009 at 10:01:03 (UTC)
Goto Top
Richtig. Man müsste die Ergebnismenge nicht in eine Datei schreiben. Es geht auch mit einer Variable, aber ich halte es für transparenter und schneller, wenn die Datenmenge aus der Datei geladen wird. Wichtig ist das Select-Object. Bei zu vielen Dateieigenschaften in der CSV kann beim Laden der Exportdatei ein Memory-Fehler auftauchen. Dann wäre das Arbeiten ohne Datei sinnvoller. Bei unseren 6 Millionen Dateien war das zumindest der fall.

Schau Dir erstmal die Exportdatei an und sag bescheid, wie Du Dir die weitere Verarbeitung des Ergebnises vorstellst.