必须创建 PowerShell 脚本来更改密码到期时间和日期以更改下一个密码

必须创建 PowerShell 脚本来更改密码到期时间和日期以更改下一个密码

我的任务是创建一个脚本,该脚本会将 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 
}

取自这里

相关内容