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
(hoffe das ist inhaltlich verständlich ;)
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
(hoffe das ist inhaltlich verständlich ;)
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 120082
Url: https://administrator.de/contentid/120082
Ausgedruckt am: 22.11.2024 um 12:11 Uhr
6 Kommentare
Neuester Kommentar
Funktioniert die Suchfunktion bei dir nicht?
Dann probiere es mal hiermit:
Dann probiere es mal hiermit:
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!
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
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.
Schau Dir erstmal die Exportdatei an und sag bescheid, wie Du Dir die weitere Verarbeitung des Ergebnises vorstellst.