philzip
Goto Top

Automatisiertes scannen nach doppelten Dateien inkl. Benachrichtigung

Hallo zusammen,

folgendes Szenario.

Auf einem Netzlaufwerk gibt es einen Ordner "WICHTIG". In diesem Ordner sind ein ganzer Haufen Dokumente, bei denen es enorm wichtig ist, dass jeweils nur das Original und keine Kopien existieren.

Nun suche ich nach einer Lösung, die folgende Anforderungen erfüllt:

--- Automatisches Scannen des Ordners WICHTIG in regelmäßigen Abständen
--- Überprüfung, ob sich im übergeordneten Ordner inkl. allen Unterordnern Duplikate von den aus Schritt 1 gefunden Dateien befinden
--- Benachrichtigung per Mail (oder auf eine andere einfache Art und Weise)

Es gibt ja einen ganzen Haufen an Tools, um Duplikate zu finden (und zu löschen). Aber leider keines, welches meinen Anforderungen gerecht wird...

... daher bitte ich nun hier um Vorschläge, wie man dieses Thema angehen könnte face-smile

Vielen Dank und LG

Philzip

Content-ID: 285409

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

Ausgedruckt am: 22.11.2024 um 06:11 Uhr

122990
122990 13.10.2015 aktualisiert um 13:59:55 Uhr
Goto Top
Moin,
das hier
Dupes mit anderem Dateinamen finden und in "HardLinks" umwandeln (W2k12R2, NTFS)
könnte man dafür verwenden, muss man nur geringfügig anpassen und den Teil mit der Umwandlung in einen Hardlink rausnehmen, wäre aber eigentlich dann nicht so schlimm weil ein Hardlink ja immer auf die selbe Datenbasis verweist.

Gruß grexit
Philzip
Philzip 13.10.2015 um 14:57:27 Uhr
Goto Top
Sieht schonmal gut aus, wobei ich da nicht ganz durchsteige. Bei mir muss es sogar nicht mal so "kompliziert" sein, mir reicht es wenn nach Dateinamen gescannt wird.
Philzip
Philzip 14.10.2015 um 20:12:24 Uhr
Goto Top
Bin leider immer noch nicht weiter face-sad
122990
122990 15.10.2015 um 00:32:05 Uhr
Goto Top
Na wenn das so simpel sein soll dann reicht das hier:
$folder = 'c:\ordner'  
$duplicates = @()
gci $folder | ?{!$_.PSIsContainer} | group Name | ?{$_.Count -gt 1} | %{
    $duplicates += $_.Group.Fullname -join "`r`n"  
}
if ($duplicates.length -gt 0){
    $body = "Folgende Duplikate wurden gefunden:`r`n$($duplicates -join "`r`n-------`r`n")"  
    $username = 'user@domain.de'  
    $password = 'Passw0rd'  
    Send-MailMessage -from "sender@domain.de" -To "empfaenger@domain.de" -Subject "Meldung doppelter Dateien" -SmtpServer 'SMTP.SERVER.DE' -UseSsl -Credential (New-Object pscredential($username,(ConvertTo-SecureString $password -AsPlainText -Force))) -Body $body  
}
Philzip
Philzip 15.10.2015 um 10:11:23 Uhr
Goto Top
Zitat von @122990:

Na wenn das so simpel sein soll dann reicht das hier:
> $folder = 'c:\ordner'  
> $duplicates = @()
> gci $folder | ?{!$_.PSIsContainer} | group Name | ?{$_.Count -gt 1} | %{
>     $duplicates += $_.Group.Fullname -join "`r`n"  
> }
> if ($duplicates.length -gt 0){
>     $body = "Folgende Duplikate wurden gefunden:`r`n$($duplicates -join "`r`n-------`r`n")"  
>     $username = 'user@domain.de'  
>     $password = 'Passw0rd'  
>     Send-MailMessage -from "sender@domain.de" -To "empfaenger@domain.de" -Subject "Meldung doppelter Dateien" -SmtpServer 'SMTP.SERVER.DE' -UseSsl -Credential (New-Object pscredential($username,(ConvertTo-SecureString $password -AsPlainText -Force))) -Body $body  
> }
> 


Danke! Habe das Skript eben mit meinen Daten gefüllt und getestet... leider hat es nicht geklappt, hab aber auch keine Fehlermeldung in der PowerShell bekommen.

Wie würden die Zeilen lauten, wenn ich es ohne Authentifizierung verschicken will? Sprich über einen SMTP, der anonyme Absender akzeptiert?
122990
122990 15.10.2015 um 10:31:07 Uhr
Goto Top
Credential Parameter weglassen eventuell mit dem Port-Parameter den verwendeten Port anpassen, wenn ohne Verschlüsselung den Parameter -UseSSL weglassen.
https://technet.microsoft.com/en-us/library/hh849925.aspx
Philzip
Philzip 15.10.2015 um 11:57:03 Uhr
Goto Top
Zitat von @122990:

Credential Parameter weglassen eventuell mit dem Port-Parameter den verwendeten Port anpassen, wenn ohne Verschlüsselung den Parameter -UseSSL weglassen.
https://technet.microsoft.com/en-us/library/hh849925.aspx

Kann ich auch zum Testen einfach mal das Ergebnis in eine Text-Datei schreiben lassen? Wenn ja, wie?

Entschuldige meine unbeholfenen Fragen.... face-smile
122990
122990 15.10.2015 aktualisiert um 12:01:44 Uhr
Goto Top
Kann ich auch zum Testen einfach mal das Ergebnis in eine Text-Datei schreiben lassen? Wenn ja, wie?
$body | out-file "C:\datei.txt"  
122990
122990 15.10.2015 aktualisiert um 12:04:08 Uhr
Goto Top
Philzip
Philzip 19.10.2015 um 09:38:57 Uhr
Goto Top
Es klappt leider immer noch nicht, so wie ich das vor habe.

Das ist nun mein Code:

$folder = 'C:\Test\WICHTIG'
$duplicates = @()
gci $folder | ?{!$_.PSIsContainer} | group Name | ?{$_.Count -gt 1} | %{
$duplicates += $_.Group.Fullname -join "`r`n"
}
$body = "Folgende Duplikate wurden gefunden:`r`n$($duplicates -join "`r`n-------`r`n")"
$body | out-file "C:\datei.txt"

Nochmal zur Klarstellung. Der Inhalt des Ordners C:\Test\WICHTIG soll gescannt werden. Danach soll in C:\Test\ (inkl. allen Unterordnern außer WICHTIG) nach Duplikaten gesucht werden.

Leider bekomme einfach nur "Folgende Duplikate wurden gefunden:" als Ausgabe, ohne tatsächliche Ergebnisse (Obwohl Duplikate existieren).