Option Explicit '------------------------------------------------------------------------- ' smtplist.1.0.vbs ' ' Beschreibung: ' ' Generiert eine Liste aller SMTP-Adressen in der Organisation ' Optional mit der Abfrage einer Gruppe ' ' Laufzeitfehler werde nicht abgefangen und beenden das Skript. ' ' Das Skript wird mit den Berechtigungen des angemeldeten Benutzers ' ausgeführt. Die entsprechenden Berechtigungen sind sicher zu stellen ' ' (c)2004 Net at Work Netzwerksysteme GmbH ' ' Version 1.0 (10. Mai 2005) ' + erste Version ' ' Denkbare Erweiterung: Filterung auf Mitglieder der Gruppe "InternetmaiL" ' oder Ausschluss von "KeinMail" '------------------------------------------------------------------------- Const LogFile = "C:\smtplist.log" ' Pfad und Dateiname der Log-Datei Const LogLevel = 5 ' errorlogging 0=no logging, 1=Fatal 2=Error 3=Warning 4=information 5=debug Const outFile = "C:\smtplist.txt" ' Pfad und Dateiname der Log-Datei Dim count, total ' Dim file Dim fs Dim mail ' Dim objCommand ' Dim objConnection ' Dim objRecordSet ' Dim oCont ' Dim strADsPath ' Dim strAttributes ' Dim strBase ' Dim strDN ' Dim strFilter ' Dim strQuery ' Dim oGC Dim proxyAddresses WScript.Echo WScript.ScriptName & " wurde gestartet." AppendLog "Skript gestartet", 4 Set oCont = GetObject("GC:") 'Find the Global Catalog server For Each oGC In oCont strADsPath = oGC.ADsPath Next Set objCommand = CreateObject("ADODB.Command") ' mit ADO das Active Directory durchsuchen Set objConnection = CreateObject("ADODB.Connection") objConnection.Provider = "ADsDSOObject" objConnection.Open "Active Directory Provider" objCommand.ActiveConnection = objConnection strBase = "<" & strADsPath & ">" ' Gesamten GC: durchsuchen strFilter = "(ProxyAddresses=*)" strAttributes = "ProxyAddresses,cn,distinguishedName" ' Gesuchte Attribute strQuery = strBase & ";" & strFilter & ";" & strAttributes & ";subtree" ' LDAP query zusammenbauen objCommand.CommandText = strQuery objCommand.Properties("Page Size") = 100 ' max 100 Ergebnisse auf einmal erhalten objCommand.Properties("Timeout") = 30 ' Timeout 30 Sekunden objCommand.Properties("Cache Results") = False Set objRecordSet = objCommand.Execute ' und los count = 0 total = 0 Set fs = CreateObject("Scripting.FileSystemObject") Set file = fs.OpenTextFile(outFile, 2, True) ' Ausgabedatei zum überschreiben öffnen Do until objRecordSet.EOF ' jeden Datensatz einzeln bearbeiten. count = count + 1 strDN = objRecordSet.Fields("distinguishedName").Value ' DN ermitteln WScript.echo "Processing:" & count & ":" & strDN ' Diagnoseausgabe proxyAddresses = objRecordSet.Fields("proxyAddresses").Value ' DN ermitteln For Each mail In proxyAddresses If InStr(1,mail,"smtp",vbTextCompare) = 1 Then file.WriteLine(mail) ' Bitte die folgende Zeile statt der vorherigen verwenden für PostFix ' If InStr(1,mail,"smtp",vbTextCompare) = 1 Then file.WriteLine(mail) ' & " OK" ' Bitte für PostFix einkommentieren total = total + 1 Next WScript.StdOut.Write "Processing:" & count & ":" & strDN ' Diagnoseausgabe objRecordSet.MoveNext Loop file.Close Set file= Nothing Set fs = Nothing WScript.echo "Anzahl der Objekte:"&count WScript.echo "Mailadressen Total:"&total AppendLog "Skript beendet", 4 WScript.quit(0) Sub AppendLog(strLog, errlevel) 'Fügt einen Eintrag in die Log-Datei ein Dim AppendLogfile Dim AppendLogfs If LogLevel>=errlevel Then Set AppendLogfs = CreateObject("Scripting.FileSystemObject") Set AppendLogfile = AppendLogfs.OpenTextFile(LogFile, 8, True) AppendLogfile.Write(Now & ",") Select Case errlevel Case 1 AppendLogfile.Write("Fatal Line:" & Err.Source & ":") Case 2 AppendLogfile.Write("Error:") Case 3 AppendLogfile.Write("Warning:") Case 4 AppendLogfile.Write("Information:") Case 5 AppendLogfile.Write("Debug:") Case Else AppendLogfile.Write("Code:"&errlevel) End Select AppendLogfile.WriteLine(","&strLog) AppendLogfile.Close End If End Sub