通过PowerShell优雅地扩展AD属性pwdLastSet

时间:2016-08-17 22:54:25

标签: powershell active-directory

在35天的时间内,我们将强制用户在下次登录时重置密码。

我已经测试过将用户pwdLastSet属性设置为0然后-1,有效地将其重置为该时间点,因此他们需要在90天后重置密码(我们当前的密码策略)年龄是90天)。

我想弄清楚的是如何优雅地为我的用户更改pwdLastSet日期,以便我"解压缩"他们的密码年龄从35天回到90天(我们每天都会收到很多与密码相关的电话,什么都不做只会让事情变得更糟)。

我正在使用这些命令捕获用户:

$dateam = (Get-Date $date -hour 0 -Minute 00 -Second 00).ToFileTime()
$datepm = (Get-Date $date -Hour 23 -Minute 59 -Second 59).ToFileTime()
$users = (Get-ADUser -Filter {(pwdLastSet -gt $dateam) -and (pwdLastSet -lt $datepm) -and (extensionAttribute2 -notlike "*")} -Properties pwdLastSet, extensionAttribute2 -SearchBase "OU=users,DC=domain,DC=com").SamAccountName

因为我只能将pwdLastSet属性日期设置为当前日期/时间,我相信我需要每天运行一些东西来捕获用户,将用户名保存到将来要拾取的文件中(然后将extensionAttribute2设置为任何价值,以便他们在未来的运行中不会再次被选中)

我努力奋斗的是将事情保持在90天的逻辑。如果可能的话,我想阻止用户设置他们的pwdLastSet属性,比如强制密码更改后35天,所以实际上他们的下一次密码更改是105天。

我有各种各样的测试代码,但没有什么特别有用的。请帮忙!

1 个答案:

答案 0 :(得分:0)

好的,我想我得到了你想做的事。对不起,我想念了。因此,在需要更改密码之前已经离开35天的用户将再获得90天。所以你想要这样做你的时间:

$dateam = ((Get-Date -hour 0 -Minute 00 -Second 00).Add("-55")).ToFileTime()
$datepm = ((Get-Date -Hour 23 -Minute 59 -Second 59).Add("-90")).ToFileTime()
$users = (Get-ADUser -Filter {(pwdLastSet -gt $dateam) -or (pwdLastSet -lt $datepm) -and (extensionAttribute2 -notlike "*")} -Properties pwdLastSet, extensionAttribute2)

这会让所有用户都拥有35天的密码。

$dateam = ((Get-Date -hour 0 -Minute 00 -Second 00).Add("-55")).ToFileTime()
$datepm = ((Get-Date -Hour 23 -Minute 59 -Second 59).Add("-90")).ToFileTime()
$users = (Get-ADUser -Filter {(pwdLastSet -gt $dateam) -or (pwdLastSet -lt $datepm) -and (extensionAttribute2 -notlike "*")} -Properties  pwdLastSet, extensionAttribute2)

foreach($user in $users)
{
    $user.pwdLastSet = 0
    $user.PasswordNeverExpires = $false
    Set-ADUser -Instance $user

    $user.pwdLastSet = -1
    Set-ADUser -Instance $user
}