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

PowerShell脚本优化:按原CSV行筛选导出禁用AD用户

问题解决:按行筛选CSV中的禁用AD用户

需求明确

处理仅含Permissions列的CSV文件,需满足:

  • 仅保留禁用的AD用户
  • 排除两类对象:启用的AD用户、以S-1-5-21-开头的SID标识
  • 输出必须与原CSV行严格一一对应:每行符合条件的用户用;分隔,无符合对象则输出空行

现有脚本问题

  • 所有禁用用户被合并为单行输出,未按原CSV行拆分
  • 空行数量错误(例如原CSV有3行,其中2行无符合用户时,错误输出4个空行)

输入输出示例

输入CSV(input.csv)

Permissions
user1;S-1-5-21-123456;user2
user3
S-1-5-21-789012;user4

期望输出

user1

user4

说明:user1为禁用用户,user2为启用用户被排除;user3为启用用户,输出空行;user4为禁用用户,SID标识被排除

修正后的PowerShell脚本

# 读取输入CSV文件,替换为你的实际文件路径
$inputPath = "input.csv"
$outputPath = "output.txt"

Import-Csv -Path $inputPath | ForEach-Object {
    # 拆分当前行的权限项,过滤空值和SID前缀项
    $candidates = $_.Permissions -split ';' | Where-Object { 
        $_ -and -not $_.StartsWith('S-1-5-21-') 
    }

    # 筛选禁用的AD用户,忽略查询失败的对象
    $disabledUsers = $candidates | ForEach-Object {
        try {
            $adUser = Get-ADUser -Identity $_ -Properties Enabled -ErrorAction Stop
            if (-not $adUser.Enabled) { $_ }
        }
        catch {
            # 跳过不存在的用户或查询错误
            continue
        }
    }

    # 输出当前行的结果:符合条件的用户用;分隔,无则输出空字符串
    $disabledUsers -join ';'
} | Out-File -Path $outputPath -Encoding UTF8

关键修正点

  1. 逐行处理:通过ForEach-Object遍历原CSV的每一行,确保输出与原行一一对应
  2. 精准过滤:先排除SID前缀项,再查询AD用户状态筛选禁用对象
  3. 错误处理:用try/catch捕获AD用户查询失败的情况(如用户不存在),避免脚本中断
  4. 空行控制:无符合条件用户时,$disabledUsers -join ';'会输出空字符串,对应正确的空行

内容的提问来源于stack exchange,提问作者Arbelac

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 23:12:07