必须创buildPowerShell脚本来更改密码到期date以更改下一个密码

我的任务是创build一个脚本,在文件中读入一个Active Directory用户ID列表,然后清除Password Never Expires的标志。 另外,我的安全官员不希望有这个设置的500个用户立即需要重新设置他们的密码,所以他希望90天的默认域策略在脚本运行的时候被归因于用户进入通常的密码轮换。

我一直在试图创build一个PowerShell脚本来做到这一点,并遇到问题。 无可否认,我并不是PowerShell的最佳人选,所以我会感激一些input。

我已经清除了标志,但是将PwdLastSet更改为-1将certificate是棘手的。 我认为这可能是因为我不知道如何读取文件,并从文件中读取两个“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,但我不知道我错了。

AD不会让您更改上次重置密码的date,除非更改为0(这将强制在下次login时更改密码)。 要做到这一点,你不能手动设置PwdLastSet,你必须使用类似下面的代码片段:

 Set-ADUser -Identity JoeBlow -ChangePasswordAtNextLogon $true 

放弃,因为你不能(直接)修改用户的pwdLastSet属性。 该属性只能由系统(目录服务引擎)自己设置。 (ERROR_DS_ATTRIBUTE_OWNED_BY_SAM)

有关更多信息,请参阅Microsoft文档MS-ADTS。

我可以用下面的方法来完成这个工作:

 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 } 

从这里采取