Daten "ausmisten" Automatisieren

TuberPlays

Lt. Junior Grade
Registriert
Jan. 2016
Beiträge
439
Hallo Zusammen,

ich suche für meinen Fileserver eine Software, welche das aufräumen von Dateien automatisiert.

Kurz zum Aufbau:
Der Fileserver ist ein Windows Server 2016, welche die Dateien per SMB Freigabe an die Clients verteilt. Der Ordneraufbau sieht ungefähr so aus (aus der Sicht des Fileservers):

Aufbau.png
Mit Worten erklärt: Auf dem Server gibt es in einem Ordner "Projekte", mit Unterordnern, welche nach dem Namen des Projektes benannt sind. In diesen Ordnern liegen die Dateien und Ordner, die zu einem Projekt gehören, so wie ein Ordner "Static".

Was ich nun möchte:
Die einzelnen Dateien/Ordnern in den Projektordnern, sollen gelöscht werden, wenn diese zum Beispiel älter als 30 Tage sind, der Ordner "Static" mit seinem Inhalt soll allerdings nicht angefasst werden, der Ordner "Blah" aber gelöscht, wenn zu alt. Die Auswahl, ob Dateien dieses Alter erreicht haben, soll nach dem Erstelldatum (nicht letzter Zugriff) getroffen werden.

Kennt jemand eine entsprechende Software, die das kann?

Die allgemeinen Anforderungen sind noch wie folgt:

Must haves:
  • Das oben beschriebene
  • Automatisierbar (zum Beispiel einen solchen Lauf jeden Mittwoch um 20 Uhr fahren)
  • Berichte, wann welche Dateien gelöscht wurden

