Windows: deaktivierte Benuterkonten aus Verteilerlisten entfernen

0

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
Teilen.

Über den Autor

Seit der Ausbildung zum Fachinformatiker Systemintegration (2002-2005) bei der DaimlerChrysler AG, beruflich im Bereich der E-Mail Kommunikation (Exchange, Linux) sowie des ActiveDirectory, mit entsprechenden Zertifizierungen (MCSE 2003, MCITP Ent.-Admin 2008, MCSE 2012, LPIC 1-3) tätig. Abgeschlossenes Studium zum Master of Science der IT-Management an der FOM sowie zertifizierter Datenschutzbeauftragter. Aktuell im Projektmanagement tätig.

Antworten