我的任务是创建一个脚本,该脚本会将 Active Directory 用户 ID 列表读入文件中,然后清除“密码永不过期”标志。此外,我的安全官不希望 500 名使用此设置的用户的密码立即被重置,因此他希望在运行脚本时将默认的域策略设置为 90 天,这样用户就可以进行正常的密码轮换。
我一直在尝试创建一个 PowerShell 脚本来执行此操作,但遇到了问题。诚然,我不是 PowerShell 方面的佼佼者,因此我非常希望得到一些建议。
我有要清除的标志,但将 PwdLastSet 更改为 -1 被证明是棘手的。我想这可能是因为我不知道如何读取文件并从读取文件中执行两个“ForEach-Object”命令。有人可以看看吗?
Import-CSV PasswordExpiry.csv | ForEach-Object {Set-ADUser -Identity $_.SamAccountName -PasswordNeverExpires:$false}
ForEach-Object {
$samaccountname = $_.SamAccountName
$today = Get-Date
$lastchange = [datetime]::FromFileTime($_.pwdlastset[0])
$timediff = New-TimeSpan $lastchange $(Get-Date)
$hoursdiff = $timediff.TotalHours
if ($hoursdiff -lt $hourschange_sincePwdChange) {
$todouser = Get-ADUser $samaccountname -Properties pwdLastSet
$todouser.pwdLastSet = 0
Set-ADUser -Instance $todouser
$todouser.pwdLastSet = -1
Set-ADUser -Instance $todouser
}
}
我收到几个位置参数错误,说它不能接受参数 $null,但我不确定我错在哪里。
答案1
AD 不允许您更改上次重置密码的日期,除非将其设置为 0(这将强制在下次登录时更改密码)。为此,您无法手动设置 PwdLastSet,您必须使用类似以下代码片段的内容:
Set-ADUser -Identity JoeBlow -ChangePasswordAtNextLogon $true
答案2
放弃,因为您无法(直接)修改用户的 pwdLastSet 属性。该属性只能由系统(目录服务引擎)本身设置。(ERROR_DS_ATTRIBUTE_OWNED_BY_SAM)
有关更多信息,请参阅 Microsoft 文档 MS-ADTS。
答案3
我能够通过以下方式实现这一点:
Import-Module ActiveDirectory
$ADUserParams=@{
'Searchbase' = 'OU=Users,OU=Testing,OU=IT,OU=XXX,DC=XXX,DC=local'
'Filter' = '*'
'Properties' = 'cn','sn','givenname','displayName','mail','description','UserPrincipalName', 'employeeNumber', 'profilepath', 'title'
}
$ADUsers = Get-ADUser @ADUserParams
ForEach ($ADUser in $ADUsers) {
$ADUser = Get-ADUser $ADUser -properties pwdlastset
$ADUser.pwdlastset = 0
Set-ADUser -Instance $ADUser
$ADUser.pwdlastset = -1
Set-ADUser -instance $ADUser
}
取自这里