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

PowerShell使用姓名CSV执行Active Directory查询报错问题问询

问题解答

1. 报错代码的核心问题

  • 文件读取逻辑错误:你使用的是无表头的单行文本文件,Import-Csv会默认将第一行姓名识别为列名,你调用的$_.user/$_.users不存在对应字段,返回空值,直接触发-Identity参数的空值校验报错。
  • 参数使用不符合规则:Get-ADUser的-Identity参数仅支持传入AD用户的可分辨名称(DN)、GUID、安全标识符(SID)、SAM账户名四类值,不支持直接传入Name字段,就算你正确读取到姓名,直接传给-Identity也会报错。
  • 姓名同时对应Name、DisplayName等多个字段不是本次报错的直接原因,属于后续匹配逻辑需要处理的问题。

2. 以姓名为输入的代码调整方案

不需要修改CSV文件,直接调整查询逻辑即可:

  1. 替换文件读取命令:无表头的单行文本文件直接用Get-Content读取,无需使用Import-Csv
  2. 替换-Identity参数为-Filter参数,指定按Name字段匹配
  3. 增加空值过滤、未匹配/重名场景的兼容逻辑

调整后的可运行代码如下:

# 读取姓名列表,过滤空行
Get-Content "C:\ps\users_list.csv" | Where-Object { $_ -match '\S' } | ForEach-Object {
    $currentName = $_.Trim()
    # 按AD的Name字段匹配查询,可根据需要修改为DisplayName
    $matchedUsers = Get-ADUser -Filter "Name -eq '$currentName'" -Properties UserPrincipalName, SamAccountName
    
    if ($null -eq $matchedUsers) {
        # 未匹配到用户的场景标记
        [PSCustomObject]@{
            Name = $currentName
            SamAccountName = "未匹配到AD用户"
            UserPrincipalName = "未匹配到AD用户"
        }
    } else {
        # 匹配到1个/多个用户都直接输出
        $matchedUsers | Select-Object Name, SamAccountName, UserPrincipalName
    }
} | Export-Csv "C:\ps\users_ad_list.csv" -NoTypeInformation -Encoding UTF8

如果需要同时匹配Name和DisplayName字段,将Filter条件修改为"Name -eq '$currentName' -or DisplayName -eq '$currentName'"即可。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 08:45:01