none
Password Expired Date RRS feed

  • Вопрос

  • Const SEC_IN_DAY = 86400
    Const ADS_UF_DONT_EXPIRE_PASSWD = &h10000
     
    Set objUserLDAP = GetObject _
     ("LDAP://CN=pupkin,OU=test,DC=mydomen,DC=ru")
    intCurrentValue = objUserLDAP.Get("userAccountControl")
     Wscript.echo intCurrentValue
    If intCurrentValue and ADS_UF_DONT_EXPIRE_PASSWD Then
     wscript.echo "The password does not expire."
    Else
     dtmValue = objUserLDAP.PasswordLastChanged 
     Wscript.echo "Пароль изменен последний раз " & _
     DateValue(dtmValue) & " в " & TimeValue(dtmValue) & VbCrLf & _
     "Разница между последней сменой пароля и сегоднешней датой" & VbCrLf & _
     int(now - dtmValue) & " дней"
     intTimeInterval = int(now - dtmValue)
     
     Set objDomainNT = GetObject("WinNT://mydomen)
     intMaxPwdAge = objDomainNT.Get("MaxPasswordAge")
     If intMaxPwdAge < 0 Then
     WScript.Echo "The Maximum Password Age is set to 0 in the " & _
      "domain. Therefore, the password does not expire."
     Else
     intMaxPwdAge = (intMaxPwdAge/SEC_IN_DAY)
     Wscript.echo "The maximum password age is " & intMaxPwdAge & " days"
     If intTimeInterval >= intMaxPwdAge Then
      Wscript.echo "The password has expired."
     Else
      Wscript.echo "The password will expire on " & _
      DateValue(dtmValue + intMaxPwdAge) & " (" & _
      int((dtmValue + intMaxPwdAge) - now) & " days from today" & ")."
     End If
     End If
    End If
    

     и

    On Error Resume Next
    user = InputBox("Имя пользователя") 
    
    Const ADS_SCOPE_SUBTREE = 2
    
    Set objConnection = CreateObject("ADODB.Connection")
    Set objCommand = CreateObject("ADODB.Command")
    objConnection.Provider = ("ADsDSOObject")
    objConnection.Open "Active Directory Provider"
    objCommand.ActiveConnection = objConnection
    objCommand.CommandText = "SELECT name FROM " & _
     "'LDAP://DC=mydomen,DC=ru' " & _
      "WHERE Name = '" & user & "'"
    objCommand.Properties("SearchScope") = ADS_SCOPE_SUBTREE
    Set objRecordSet = objCommand.Execute
    
    
    objRecordSet.MoveFirst
    Do Until objRecordSet.EOF
     Wscript.Echo objRecordSet.Fields("Name").Value 
      objRecordSet.MoveNext
    Loop
    
    Есть два скрипта их необходимо переделать, что бы поиск пользователя осуществлялся по всему AD. И что бы при запуске скрипта выводилось окно для ввода логина пользователя. Подскажите как их объденить

     

    6 сентября 2010 г. 14:00

Ответы

  • Нужные вам атрибуты, значение, которых вы хотите получить, перечислите через запятую в запросе SELECT, например:

    objCommand.CommandText = "SELECT name, userAccountControl, distinguishedName  FROM " & _
    "'LDAP://DC=mydomen,DC=ru' "...

    вот, посмотрите, я когда-то писал скрипт для получения информации о пользователях домена при помощи adodb: http://sysadmins.ru/post6699608.html#6699608


    blog: http://shss.wordpress.com/
    • Помечено в качестве ответа Max441 7 сентября 2010 г. 9:08
    6 сентября 2010 г. 18:41
  • спасибо. Ключом послужил атрибут distinguishedName :)

    Готовый скрипт имеет вид:

    On Error Resume Next
    user = InputBox("Имя пользователя") 
    Const SEC_IN_DAY = 86400
    Const ADS_UF_DONT_EXPIRE_PASSWD = &h10000
    Const ADS_SCOPE_SUBTREE = 2
    
    Set objConnection = CreateObject("ADODB.Connection")
    Set objCommand = CreateObject("ADODB.Command")
    objConnection.Provider = ("ADsDSOObject")
    objConnection.Open "Active Directory Provider"
    objCommand.ActiveConnection = objConnection
    objCommand.CommandText = "SELECT name,distinguishedName FROM " & _
      "'LDAP://DC=mydomen,DC=ru' " & _
        "WHERE Name = '" & user & "'"
    objCommand.Properties("SearchScope") = ADS_SCOPE_SUBTREE
    Set objRecordSet = objCommand.Execute
    
    objRecordSet.MoveFirst
    
    Do Until objRecordSet.EOF
      strDN = objRecordSet.Fields("distinguishedName").Value
      Set objUserLDAP = GetObject("LDAP://" & strDN)
    intCurrentValue = objUserLDAP.Get("userAccountControl")
    	   objRecordSet.MoveNext
    Loop
    
    
    If intCurrentValue and ADS_UF_DONT_EXPIRE_PASSWD Then
     wscript.echo "The password does not expire."
    Else
     dtmValue = objUserLDAP.PasswordLastChanged 
     Wscript.echo "Пароль изменен последний раз " & _
     DateValue(dtmValue) & " в " & TimeValue(dtmValue) & VbCrLf & _
     "Разница между последней сменой пароля и сегоднешней датой" & VbCrLf & _
      int(now - dtmValue) & " дней"
     intTimeInterval = int(now - dtmValue)
     
     Set objDomainNT = GetObject("WinNT://mydomen")
     intMaxPwdAge = objDomainNT.Get("MaxPasswordAge")
     If intMaxPwdAge < 0 Then
      WScript.Echo "The Maximum Password Age is set to 0 in the " & _
       "domain. Therefore, the password does not expire."
     Else
      intMaxPwdAge = (intMaxPwdAge/SEC_IN_DAY)
      Wscript.echo "The maximum password age is " & intMaxPwdAge & " days"
      If intTimeInterval >= intMaxPwdAge Then
       Wscript.echo "The password has expired."
      Else
       Wscript.echo "The password will expire on " & _
       DateValue(dtmValue + intMaxPwdAge) & " (" & _
       int((dtmValue + intMaxPwdAge) - now) & " days from today" & ")."
      End If
     End If
    End If
    

     

    • Помечено в качестве ответа Max441 7 сентября 2010 г. 9:08
    7 сентября 2010 г. 9:07

