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

PowerShell脚本需求:将导入CSV的UPN添加至导出CSV

完善后的Azure AD用户许可证分配日期导出脚本

原脚本存在几个问题:循环内每次调用Export-CSV会覆盖之前的结果,输出缺少关键的UserPrincipalName字段,且用-SearchString获取用户可能匹配多个结果导致不准确。以下是修正后的脚本:

# 初始化数组存储所有结果
$results = @()
$userListPath = 'C:\test\userlist.csv'
$exportPath = 'C:\test\userlist-export.csv'

# 导入用户列表
$getusers = Import-Csv -Path $userListPath

foreach ($user in $getusers) {
    $upn = $user.UserPrincipalName
    try {
        # 精准获取指定UPN的用户
        $azureUser = Get-AzureADUser -UserPrincipalName $upn -ErrorAction Stop
        
        # 筛选MicrosoftOffice许可证并添加UPN字段
        $licenseInfo = $azureUser.AssignedPlans | Where-Object { $_.Service -eq 'MicrosoftOffice' } | 
            Select-Object @{Name='UserPrincipalName'; Expression={$upn}},
                          Service,
                          AssignedTimeStamp
        
        # 将结果添加到数组
        if ($licenseInfo) {
            $results += $licenseInfo
        } else {
            # 记录无Office许可证的用户
            $results += [PSCustomObject]@{
                UserPrincipalName = $upn
                Service = '无MicrosoftOffice许可证'
                AssignedTimeStamp = $null
            }
        }
    } catch {
        # 记录获取失败的用户
        $results += [PSCustomObject]@{
            UserPrincipalName = $upn
            Service = '用户不存在或获取失败'
            AssignedTimeStamp = $null
        }
    }
}

# 统一导出所有结果到CSV
$results | Export-Csv -Path $exportPath -NoTypeInformation -Encoding UTF8

关键改动说明:

  • 精准用户定位:改用-UserPrincipalName参数获取用户,避免-SearchString可能匹配多个用户的问题
  • 避免文件覆盖:先将所有结果存入数组,最后一次性导出,解决循环内导出覆盖数据的问题
  • 补充UPN字段:通过计算属性将用户UPN加入输出结果,确保导出数据关联到具体用户
  • 错误与异常处理:捕获用户不存在或获取失败的情况,同时记录无Office许可证的用户,输出更完整
  • 编码优化:添加-Encoding UTF8参数,避免导出CSV时出现中文乱码问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 20:15:32