Nice to have
  • Versenden der Berichte (bevorzugt per Mail)
  • Eine Auswertung, des Speicherplatzes, welcher beim Bereinigen freigegeben wurde
  • Versenden von Warnungen, welche Dateien beim nächsten Lauf gelöscht werden ("Die Datei XYZ.zip und der Ordner ABC werden automatisch gelöscht, da diese 30 Tage alt sind"
  • Den Projektordner löschen, wenn keine Dateien mehr darin enthalten sind und es keinen "Static" Ordner gibt

Kennt jemand eine Software, welche diese Funktionen so bereitstellen kann? Das was ich bisher gefunden habe, kann entweder keien Whitelists, kann nicht mit Unterordnern umgehen, oder ist zu komplex, wenn ich das auf die Unterordner ausdehnen will (für jeden Projektordner musste dort eine eigene Aufgabe angelegt werden).

Grüße und Danke!
 
Wenn du die Nomenklatur deiner Ordner systematisch hinbekommst, solltest du dich vielleicht mit .bat Erstellen und DOS Befehlen auseinandersetzen. Mit etwa einer Seite Code sollten sich die meisten deiner Wünsche leicht (auch für fast Laien) realisieren lassen. Weitere Hilfe kann ich meinerseits leider nicht gewähren.
 
TuberPlays schrieb:
Was ich nun möchte:
Die einzelnen Dateien/Ordnern in den Projektordnern, sollen gelöscht werden, wenn diese zum Beispiel älter als 30 Tage sind, der Ordner "Static" mit seinem Inhalt soll allerdings nicht angefasst werden, der Ordner "Blah" aber gelöscht, wenn zu alt. Die Auswahl, ob Dateien dieses Alter erreicht haben, soll nach dem Erstelldatum (nicht letzter Zugriff) getroffen werden.

Sollen auch volle Ordner gelöscht werden, wenn diese alt genug sind?

Soll es wirklich nach Erstelltdatum sein? Nicht nach "Zuletzt bearbeitet"?
 
Mal SO einen Einwurf :

Unter Windows kann man doch ein Verfallsdatum der Dateien angeben ! Oder irre Ich ?
 
Es hat mich einige Zeit gekostet (mehr als die 39min seit meinem letzten Post). Aber es ist scheinbar vollbracht.
PowerShell:
$WhatIfPreference = $true
#####################################################################
#to be filled in...
$sourcePathRoot = "D:\Projekte"
$maximumAge = 30
$filter = "Static"
$logfilePath = "C:"
$toBeRemovedLogfilePath = "C:"
#####################################################################

##############################################################################
$From = "absender@gmail.com"
$To = "empfänger@gmail.com"
$secpasswd = ConvertTo-SecureString "Password" -AsPlainText -Force
$mycreds = New-Object System.Management.Automation.PSCredential ($From, $secpasswd)
$SMTPServer = "smtp.gmail.com"
$SMTPPort = "587"
$Subject = "Fileserver Cleanup"
$Body = "see attached files"
##############################################################################

#####################################################################
$timestamp = Get-Date
$timestamp2 = Get-Date -Format yyyy-MM-dd-HH-mm-ss
$sourcePathRoot = $sourcePathRoot.TrimEnd('\')
$logfilePath = $logfilePath.TrimEnd('\')
$logfilePath = Join-Path -Path $logfilePath -ChildPath "Cleanup-$timestamp2.txt"
$toBeRemovedLogfilePath = $toBeRemovedLogfilePath.TrimEnd('\')
$toBeRemovedLogfilePath = Join-Path -Path $toBeRemovedLogfilePath -ChildPath "nextTimeCleanUp-$timestamp2.txt"
#####################################################################

$filesToBeRemoved = Get-ChildItem -Path $sourcePathRoot -File -Recurse -Force | Where-Object { ($_.FullName -notlike "*$filter*") -and (((get-date) - $_.creationTime).days -gt $maximumAge ) }

$timestamp | Out-File -Encoding utf8 -FilePath $logfilePath

"{0:N2} GB werden vorraussichtlich gelöscht" -f (($filesToBeRemoved | Measure-Object Length -Sum).Sum / 1GB) | Out-File -Encoding utf8 -FilePath $logfilePath -Append
$filesToBeRemoved | Remove-Item -Recurse -Verbose 4>&1 -ErrorAction SilentlyContinue | Out-File -Encoding utf8 $logfilePath -Append

$foldersToBeRemoved = Get-ChildItem -Path $sourcePathRoot -Directory -Recurse -Force | Where-Object { ((Get-ChildItem $_.FullName -force | Select-Object -First 1 | Measure-Object).Count -eq 0) -and ($_.FullName -notlike "*$filter*") -and (((get-date) - $_.creationTime).days -gt $maximumAge ) }
$foldersToBeRemoved | Remove-Item -Recurse -Verbose 4>&1 -ErrorAction SilentlyContinue | Out-File -Encoding utf8 $logfilePath -Append

#hier bearbeiten, wenn nicht täglich
$filesWillBeDeletedNextTime = Get-ChildItem -Path $sourcePathRoot -File -Recurse -Force | Where-Object { ($_.FullName -notlike "*$filter*") -and (((get-date) - $_.creationTime).days -gt $maximumAge - 1 ) } 
$filesWillBeDeletedNextTime | Out-File -Encoding utf8 -FilePath $toBeRemovedLogfilePath

Send-MailMessage -From $From -to $To -Subject $Subject -Body $Body -SmtpServer $SMTPServer -port $SMTPPort -UseSSl -Credential $mycreds -Attachments ( $logfilePath, $toBeRemovedLogfilePath )

Remove-Item -Path $toBeRemovedLogfilePath -Force
Remove-Item -Path $logfilePath -Force

Must haves:
  • Das oben beschriebene Check
  • Automatisierbar (zum Beispiel einen solchen Lauf jeden Mittwoch um 20 Uhr fahren) Check (Aufgabenplanung)
  • Berichte, wann welche Dateien gelöscht wurden Check

Nice to have
  • Versenden der Berichte (bevorzugt per Mail) Check
  • Eine Auswertung, des Speicherplatzes, welcher beim Bereinigen freigegeben wurde Check
  • Versenden von Warnungen, welche Dateien beim nächsten Lauf gelöscht werden ("Die Datei XYZ.zip und der Ordner ABC werden automatisch gelöscht, da diese 30 Tage alt sind" Check
  • Den Projektordner löschen, wenn keine Dateien mehr darin enthalten sind und es keinen "Static" Ordner gibt Check

Alles ohne Gewähr.

Ich hab versucht alle Fälle Testweise alle zu erstellen und auf Fehler zu prüfen.

Probiere es aber trotzdem erst in einer Testumgebung!
 
Zurück
Oben