Все ответы

  • А что конкретно не получается или непонятно?


    AKA Xaegr, MCSE: Security, Messaging; MCITP: Server\Enterprise Administrator; Блог: http://xaegr.wordpress.com
    6 сентября 2010 г. 15:29
    Модератор
  • как говорится не дам ладу :)

    Первый скрипт дает то чего я хочу получить в конечном итоге, но неудобно вручную прописывать путь к объекту.

    Второй ищет так как я хочу, но как к нему прикрутить первую часть скрипта?

    Первый и второй скрипт работает успешно по отдельности.

    6 сентября 2010 г. 17:04
  • Нужные вам атрибуты, значение, которых вы хотите получить, перечислите через запятую в запросе SELECT, например:

    objCommand.CommandText = "SELECT name, userAccountControl, distinguishedName  FROM " & _
    "'LDAP://DC=mydomen,DC=ru' "...

    вот, посмотрите, я когда-то писал скрипт для получения информации о пользователях домена при помощи adodb: http://sysadmins.ru/post6699608.html#6699608


    blog: http://shss.wordpress.com/
    • Помечено в качестве ответа Max441 7 сентября 2010 г. 9:08
    6 сентября 2010 г. 18:41
  • спасибо. Ключом послужил атрибут distinguishedName :)

    Готовый скрипт имеет вид:

    On Error Resume Next
    user = InputBox("Имя пользователя") 
    Const SEC_IN_DAY = 86400
    Const ADS_UF_DONT_EXPIRE_PASSWD = &h10000
    Const ADS_SCOPE_SUBTREE = 2
    
    Set objConnection = CreateObject("ADODB.Connection")
    Set objCommand = CreateObject("ADODB.Command")
    objConnection.Provider = ("ADsDSOObject")
    objConnection.Open "Active Directory Provider"
    objCommand.ActiveConnection = objConnection
    objCommand.CommandText = "SELECT name,distinguishedName FROM " & _
      "'LDAP://DC=mydomen,DC=ru' " & _
        "WHERE Name = '" & user & "'"
    objCommand.Properties("SearchScope") = ADS_SCOPE_SUBTREE
    Set objRecordSet = objCommand.Execute
    
    objRecordSet.MoveFirst
    
    Do Until objRecordSet.EOF
      strDN = objRecordSet.Fields("distinguishedName").Value
      Set objUserLDAP = GetObject("LDAP://" & strDN)
    intCurrentValue = objUserLDAP.Get("userAccountControl")
    	   objRecordSet.MoveNext
    Loop
    
    
    If intCurrentValue and ADS_UF_DONT_EXPIRE_PASSWD Then
     wscript.echo "The password does not expire."
    Else
     dtmValue = objUserLDAP.PasswordLastChanged 
     Wscript.echo "Пароль изменен последний раз " & _
     DateValue(dtmValue) & " в " & TimeValue(dtmValue) & VbCrLf & _
     "Разница между последней сменой пароля и сегоднешней датой" & VbCrLf & _
      int(now - dtmValue) & " дней"
     intTimeInterval = int(now - dtmValue)
     
     Set objDomainNT = GetObject("WinNT://mydomen")
     intMaxPwdAge = objDomainNT.Get("MaxPasswordAge")
     If intMaxPwdAge < 0 Then
      WScript.Echo "The Maximum Password Age is set to 0 in the " & _
       "domain. Therefore, the password does not expire."
     Else
      intMaxPwdAge = (intMaxPwdAge/SEC_IN_DAY)
      Wscript.echo "The maximum password age is " & intMaxPwdAge & " days"
      If intTimeInterval >= intMaxPwdAge Then
       Wscript.echo "The password has expired."
      Else
       Wscript.echo "The password will expire on " & _
       DateValue(dtmValue + intMaxPwdAge) & " (" & _
       int((dtmValue + intMaxPwdAge) - now) & " days from today" & ")."
      End If
     End If
    End If
    

     

    • Помечено в качестве ответа Max441 7 сентября 2010 г. 9:08
    7 сентября 2010 г. 9:07