Deaktivierte Benutzerkonten aus dem AD löschen – VB Script
Abgelaufene oder deaktivierte Benutzerkonten aus der Active Directory löschen. Script zum Löschen von Benutzern aus dem AD. Letzte Anmeldung im AD auslesen.
Im AD sammeln sich regelmäßig ungenutzte Benutzerkonten an. Die meisten Konten sind deaktiviert oder schon abgelaufen. Alle deaktivierten User im AD zu finden, kann sehr aufwendig sein. Für diese Aufgabe habe ich ein VB Script geschrieben. Das Script könnt ihr frei verwenden und auf eure Wünsche anpassen.
Deaktivierte Benutzerkonten löschen
Ich möchte euch kurz beschreiben, wie das Script arbeitet. Es werden nur Benutzerkonten gelöscht, die deaktiviert sind, abgelaufen sind und der Benutzer mindestens 360 Tage nicht angemeldet wurde. Ein deaktiviertes Konto wird durch das Attribut UserAccountControl identifiziert. Bei dem Wert 514 ist das Konto deaktiviert.
Das Script geht nur in die Löschschleife, wenn das Benutzerkonto deaktiviert ist und der Nutzer sich länger als 360 Tage nicht angemeldet hat. Dieser Wert kann beliebig verändert werden.
In der Löschschleife mache ich noch eine Abfrage. Wenn für das Konto kein Ablaufdatum eingetragen wurde, wird das Konto nicht gelöscht.
Ich gebe nur eine Meldung im Logfile aus, dass der Nutzer deaktivert ist, sich x Tage nicht angemeldet hat und sein Konto nicht abläuft.
Liegt das Ablaufdatum in der Vergangenheit, wird das Benutzerkonto gelöscht.
Alle Aktionen werden in der Logdatei dokumentiert.
Ich würde euch empfehlen, das Script in einer Test OU zu testen. Zum Testen müsst ihr den Parameter cStrLdapUserOU anpassen. Dort tragt ihr eure Domain und die passende OU ein.
‚Löscht User, die deaktivert sind und sich mindestens 360 Tage nicht angemeldet haben
‚MD
VB Script
Dim fso, f
Const ForReading = 1, ForWriting = 2
Const cLogFile = „Log_Delete.txt“
Const cStrLdapUserOU = „,OU=Test,OU=Users,OU=Users and Groups,DC=Firma,DC=local“
Const ADS_PROPERTY_APPEND = 3
Set WshNetwork = WScript.CreateObject(„WScript.Network“)
Set fso = CreateObject(„Scripting.FileSystemObject“)
Set wshell=createobject(„Wscript.shell“)
NotifyDate = Date – 179
NotifyDate = CDate(NotifyDate)
readUserAttr
function readUserAttr
‚User aus dem AD auslesen
ADValues = getADQuerry(1)
end function
msgBox „Fertig! ;-)“
function deleteUser(locDistinguishedName)
‚Wenn alles andere als deaktiviert
‚msgBox „LDAP://“ & locDistinguishedName
set strUserObj = GetObject(„LDAP://“ & locDistinguishedName)
On error resume next
set objLastLogon = strUserObj.Get(„lastLogonTimestamp“)
i8High = objLastLogon.HighPart
i8Low = objLastLogon.LowPart
If (i8Low < 0) Then i8High = i8High + 1 End If
intLastLogonTime = i8High * (2^32) + i8Low
intLastLogonTime = intLastLogonTime / (60 * 10000000)
intLastLogonTime = intLastLogonTime / 1440
intLastLogonTime = intLastLogonTime + #1/1/1601#
Differenz = DateDiff(„d“, intLastLogonTime, Now)
‚msgBox strUserObj.sAMAccountName &vbCrLf& strUserObj.AccountExpirationDate &vbCrLf& Differenz
‚Wenn User deaktiviert und sich 360 Tage nicht angemeldet hat, dann …
IF strUserObj.UserAccountControl = 514 AND Differenz > 360 then
‚Wenn Ablaufdatum Konto steht auf nie, dann …
if strUserObj.AccountExpirationDate < „01.01.2013 02:00:00“ then
‚Logfile schreiben
DatenLogFile = “ Nutzer ist deaktiviert ; Anmeldename ; “ & strUserObj.sAMAccountName & “ hat sich “ & Differenz & “ Tage nicht angemeldet ; Konto soll nicht auslaufen. ; Konto läuft aus am: “ & strUserObj.AccountExpirationDate
writeLog DatenLogFile
elseif strUserObj.AccountExpirationDate < date +1 then
‚Konto löschen
DatenLogFile = “ Nutzer wurde gelöscht ; Anmeldename ; “ & strUserObj.sAMAccountName & „; hat sich “ & Differenz & “ Tage nicht angemeldet. ; Konto läuft aus am: “ & strUserObj.AccountExpirationDate
writeLog DatenLogFile
’strobjUser.DeleteObject (0)
end if
END IF
end function
function getADQuerry(QueryType)
‚***** ADODB-Verbindung einrichten
‚OU abfragen
Set Connection = CreateObject(„ADODB.Connection“)
Connection.Provider = „ADsDSOObject“
Connection.Open „Active Directory Provider“
‚ Abfrage formulieren
Set Command = CreateObject(„ADODB.Command“)
Command.ActiveConnection = Connection
‚Parameter
‚Command.Properties(„Timeout“) = 30 ’seconds
Command.Properties(„Page Size“) = 1000
Command.Properties(„searchscope“) = 2
Command.Properties(„Sort on“) = „Name“
‚Command.Properties(„Chase referrals“) = ADS_CHASE_REFERRALS_EXTERNAL
‚Command.Properties(„Cache Results“) = False ‚ do not cache the result, it results in less memory requirements
‚ ADsPath der Domaene ermitteln
Set objRoot = GetObject(„LDAP://rootDSE“)
ADsPath = objRoot.Get(„defaultNamingContext“)
Select case QueryType
‚User
case 1 tmpCategory = „select distinguishedName from ‚LDAP://“ & cStrLdapUserOU & „‚ where objectCategory=’person‘ and objectClass=’user'“
End Select
command.commandText = tmpCategory
Set rs = Command.Execute
if rs.recordCount > 0 then
Do Until rs.EOF
ListADUser = split(rs.GetString, vbCr,-1,1)
for each UserName in ListADUser
if Username <> „“ then
deleteUser UserName
end if
next
Loop
end if
end function
‚*********************************************************************************
‚ Logfile schreiben
function writeLog(locValue1)
dim f
‚Logfile schreiben
set f = fso.OpenTextFile(cLogFile, 8, True)
f.WriteLine date & „;“ & Time & „;“ &locValue1
f.close
end function
‚*********************************************************************************
Hinterlasse einen Kommentar
An der Diskussion beteiligen?Hinterlasse uns deinen Kommentar!