Как массово обмануть включенную галку PasswordNeverExpires при внедрении парольной политики
![топ 100 блогов](/media/images/default.jpg)
Вот статьи например:
https://social.technet.microsoft.com/Forums/windowsserver/en-US/9c3caa80-9e97-4808-96a8-5af696aaa7b3/pwdlastset-possible-to-change-?forum=winserverDS
Точнее вот:
https://social.technet.microsoft.com/Forums/fr-FR/6622c897-c460-41ce-a237-a6eabff3ca12/why-cant-i-set-pwdlastset-with-setaduser?forum=winserverpowershell
https://community.spiceworks.com/how_to/29586-active-directory-how-to-reset-password-expiration-date
Можно просто убрать искомую галочку, но тогда все учетки заблочатся по просрочке.
Но можно обмануть систему)
Аттрибут PwdLastSet в AD можно менять вручную только на 2 значения, как я понял.
0 = пароль учетки сразу истекает
-1 = в аттрибут автоматом записыватся текущий timestamp и у учетки есть впереди 60-90 дней на смену пароля, согласно политики.
Текст скрипта (предварительно можно скачать командлеты Quest for AD, так удобнее)
Add-PSSnapin Quest.ActiveRoles.ADManagement
import-module activedirectory
#получаем имена SAM из списка DisplayName (список нужных учеток уж сами как-то получите)
$Data = ForEach ($User in (Get-Content "C:\_temp\DN.csv")) { Get-QADuser $User | Select SamAccountName}
$Data | Export-CSV "C:\_temp\SAM.csv" -NoTypeInformation
#потом в файле SAM.csv вручную убрать кавычки.
#и ессно сохранять всё в Unicode, через Блокнот например
ТЕКСТ СКРИПТА:
import-module activedirectory
$users = Get-Content "C:\_temp\SAM.csv"
#$users = "ivan.ivanov"
#для теста одиночной учетки
foreach ($user in $users)
{
$username = Get-ADUser -identity $user
$uObj = [ADSI]"LDAP://$username"
$uObj.put("pwdLastSet", 0)
$uObj.SetInfo()
$uObj.put("pwdLastSet", -1)
$uObj.SetInfo()
Get-ADUser -identity $user | Set-ADUser -PasswordNeverExpires $false
}
|
</> |