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

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

Printed on: April 19, 2024 at 22:04 o'clock

Mitglied: 122990
122990 Oct 13, 2015 updated at 11:59:55 (UTC)
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
Member: Philzip
Philzip Oct 13, 2015 at 12:57:27 (UTC)
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.
Member: Philzip
Philzip Oct 14, 2015 at 18:12:24 (UTC)
Goto Top
Bin leider immer noch nicht weiter face-sad
Mitglied: 122990
122990 Oct 14, 2015 at 22:32:05 (UTC)
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  
}
Member: Philzip
Philzip Oct 15, 2015 at 08:11:23 (UTC)
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?
Mitglied: 122990
122990 Oct 15, 2015 at 08:31:07 (UTC)
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
Member: Philzip
Philzip Oct 15, 2015 at 09:57:03 (UTC)
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
Mitglied: 122990
122990 Oct 15, 2015 updated at 10:01:44 (UTC)
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"  
Mitglied: 122990
122990 Oct 15, 2015 updated at 10:04:08 (UTC)
Goto Top
Member: Philzip
Philzip Oct 19, 2015 at 07:38:57 (UTC)
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).