суббота, 28 марта 2015 г.

VBScript: поиск устаревших аккаунтов пользователей в Active Directory

Скрипт позволяет вычитать из Active Directory пользовательские аккаунты с последним удачным входом не позднее N-ого дня назад. Таким образом можно выявить устаревшие учётные записи и впоследствии удалить их.

FQDN - имя LDAP вашего домена или нужной ветки;
intTimeLimit - делать выборку тех записей, которые авторизовались в домене более данного количества дней назад;
fileUserLst - файл отчёта по работе скрипта формата .csv.

ON ERROR RESUME NEXT
FQDN = "DC=mydomain,DC=corp" 'Input your Fully Qualified Domain Name or LDAP path to subtree
intTimeLimit = 365  'Time limit in number of days
fileUserLst = "c:\Temp\user_list.csv" 'File name for saving list of users
Const ADS_SCOPE_SUBTREE = 2
' Obtain local Time Zone bias from machine registry.
' This bias changes with Daylight Savings Time.
Set objShell = CreateObject("Wscript.Shell")
lngBiasKey = objShell.RegRead("HKLM\System\CurrentControlSet\Control\" _
    & "TimeZoneInformation\ActiveTimeBias")
If (UCase(TypeName(lngBiasKey)) = "LONG") Then
    lngBias = lngBiasKey
ElseIf (UCase(TypeName(lngBiasKey)) = "VARIANT()") Then
    lngBias = 0
    For k = 0 To UBound(lngBiasKey)
        lngBias = lngBias + (lngBiasKey(k) * 256^k)
    Next
End If
Set objConnection = CreateObject("ADODB.Connection")
Set objCommand =   CreateObject("ADODB.Command")
objConnection.Provider = "ADsDSOObject"
objConnection.Open "Active Directory Provider"
Set objCommand.ActiveConnection = objConnection
objCommand.CommandText = "Select Name,sAMAccountName,lastLogonTimestamp from " & "'LDAP://" & FQDN & "' where objectCategory='person' and objectClass='user'"
objCommand.Properties("Page Size") = 1000
objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE
Set fso = CreateObject("Scripting.FileSystemObject")
Set objFile = fso.CreateTextFile(fileUserLst, True)
Set objRecordSet = objCommand.Execute
objRecordSet.MoveFirst
Do Until objRecordset.EOF
 objLogon = objRecordSet.Fields("lastLogonTimestamp")
 intLogonTime = objLogon.HighPart * (2^32) + objLogon.LowPart
 intLogonTime = intLogonTime / (60 * 10000000) - lngBias
 intLogonTime = intLogonTime / 1440
 If intLogonTime + #1/1/1601# < Now - intTimeLimit Then
  objFile.WriteLine( objRecordSet.Fields("Name").Value & ","& objRecordSet.Fields("sAMAccountName").Value & "," & intLogonTime + #1/1/1601#)
 End If
 objRecordSet.MoveNext
Loop

Если данный скрипт будет показывать время входа каждого пользователя 1/1/1601, то вероятно у вас уровень домена Windows 2000 или Windows 2003. Чтобы заставить работать запрос, измените "lastLogon" в скрипте на "lastLogonTimestamp".

Комментариев нет:

Отправить комментарий