113805
Goto Top

VB Script - Besitzer auslesen und E-Mail versenden

Hallo Forum

Ich möchte gerne mein Ordner und Dateien in einem Verzeichnis auf die Besitzer durchsuchen. Die Besitzer sollten dann per E-Mail benachrichtigt werden.

Bsp:
Test.txt --> Besitzer: Domainname/Hans

E-Mail mit Text an --> Hans@domainname.com.

Ist das möglich?

Content-Key: 226009

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

Printed on: April 24, 2024 at 23:04 o'clock

Member: colinardo
colinardo Jan 07, 2014 updated at 20:05:53 (UTC)
Goto Top
Hallo smackee,
selbstredend ist das möglich, was soll den der Auslöser für die Benachrichtigung sein ? Nur so eine Mail an die Besitzer zu schicken ist wohl nicht der Sinn der Sache.

Hier ein Gerüst wie es aussehen könnte:
(in Zeile 1 noch den Pfad zum Root-Ordner angeben der ausgelesen werden soll, in Zeile 2 für später dann den Pfad zur BLAT-Exe angeben. Die Aktion zum Versenden der Mails ist noch zum Testen auskommentiert, diese musst du noch entsprechend anpassen (Zeile12). Für einen Test erstellt das Script eine Textdatei mit den Ordner- und Dateinamen und dessen Besitzern (Gruppiert nach Besitzern) und zeigt sie mit Notepad an. Der Root-Ordner wir rekursiv ausgelesen, d.h. alle Unterordner und Dateien werden eingeschlossen, das lässt sich aber in Zeile 7 mit dem letzten Parameter regeln(FALSE = Nicht rekursiv).

Was man noch machen muss ist das Ausfiltern von speziellen Gruppen oder das angeben der gültigen Domains sonst gehen manche Mails ins Nirvana , da es auch Gruppen gibt die z.B. so aussehen: VORDEFINIERT\Administrators.
strFilePath = "c:\ordner"  
path_blat = "[PFAD ZUR BLAT.EXE]"  
Set fso = WScript.CreateObject("Scripting.Filesystemobject")  
Set oDic = CreateObject("scripting.dictionary")  
Set objShell = CreateObject("Wscript.Shell")  
strAllOwnersList = ""  
parseFolders fso.GetFolder(strFilePath),True
keys = oDic.Keys
For i = 0 To oDic.Count -1
	strAllOwnersList = strAllOwnersList &  "Ordner und Dateien welche '" & keys(i) &  " gehören" & vbCrlf & "===========================================" & vbCrLf & oDic.Item(keys(i)) & vbCrLf  
	'Mail an User versenden (noch auskommentiert muss noch angepasst werden)  
	'sendNewMailViaBlat "absender@domain.com",keys(i),"Anbei eine Liste von Dateien in Ihrem Besitz",oDic.Item(keys(i)),"SMTP-SERVER","SMTP_USER","SMTP-PASSWORD"  
Next
fso.CreateTextFile("owners.txt",True).Write(strAllOwnersList)  
objShell.Run "notepad.exe owners.txt"  

Function parseFolders(strFldr,boolRecursion)
	For each folder in strFldr.Subfolders
		strOwner = GetOwner(folder.Path)
		If strOwner <> "" Then  
			arrParts = Split(strOwner,"\",-1,1)  
			strDomain = arrParts(0) & ".com"  
			strUsername = arrParts(1) 
			strEMail = strUsername & "@" & strDomain  
			If oDic.Exists(strEMail) Then
				oDic.Item(strEMail) = oDic.Item(strEMail) & folder.Path & vbCrLf
			Else
				oDic.Add strEMail, folder.Path
			End If			
		End If
		
	Next
	For Each file In strFldr.Files
		strOwner = GetOwner(file.Path)
		If strOwner <> "" Then  
			arrParts = Split(strOwner,"\",-1,1)  
			strDomain = arrParts(0)& ".com"  
			strUsername = arrParts(1) 
			strEMail = strUsername & "@" & strDomain  
			If oDic.Exists(strEMail) Then
				oDic.Item(strEMail) = oDic.Item(strEMail) & file.Path & vbCrLf
			Else
				oDic.Add strEMail, file.Path
			End If
		End If
	Next
	If boolRecursion Then
		For Each subFolder in strFldr.SubFolders
			parseFolders subFolder, True
		Next
	End If
End Function


Function GetOwner(str_path)
	Set objWMIService = GetObject("winmgmts:")  
	Set objFileSecuritySettings = objWMIService.Get("Win32_LogicalFileSecuritySetting='" & str_path & "'")  
	intRetVal = objFileSecuritySettings.GetSecurityDescriptor(objSD)
	owner = ""  
	If intRetVal = 0 Then
		owner = objSD.Owner.Domain & "\" & objSD.Owner.Name  
	Else
	   owner = ""  
	End If
	GetOwner = owner
End Function


Function sendNewMailViaBlat(strFrom,strTo,strSubject,strBody,strSMTPServer,strSMTP_USER,strSMTP_PASS)
    Set objShell = CreateObject("WScript.Shell")  
    objShell.Run """" & path_blat & """" & " -subject """ & strSubject & """ -body """ & strBody & """ -to " & strTo & " -f " & strFrom & " -server " & strSMTPServer & " -u """ & strSMTP_USER & """ -pw """ & strSMTP_PASS & """"  
    set objShell = Nothing
End Function
Grüße Uwe
Mitglied: 113805
113805 Jan 08, 2014 at 22:09:53 (UTC)
Goto Top
Hallo colinardo,

Vielen Dank für diesen Super Code. Ich werde ihn gleich austesten und dir bescheid sagen.
Der Sinn ist die User zu Benachrichtigen, dass sie Dateien auf einem Netzlaufwerk haben die älter sind als 25 Tage.
Da ich die Dateien schon aussortiert habe und in ein order "archiv" verschiebe, lese ich nun mit dem Script den Ordner "archiv" aus und kann somit mithilfe des Besitzers eine Benachrichtigung per E-Mail versenden. So informiere ich den User, dass die Datei(en) welche er besitzt, innerhalb von 2 Wochen endgültig gelöscht werden.

Gruss
smackee