如何优化读取CSV中UPN移除AD组成员的PowerShell脚本?
PowerShell AD组批量移除用户脚本优化方案
以下是添加错误校验后的完整脚本:
$CSVFile = Read-Host -Prompt 'Enter the name of the user CSV file (filename.csv)' $Path = 'C:\scripts' $UPNs = Import-Csv $Path\$CSVFile # 初始化变量:有效账号集合、无效UPN集合 $UIDs = @() $invalidUPNs = @() Foreach ($UPN in $UPNs.userprincipalname) { # 查询AD用户时忽略报错,避免异常终止 $adUser = Get-Aduser -filter {UserPrincipalName -eq $UPN} -ErrorAction SilentlyContinue if ($null -eq $adUser) { # 匹配不到的UPN加入无效列表 $invalidUPNs += $UPN continue } # 匹配成功的账号加入待移除集合 $UIDs += $adUser.SamAccountName } # 输出所有无效UPN if ($invalidUPNs.Count -gt 0) { Write-Host "`n以下UPN未在AD中匹配到对应账号:" $invalidUPNs | ForEach-Object { Write-Host $_ } } # 仅当存在有效账号时执行移除操作,避免null参数报错 if ($UIDs.Count -gt 0) { Remove-ADGroupMember "My-AD-Group" -Members $UIDs Write-Host "`n已完成对$($UIDs.Count)个有效账号的组移除操作" } else { Write-Host "`n未找到任何有效AD账号,无移除操作执行" }
关键修改说明
- 新增
$invalidUPNs数组存储AD匹配失败的UPN,遍历结束后统一输出,方便批量核对异常数据 - 为
Get-ADUser添加-ErrorAction SilentlyContinue参数,避免查询不存在的UPN时抛出异常中断脚本 - 每次查询后新增非空判断,仅将匹配成功的用户SamAccountName存入待移除数组,避免无效null值混入
- 执行
Remove-ADGroupMember前先判断待移除数组长度,数组为空时跳过执行,彻底解决Members参数为null的报错
内容的提问来源于stack exchange,提问作者Michael Schubert
相关产品推荐
相关产品推荐

