You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何优化读取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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 15:54:07