- 29, Dec 2004
- #1
Тут решил на досуге перевести пару статеек, которые могут быть полезными, и решение которых не всегда лежит на поверхности или затруднено их ручное выполнение.
Если подобные вещи покажуться интересными могу продолжить.
Все зависит от Вашего желания.
А для примера возьмем задачу которая возникает когда у нас не установлено время действия паролей в AD. В ручную перепысывать время последнего изменения паролей пользователей неудобно поэтому возник следующий вопрос:
.
Q: Как узнать время последнего изменения пароля пользователей в AD? A: Создаем фалик с именем last_password_change.vbs и копируем туда следующее:
В итоге shell выдаст подобный список такой список:
.
' Copyright by John Savill
' This is based on Richard Mueller's script on Interger8Date
' conversion, which is copyrighted as below.
' Copyright (c) 2003 Richard L. Mueller
' Hilltop Lab Web site - _http://www.rlmueller.net
Все зависит от Вашего желания.
А для примера возьмем задачу которая возникает когда у нас не установлено время действия паролей в AD. В ручную перепысывать время последнего изменения паролей пользователей неудобно поэтому возник следующий вопрос:
.
Q: Как узнать время последнего изменения пароля пользователей в AD? A: Создаем фалик с именем last_password_change.vbs и копируем туда следующее:
Option Explicit
Dim strLdapPath, objConnection, objChild
Dim lngTZBias, objUser, objPwdLastSet
Dim objShell, lngBiasKey, k
' Check that all required arguments have been passed
If Wscript.Arguments.Count < 1 Then
Wscript.Echo "Arguments required. For example:" & vbCrLf _
& "cscript last_password_change.vbs ou=test,dc=demo"
Wscript.Quit(0)
End If
strLdapPath = Wscript.Arguments(0)
' Obtain local Time Zone bias from machine registry.
Set objShell = CreateObject("Wscript.Shell")
lngBiasKey = objShell.RegRead("HKLM\System\CurrentControlSet\Control\"_
& "TimeZoneInformation\ActiveTimeBias")
If UCase(TypeName(lngBiasKey)) = "LONG" Then
lngTZBias = lngBiasKey
ElseIf UCase(TypeName(lngBiasKey)) = "VARIANT()" Then
lngTZBias = 0
For k = 0 To UBound(lngBiasKey)
lngTZBias = lngTZBias + (lngBiasKey(k) * 256^k)
Next
End If
Set objConnection = GetObject("LDAP://" & strLdapPath)
objConnection.Filter = Array("user")
For Each objChild In objConnection
Set objPwdLastSet = objChild.pwdLastSet
WScript.Echo objChild.Name & vbTab & _
Integer8Date(objPwdLastSet, lngTZBias)
Next
Wscript.Echo "Operation Completed"
Function Integer8Date(objDate, lngBias)
' Function to convert Integer8 (64-bit) value to a date, adjusted for
' local time zone bias.
Dim lngAdjust, lngDate, lngHigh, lngLow
lngAdjust = lngBias
lngHigh = objDate.HighPart
lngLow = objdate.LowPart
' Account for error in IADslargeInteger property methods.
If lngLow < 0 Then
lngHigh = lngHigh + 1
End If
If (lngHigh = 0) And (lngLow = 0) Then
lngAdjust = 0
End If
lngDate = #1/1/1601# + (((lngHigh * (2 ^ 32)) _
+ lngLow) / 600000000 - lngAdjust) / 1440
' Trap error if lngDate is ridiculously huge.
On Error Resume Next
Integer8Date = CDate(lngDate)
If Err.Number <> 0 Then
On Error GoTo 0
Integer8Date = #1/1/1601#
End If
On Error GoTo 0
End Function
Сохраняем и закрываем. Теперь запускаем shell. И запускаем созданный файл со следующими параметрами: cscript last_password_change.vbs ou=test_object,dc=test_domain
где- ou=test_object - наименование Organizational Unit (например Users, Computers и т.д.)
- dc=test_domain - название домена
В итоге shell выдаст подобный список такой список:
Microsoft (R) Windows Script Host Version 5.6
Copyright (C) Microsoft Corporation 1996-2001. All rights reserved.
CN=User1 10/1/2002 4:26:53 PM
CN=User2 9/13/2004 8:55:17 AM
CN=User3 10/2/2002 3:50:50 PM
Operation Completed
Вот и все . Жду откликов.
PS Тем кто хочет побороться за копирайты ниже привожу автора. Повторюсь, что я лишь перевел небольшую часть и выложил здесь.
.
' Copyright by John Savill
' This is based on Richard Mueller's script on Interger8Date
' conversion, which is copyrighted as below.
' Copyright (c) 2003 Richard L. Mueller
' Hilltop Lab Web site - _http://www.rlmueller.net