[Postfixbuch-users] gültige Empfänger aus dem ADS CSVDE Problem

Andreas Winkelmann ml at awinkelmann.de
Sa Sep 8 14:29:24 CEST 2007


On Saturday 08 September 2007 14:11, Yves Bilgeri wrote:

> > Als ich mich mal damit beschäftigt hatte, habe ich keinen sonderlich
> > einfachen Weg gefunden dieses Limit zu vergrössern, und da wir schon weit
> > mehr wie 1000 User hatten, habe ich mir VB-Scripte gebastelt um das AD zu
> > durchlaufen. Ist zwar etwas langsamer, aber dann ist es egal wieviele
> > Einträge gefunden werden sollen.
>
> Ja so ein VB-Script wäre in meinem Fall sicher auch besser geeignet, auf
> die Geschwindigkeit kommt es ja nicht so an. Leider habe ich nicht so
> viel Erfahrung mit VB-Scripts. Kannst Du das Vorgehen evtl. mal posten?

Habe gerade mal ein bestehendes von mir modifiziert. Ist aber ungetestet. 
Speicher es als irgendwas.vbs und führe es erstmal aus einem cmd-Fenster 
mit "cscript irgendwas.vbs" aus.

Das sucht im ganzen AD nach SMTP-Adressen und schreibt sie in die 
Datei "mailrelay_recipients.txt" mit einem "OK" dahinter.

-----------------------------------------------------------------------------
Option Explicit

Dim objRootDSE, strRootDomain
Dim objADS, objMember
Dim objFSO, objFile

Set objFSO = CreateObject("Scripting.FileSystemObject")

Set objRootDSE = GetObject("LDAP://rootDSE")
strRootDomain = "LDAP://" & objRootDSE.Get("rootDomainNamingContext")

Set objADS = GetObject( strRootDomain )

Set objFile = objFSO.CreateTextFile( "c:\mailrelay_recipients.txt", True)

ScanContainer objADS

objFile.Close

Sub ScanContainer( objContainer )

	Dim objMember

	If ( LCase( objContainer.Class ) = "user" ) Then
		PrintMember objContainer
	Elseif ( LCase( objContainer.Class ) = "contact" ) Then
		PrintMember objContainer
	Elseif ( LCase( objContainer.Class ) = "group" ) Then
		PrintMember objContainer
	Elseif ( LCase( objContainer.Class ) = "publicfolder" ) Then
		PrintMember objContainer
	End If

	On Error Resume Next
	
	For Each objMember In objContainer
		If Err.Number <> 0 Then
			Err.Clear
			On Error goto 0
			Exit Sub
		Else
			ScanContainer objMember
		End IF
	Next

End Sub

Sub PrintMember( objUser )

	Dim strAlias

	On Error Resume Next

	If Not IsEmpty( objUser.proxyAddresses ) Then
		For Each strAlias in objUser.proxyAddresses
			If ( 0 = StrComp( Left( strAlias, Len("SMTP:")), "SMTP:", 1 )) Then
				objFile.Write Mid( strAlias, Len( "SMTP:" ) + 1 ) & " OK" & vbCrLf
			End If
	    	End If
		Next
	End If

	On Error goto 0

End Sub
-----------------------------------------------------------------------------


-- 
	Andreas



Mehr Informationen über die Mailingliste Postfixbuch-users