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
相关产品推荐
相关产品推荐

