批量禁用AD用户的PowerShell脚本未执行问题求助
PowerShell AD用户禁用脚本问题排查与修复
脚本存在的核心问题
- OU路径不完整:
$TargetOU = "OU=DisabledUsers"仅指定了OU名称,AD操作需要完整LDAP路径(如OU=DisabledUsers,DC=domain,DC=com),否则无法定位目标OU。 - 组移除语法错误:
Get-AdPrincipalGroupMembership后缺少管道符|,导致Where-Object逻辑无法执行;且Remove-AdGroupMember未处理交互确认,会中断脚本执行。 - 描述修改命令错误:
Get-ADUser是查询命令,无法修改属性,需改用Set-ADUser。 - 移动对象参数未定义:
$UserDN未赋值,脚本无法识别要移动的对象。 - CSV路径错误:
C:temp\DisableTest.csv缺少反斜杠,应为C:\temp\DisableTest.csv。 - 组移除逻辑缺失:原写法未正确遍历并移除目标组,仅写了语法错误的代码块。
修正后的完整脚本
Import-Module ActiveDirectory # 替换为你的完整OU LDAP路径,示例:OU=DisabledUsers,DC=contoso,DC=com $TargetOU = "OU=DisabledUsers,DC=yourdomain,DC=com" # 修正CSV路径的反斜杠 Import-Csv "C:\temp\DisableTest.csv" | ForEach-Object { $samAccountName = $_.samAccountName # 一次性获取用户对象,减少AD查询次数 $user = Get-ADUser -Identity $samAccountName -Properties DistinguishedName, MemberOf # 移除除Domain Users外的所有组 $user.MemberOf | Get-ADGroup | Where-Object Name -Ne 'Domain Users' | ForEach-Object { Remove-AdGroupMember -Identity $_ -Members $samAccountName -Confirm:$false } # 禁用用户账户 Disable-ADAccount -Identity $user # 修改用户描述 Set-ADUser -Identity $user -Description "Disabled Per Request XXXX" # 移动用户到禁用OU Move-ADObject -Identity $user.DistinguishedName -TargetPath $TargetOU }
关键修正说明
- 完整OU路径:需从AD用户和计算机中查看目标OU的
distinguishedName属性,复制完整LDAP路径填入$TargetOU。 - 复用用户对象:先获取一次
$user对象,后续操作直接调用,提升脚本执行效率。 - 组移除优化:通过用户的
MemberOf属性获取所属组,过滤Domain Users后批量移除,添加-Confirm:$false避免交互中断。 - 属性修改正确命令:使用
Set-ADUser修改用户描述,替代原错误的Get-ADUser写法。 - 移动对象参数赋值:直接使用
$user.DistinguishedName作为Move-ADObject的标识参数。
内容的提问来源于stack exchange,提问作者RustyShackleford
相关产品推荐
相关产品推荐

