#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.
попробуйте это :
- Установите
pwdLastSet
в 0, это означает, что пароль никогда не был установлен. - Затем установите
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 — это ОПРЕДЕЛЕННО НЕ то, что вам нужно.