我正在尝试运行一个脚本来修改多个 AD 用户帐户的密码,启用这些帐户并在下次登录时强制更改密码。
我使用了这个代码,但是它不起作用:
Get-ADUSER -Filter * -SearchScope Subtree -SearchBase "OU=myou,OU=otherou,DC=mydc,DC=local" | Set-ADAccountPassword -Reset -NewPassword (ConvertTo-SecureString -AsPlainText "NewPassord" -Force) | Enable-ADAccount | Set-ADUSER -ChangePasswordAtLogon $true
如果我仅使用另一行运行良好的代码来运行 Get-ADuser 行,例如:
Get-ADUSER -Filter * -SearchScope Subtree -SearchBase "OU=myou,OU=otherou,DC=mydc,DC=local" | Enable-ADAccount
我错在哪里?我是 PowerShell 新手,可能误解了某些内容。
答案1
您的管道没有按照您预期的方式运行。
$UserList=Get-ADUSER -Filter * -SearchScope Subtree -SearchBase "OU=myou,OU=otherou,DC=mydc,DC=local"
foreach ($User in $UserList) {
Set-ADAccountPassword $User -Reset -NewPassword (ConvertTo-SecureString -AsPlainText "NewPassord" -Force
Enable-ADAccount $User
Set-ADUSER $user -ChangePasswordAtLogon $true
}
管道不适用于对同一对象执行多项操作。只有当管道中的每个命令转发的对象与初始对象相同时,管道才有效。为此,通过循环进行迭代更有意义。
答案2
Get-ADUSER -Filter * -SearchScope Subtree -SearchBase "OU=myou,OU=otherou,DC=mydc,DC=local" | %{ Set-ADAccountPassword $.Name -Reset -NewPassword (ConvertTo-SecureString -AsPlainText "NewPassord" -Force) 启用-ADAccount $.名称设置-ADUSER $_.名称-ChangePasswordAtLogon $true }