Автор Pirat задал вопрос в разделе Другие языки и технологии
Помогите создать скрипт и получил лучший ответ
Ответ от ...[гуру]
Уффф. первичный набросок. Остальное добавлю в комменты.. . ппц короче скриптик вышел, но у меня пашет =)
Сохранить в имя. vbs и выполнить cscript имя. vbs, скрипт должен запускаться от имени админа домена (от юзера может только запрос пройти без изменения состояния аккаунта)
Сейчас - выводит _СТАНДАРТНЫЕ_ обычные аккаунты юзеров с их датой входа и емылом
Пишет OK - если <90 дней, OLD если больше. Выводит общее число юзеров и тех, которому сменили состояние. Остальное добавлю в комменты. (осталось сделать Account = disable юзеру)
Комменты если нужно могу подписать что для чего подробнее (письмом)
---
'Получаем инфу о временной зоне (мало-ли он географически в другой =)
intBias = TimeZoneBias
'Аттрибуты для вывода на экран
arrAttributes = Array("lastLogonTimeStamp","displayname","mail")
dtStart = Date
intCount = 0
intTotal = 0
Set adoCommand = CreateObject("ADODB.Command")
Set adoConnection = CreateObject("ADODB.Connection")
adoConnection.Provider = "ADsDSOObject"
adoConnection.Open "Active Directory Provider"
adoCommand.ActiveConnection = adoConnection
Set objRootDSE = GetObject("LDAP://RootDSE")
strBase = "<ldap://">"
Set objRootDSE = Nothing
'Фильтр для запроса к AD 66048 - аттрибуты обычного юзера исключая системные аккаунты
strFilter = "(&(objectCategory=person)(objectClass=user)(userAccountControl=66048))"
strAttributes = Join(arrAttributes,",")
Wscript.Echo Join(arrAttributes,";")
adoCommand.CommandText = strBase & ";" & strFilter & ";" & strAttributes & ";subtree"
adoCommand.Properties("Page Size") = 100
adoCommand.Properties("Timeout") = 30 'Ахтунг! Выставите таймаут больше, если сервер черти-где =)
adoCommand.Properties("Cache Results") = False 'Кеширование может помешать
Set adoRecordset = adoCommand.Execute
Do Until adoRecordset.EOF
On Error Resume Next
strTempOutput = ""
For i = 1 To Ubound(arrAttributes)
strTempOutput = strTempOutput & " ; " & adoRecordset.Fields(arrAttributes(i)).Value
strOutput = Mid(Ltrim(strTempOutput),3)
Next
Set objDate = adoRecordset.Fields(arrAttributes(0)).Value
If (Err.Number <> 0) Then
dtmDate = #1/1/1601#
Else
dtmDate = ((((objDate.Highpart * (2^32)) + objDate.LowPart)/(600000000 - intBias))/1440) + #1/1/1601#
End If
Set objDate = Nothing
strOutput = strOutput & " ; " & dtmDate & " : "
If (dtStart - dtmDate) > 90 Then
strOutput = strOutput & "OLD"
intCount = intCount + 1
Else
strOutput = strOutput & "OK"
End If
Wscript.Echo strOutput
intTotal = intTotal + 1
adoRecordset.MoveNext
Loop
WScript.echo "Total records:" & intTotal & " Changed:" & intCount
adoRecordset.Close
adoConnection.Close
Set adoRecordset = Nothing
Set adoConnection = Nothing
Set adoCommand = Nothing
Function TimeZoneBias
strComputer = "."
Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!" & strComputer & "
ootcimv2")
Set colTimeZone = objWMIService.ExecQuery("Select * from Win32_TimeZone")
For Each objTimeZone in colTimeZone
TimeZoneBias = objTimeZone.Bias
Exit For
Next
Set colTimeZone = Nothing
Set objWMIService = Nothing
End Function
Pirat
Гуру
(3023)
Комменты если нужно могу подписать что для чего подробнее (письмом) - да, если вас не очень сильно затруднит... комменты очень полезными будут....
А теперь по подробнее, шо такэ AD? БД есть? Выбираем и метим юзверей.. . делов-то А так.. . любой каприз за ваши $
а разве через GPO нельзя? если нет, то попробуй в скрипте dsquery и dsmod
C:WINDOWSTemp что это? И для чего используестся?
Эти файлы как бы копии. просто копируются сюда чтобы если чего востановить какую нить прогу. эту
подробнее...