Wenn ein Mitarbeiter das Unternehemn verlässt wird meißt das AD-Konto erst einmal nur deaktiviert. Leider tauchen auch deaktivierte Benutzerkonten in Verteilerlisten weiterhin auf, was so manchen Endanwender zu verwirren scheint.
Ich habe daher aus der Not heraus ein VBS-Script geschrieben, dass alle deaktivierten Benutzerkonten, die in einer Standortspezifischen OU Namens "Deactivateds Accounts" liegen, aus den Verteilerlisten entfernt und die Änderungen in einer Textdatei protokolliert.
Anhand der Log-Datei können Benutzer unter Umständen später wieder in die vorherigen Gruppen aufgenommen werden.
' um eine weitere OU abarbeiten zu lassen, muss das array oupath() um x erweitert werden. ' Des weiteren muss ein neuer Eintrag oupath(x)= erstellt werde. ' Bitte mittels cscript xyz.vbs ausführen. on error resume next Const ADS_PROPERTY_DELETE = 4 i=0 dim oupath(3) oupath(0)="OU=Deactivated Accounts,OU=RA,OU=domain,DC=tld" oupath(1)="OU=Deactivated Accounts,OU=MH,OU=domain,DC=tld" oupath(2)="OU=Deactivated Accounts,OU=RZ,OU=domain,DC=tld" ' logging part Set objFSO = CreateObject("Scripting.FileSystemObject") Set objLogFile = objFSO.OpenTextFile("c:status.log", ForAppending, TRUE) Const ForReading = 1 Const ForWriting = 2 Const ForAppending = 8 Dim objFSO, objLogFile ' ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ Function WriteLog(LogMessage) objLogFile.Writeline(Now() & ": " & LogMessage) wscript.echo LogMessage End Function ' ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ wscript.echo "Alle Aenderungen der Gruppenmitgliedsschaft werden unter c:status.log protokolliert." & chr(13) & "Passen Sie den Pfad evtl. an!" wscript.sleep 5000 For i=0 to UBound(oupath)-1 Set objOU = GetObject("LDAP://" & oupath(i)) objOU.Filter = Array("user") For Each objUser In objOU ' set username objmemberOf = objUser.GetEx("memberOf") For Each objGroup in objmemberOf ' get group Name ary_group_CN = split(objGroup,"=") ary_group2 = split(ary_group_CN(1),",") ' check if group is a distribution list if left(ary_group2(0),3) = "DL " then Set objGroup = GetObject ("LDAP://" & objGroup) objGroup.PutEx ADS_PROPERTY_DELETE, "member", Array("CN=" & objUser.cn & "," & oupath(i)) WriteLog objUser.cn & ";removed;" & ary_group2(0) ' objGroup.SetInfo end if Next next Next