AD PowerShell:通过UserPrincipalName批量移除组内用户
优化批量从AD安全组移除用户的PowerShell代码
极简优化版本(砍掉中间文件)
直接去掉多余的CSV写入/读取步骤,通过管道一步完成用户查询与移除:
$CSV = 'C:\Temp\users.csv' $GROUP = 'SecurityGroup' Import-CSV -Path $CSV | ForEach-Object { # 通过UPN获取AD用户对象,直接传给移除组成员命令 Get-ADUser -Filter "UserPrincipalName -eq '$($_.UserPrincipalName)'" | Remove-ADGroupMember -Identity $GROUP -Members $_ -Confirm:$false }
优化点说明
- 彻底删除了中间
userssam.csv的IO操作,减少磁盘读写开销,流程更简洁 Remove-ADGroupMember的-Members参数支持直接接收Get-ADUser返回的AD用户对象,不需要额外提取SAMAccountName,cmdlet会自动识别对象的标识属性- 用
$($_.UserPrincipalName)子表达式语法,避免字符串拼接时的语法错误
进阶批量处理版本(适合大量用户)
如果要处理的用户数量较多,建议先批量查询所有用户,再一次性移除,减少对AD服务器的请求次数:
$CSV = 'C:\Temp\users.csv' $GROUP = 'SecurityGroup' # 批量获取所有存在的AD用户对象,跳过找不到的用户 $targetUsers = Import-CSV -Path $CSV | ForEach-Object { Get-ADUser -Filter "UserPrincipalName -eq '$($_.UserPrincipalName)'" -ErrorAction SilentlyContinue } # 仅当找到有效用户时执行移除操作 if ($targetUsers) { Remove-ADGroupMember -Identity $GROUP -Members $targetUsers -Confirm:$false }
内容的提问来源于stack exchange,提问作者KHdoesntCODE
相关产品推荐
相关产品推荐

