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