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

PowerShell脚本无法通过UPN/邮箱/DisplayName匹配AD用户求助

问题分析与脚本修复

核心问题点

  1. 循环逻辑错误:原脚本将foreach循环的结果赋值给$result,同时在循环内执行$results += $result,导致结果数组无法正确收集有效数据。
  2. UPN存在冗余字符:从Excel读取的$userUPN可能包含空格、换行符或不可见控制字符,导致AD查询匹配失败。
  3. AD Filter写法缺陷:使用脚本块形式的Filter时,PowerShell变量展开机制在AD查询中可能不符合预期,容易导致匹配失败。
  4. 不必要的全属性查询:-Properties *会加载AD用户的所有属性,降低查询效率且无必要。

修复后的脚本

Import-Module -Name ImportExcel
Import-Module -Name ActiveDirectory

$results = @()

# 读取Excel数据到变量
$excelData = Import-Excel -Path "C:\Users\toulayoh\Downloads\DevicesWithInventory_08840cb2-4a3b-4e3e-a81e-6950ffac10f4.xlsx" -WorksheetName "Sheet1"

foreach ($row in $excelData) {
    # 提取UPN并清理首尾冗余字符(空格、换行等)
    $userUPN = $row.'Primary user UPN'.Trim()
    
    # 跳过空的UPN条目
    if ([string]::IsNullOrWhiteSpace($userUPN)) {
        Write-Host "Skipping empty UPN entry."
        continue
    }

    # 使用字符串格式Filter精确匹配UPN,仅加载所需属性
    $user = Get-ADUser -Filter "UserPrincipalName -eq '$userUPN'" -Properties DisplayName, extensionAttribute15, UserPrincipalName

    if ($user) {
        # 添加找到的用户数据到结果数组
        $results += [PSCustomObject] @{
            UserPrincipalName    = $user.UserPrincipalName
            DisplayName          = $user.DisplayName
            ExtensionAttribute15 = $user.extensionAttribute15
        }
        Write-Host "User with UPN '$userUPN' found."
    } else {
        # 记录未找到的用户,便于后续排查
        $results += [PSCustomObject] @{
            UserPrincipalName    = $userUPN
            DisplayName          = "NOT FOUND"
            ExtensionAttribute15 = "NOT FOUND"
        }
        Write-Host "User with UPN '$userUPN' not found."
    }
}

# 导出结果到Excel,保留表头便于查看
$results | Export-Excel -Path "C:\Users\toulayoh\Downloads\outputdata2.xlsx" -AutoSize

Write-Host "Processing finished. Results exported to target file."

关键修改说明

  • UPN清理:通过.Trim()去除字符串首尾的空格、换行符等不可见字符,解决因Excel导出时的格式问题导致的匹配失败。
  • 循环逻辑修正:先将Excel数据读取到独立变量,再遍历处理,直接在循环内将创建的对象添加到结果数组,避免原脚本中变量混淆的问题。
  • AD查询优化:使用字符串格式的Filter确保变量正确展开,同时用-eq精确匹配UPN(替代原脚本的模糊匹配-like),避免误匹配;仅指定需要的属性,提升查询速度。
  • 空值处理:增加对空UPN条目的判断,跳过无效数据,避免无意义的AD查询。
  • 结果完整性:将未找到的用户也记录到结果中,方便后续核对Excel数据与AD的差异。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 19:52:55