Powershell - 如何在 get-aduser“数据集”上设置多个操作

Powershell - 如何在 get-aduser“数据集”上设置多个操作

我正在尝试运行一个脚本来修改多个 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 }

相关内容