Скрипт предназначен для поиска в
Active Directory учётных записей персональных компьютеров, которые по каким либо причинам
давно не синхронизировались с доменом.
Чтобы начать работу, необходимо прописать начальные значения
следующих переменных:
FQDN - имя
LDAP вашего домена или нужной ветки;
intTimeLimit - считать записи устаревшими, если они не синхронизировались более данного количества дней назад;
flagDelete - может принимать два значения:
TRUE - выполнять удаление при поиске учётных записей;
FALSE - режим чтения, только отображать информацию.
ON ERROR RESUME NEXT
FQDN = "DC=mydomain,DC=corp" 'Input your Fully Qualified Domain Name or LDAP path to subtree
intTimeLimit = 360 'Time limit in number of days
flagDelete = FALSE 'Flag for deleting old computers. FASLE = find only, TRUE = find and DELETE!!!
Const ADS_SCOPE_SUBTREE = 2
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,distinguishedName,lastLogon from " & "'LDAP://" & FQDN & "' where objectClass='computer'"
objCommand.Properties("Page Size") = 1000
objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE
SET objRecordSet = objCommand.Execute
objRecordSet.MoveFirst
DO UNTIL objRecordset.EOF
objLogon = objRecordSet.Fields("lastLogon")
intLogonTime = objLogon.HighPart * (2^32) + objLogon.LowPart
intLogonTime = intLogonTime / (60 * 10000000)
intLogonTime = intLogonTime / 1440
IF intLogonTime + #1/1/1601# < Now - intTimeLimit THEN
Wscript.Echo "Computer Name: " & objRecordSet.Fields("Name").Value
Wscript.Echo "Path: " & objRecordSet.Fields("distinguishedName").Value
WScript.Echo "Approx last logon timestamp: " & intLogonTime + #1/1/1601#
Wscript.Echo "========================================================="
IF flagDelete THEN
SET objComputer = GetObject("LDAP://" & objRecordSet.Fields("distinguishedName").Value)
objComputer.DeleteObject(0)
END IF
END IF
objRecordSet.MoveNext
LOOP
Особенно внимательным нужно быть с переменной "intTimeLimit"!!!
Задание слишком малого значения может привести к потери практически всех компьютерных аккаунтов!!!
Для удобства скрипт лучше запускать с помощью "
cscript.exe".