per VBScript Einträge im AD aus dem Attribut ProxyAddresses entfernen


sehr verwirrender ArtikelNaja, ganz OKbrauchbar für Checker...guter Artikelsehr guter Artikel - Danke

Es kann vorkommen, dass in historisch gewachsenen Domänen einzelne (oder alle) User Einträge im AD-Attribut “ProxyAddresses” haben, die auf einen alten Exchange / Gmail / etc hinweisen.

Dies ist äußerst hinderlich, wenn man diese Benutzer per Azure AD Connect ins OFFICE 365 übertragen möchte, da dieser Eintrag dazu führt, dass Benutzer kein Outlook-Konto in OFFICE365 bekommen.

Die Fehlermeldung lautet dann:

Mailfehler

 
 
 
 
Benutzername       xyz@domain.at    E-Mail-Adresse  Aliase   Anzeigen nicht möglich. Versuchen Sie es noch mal.
 

Die Lösung ist es nun, die Einträge im Attribut “ProxyAddresses” zu entfernen, was folgendes Script massenhaft erledigen kann:
(als MassenAttributlöscher.vbs speichern und direkt am Domänencontroller ausführen)

On Error Resume Next
Const ADS_SCOPE_SUBTREE = 2
Const ADS_PROPERTY_APPEND = 3
Const ADS_PROPERTY_DELETE = 4
Set objConnection = CreateObject("ADODB.Connection")
Set objCommand =   CreateObject("ADODB.Command")
objConnection.Provider = "ADsDSOObject"
objConnection.Open "Active Directory Provider"
Set objCommand.ActiveConnection = objConnection
objCommand.Properties("Page Size") = 1000
objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE 

objCommand.CommandText = "SELECT name, distinguishedName, sAmAccountname, proxyaddresses FROM 'LDAP://OU=lehrer,OU=Benutzer,DC=gymnasium,DC=at' WHERE objectCategory='user'"

Set objRecordSet = objCommand.Execute

objRecordSet.MoveFirst

Do Until objRecordSet.EOF

    'Wscript.Echo objRecordSet.Fields("distinguishedName").Value
	if NOT objRecordSet.Fields("proxyaddresses").Value = NULL THEN
	Wscript.Echo objRecordSet.Fields("sAmAccountname").Value & " -- " & objRecordSet.Fields("Name").Value

	'# falls man das Script nur für einen User testen möchte:  (ACHTUNG: zweites END IF unten einkommentieren)
	'if objRecordSet.Fields("name").Value = "DRE" then
	'Wscript.Echo objRecordSet.Fields("name").Value

	arrProxyAddresses = objRecordSet.Fields("proxyAddresses").Value
	Set objUser = GetObject("LDAP://" & objRecordSet.Fields("distinguishedName").Value)

	'### zum Löschen aller Einträge in ProxyAddresses folgendes einkommentieren:
	For Each objItem In arrProxyAddresses

					objUser.PutEx ADS_PROPERTY_DELETE, "proxyAddresses", Array(objItem)
					objUser.SetInfo

	Next

	'### zum Einfügen einer zusätzlichen Adresse folgendes einkommentieren:

				' objUser.PutEx ADS_PROPERTY_APPEND, "proxyAddresses", Array("smtp:" & objRecordSet.Fields("sAmAccountname").Value & "@brg-mattersburg.at" )
				 'objUser.SetInfo

	'### zum Auflisten aller Einträge in ProxyAddresses folgendes einkommentieren:
	For x=0 to UBOUND(arrProxyAddresses)
		wscript.echo arrProxyAddresses(x)

	Next

			wscript.Echo "erfolgreiche gelöscht!" & vbcrlf

	end if
	'end if

    objRecordSet.MoveNext

Loop

This entry was posted in Active Directory, Azure, Office 365, Scripts, VBScript. Bookmark the permalink.

Hinterlasse eine Antwort