Изменить дату истечения срока действия пароля в Active Directory с помощью VBS

#vbscript #active-directory #passwords

#vbscript #active-directory #пароли

Вопрос:

Я пытаюсь изменить дату истечения срока действия пароля для пользователя в Active Directory с помощью VBScript. У меня есть код для получения информации о пароле пользователя, но я ничего не могу найти о том, как его изменить. Будем признательны за любую помощь!

Вот мой код:

 Const SEC_IN_DAY = 86400
Const ADS_UF_DONT_EXPIRE_PASSWD = amp;h10000

Set objOU = GetObject("LDAP://CN=[username],OU=Users,OU=New York,OU=NA,OU=[domain],DC=[domain],DC=firm")

intCurrentValue = objOU.Get("userAccountControl")

If intCurrentValue and ADS_UF_DONT_EXPIRE_PASSWD Then
  wscript.echo "The password does not expire."
Else
  dtmValue = objOU.PasswordLastChanged 
  Wscript.echo "The password was last changed on " amp; _
  DateValue(dtmValue) amp; " at " amp; TimeValue(dtmValue) amp; VbCrLf amp; _
  "The difference between when the password was last set" amp; VbCrLf amp; _
  "and today is " amp; int(now - dtmValue) amp; " days"
  intTimeInterval = int(now - dtmValue)

  Set objDomainNT = GetObject("WinNT://ropesgray")
  intMaxPwdAge = objDomainNT.Get("MaxPasswordAge")
  If intMaxPwdAge < 0 Then
    WScript.Echo "The Maximum Password Age is set to 0 in the " amp; _
      "domain. Therefore, the password does not expire."
  Else
    intMaxPwdAge = (intMaxPwdAge/SEC_IN_DAY)
    Wscript.echo "The maximum password age is " amp; intMaxPwdAge amp; " days"
    If intTimeInterval >= intMaxPwdAge Then
      Wscript.echo "The password has expired."
    Else
      Wscript.echo "The password will expire on " amp; _
      DateValue(dtmValue   intMaxPwdAge) amp; " (" amp; _
      int((dtmValue   intMaxPwdAge) - now) amp; " days from today" amp; ")."
    End If
  End If
End If


'strUserPrincipalName = objOU.Get("userPrincipalName")
'strSAMAccountName = objOU.Get("sAMAccountName")
'strMaxPWAge = objOU.Get("manager")

'WScript.Echo strUserPrincipalName
'WScript.Echo strSAMAccountName
'WScript.Echo strMaxPWAge
  

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

1. Я нашел свойство, которое необходимо изменить (я думаю): PasswordLastChanged, но я не могу его установить. Я попытался установить другое свойство (почтовый индекс) и смог установить его с помощью objUser. SetInfo, но когда я пытаюсь установить дату, в той же строке выдается ошибка: objUser.Put «PasswordLastChanged», DateValue(«31-March-11») objUser. SetInfo

Ответ №1:

Вы можете использовать pwdLastSet атрибут для изменения срока действия пароля, но, возможно, не так, как вы хотите. pwdLastSet — это количество интервалов в 100 наносекунд с 12:00 утра 1 января 1601 года. Согласно документации Microsoft, этот атрибут принимает только два значения 0 или -1.

попробуйте это :

  1. Установите pwdLastSet в 0, это означает, что пароль никогда не был установлен.
  2. Затем установите pwdLastSet значение -1, это означает, что пароль только что был установлен. Таким образом, значение, которое отображается в pwdLastSet , является текущей датой / временем.

Я использую in в W2K3, и он все еще работает на W2H8 R2.

Вы можете найти там инструмент (извините, на французском), который позволяет вам создавать дату / время из числа интервалов в 100 наносекунд, начиная с 12:00 утра 1 января 1601 года.

Будьте осторожны, это увеличивает срок действия пароля, что плохо сказывается на безопасности.

Я надеюсь, что это поможет.

JP

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

1. Спасибо JP — я слышал о значениях 0 и -1 для изменения этого значения, но могу ли я установить для него другое число, как вы сказали? (количество интервалов в 100 наносекунд с 1 января 1601 года) Я хотел бы установить срок действия пароля через 3 дня. Вы знаете, возможно ли это?

2. Я думаю, вы не можете установить другие значения, кроме (0, -1) в pwdLastSet. Что именно вы хотите сделать? Вы хотите попросить некоторых пользователей повторно ввести свой пароль через 3 дня с установленной даты?

3. Я бы попытался изменить атрибут accountExpires, я собираюсь протестировать.

4. Я хотел бы изменить дату истечения срока действия пароля пользователя или установить количество дней до его истечения. Итак, для данного пользователя — я хочу сказать «срок действия вашего пароля истечет через 3 дня (или 9/4/2011), поэтому вы должны изменить его вовремя». Спасибо! Имейте в виду, я хочу изменить дату истечения срока действия пароля, а не дату истечения срока действия учетной записи.

5. accountExpires — это ОПРЕДЕЛЕННО НЕ то, что вам нужно.