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

如何在CSV输出中新增来自Get-AzureADUser cmdlet的CompanyName列?两个cmdlet的UserPrincipalName参数一致且均存在

解决方案:在O365用户报告中添加AzureAD的CompanyName列

要实现这个需求,核心是利用**UserPrincipalName(UPN)**作为Get-MsolUser和Get-AzureADUser之间的唯一匹配标识。为了避免循环中重复调用Get-AzureADUser导致的性能损耗,我们可以先批量获取所有AzureAD用户的UPN与CompanyName映射,再和Msol用户数据集合并。

完整修改后的脚本

# 1. 连接Office 365和Azure AD服务(运行前需确保已安装对应模块)
Connect-MsolService
Connect-AzureAD

# 2. 定义需要查询的国家/地区集合
$CountryList = ('SWEDEN', 'NORWAY')

# 3. 批量获取所有AzureAD用户的UPN与CompanyName,存入哈希表提升查询效率
$azureADCompanyMap = @{}
Get-AzureADUser -All $true | ForEach-Object {
    $azureADCompanyMap[$_.UserPrincipalName] = $_.CompanyName
}

# 4. 获取符合条件的Msol用户,并合并CompanyName列
$DataSet = foreach ($Country in $CountryList) {
    Get-MsolUser -EnabledFilter EnabledOnly -Country "$Country" | 
        Where-Object { $_.isLicensed -eq $true } | 
        Select-Object Country, State, UserPrincipalName, DisplayName, FirstName, LastName, Department, Title, MobilePhone, PhoneNumber, isLicensed,
            # 通过哈希表匹配当前用户的CompanyName
            @{Name = 'CompanyName'; Expression = { $azureADCompanyMap[$_.UserPrincipalName] } }
}

# 5. 导出到CSV文件(添加编码和无类型信息参数优化输出)
$DataSet | Export-Csv -Path "C:\Users\unknown\Report.csv" -NoTypeInformation -Encoding UTF8

关键细节解释

  • 哈希表的优势:$azureADCompanyMap将所有AzureAD用户的UPN作为键、CompanyName作为值存储,后续遍历Msol用户时可以直接通过UPN快速查找对应信息,避免了循环内重复调用Get-AzureADUser的性能浪费,尤其适合用户量较大的场景。
  • 自定义计算列:在Select-Object中使用@{Name='CompanyName'; Expression={...}}语法新增列,表达式部分从哈希表中提取当前用户的CompanyName。
  • 导出优化:添加-NoTypeInformation可以移除CSV默认的类型信息头,-Encoding UTF8确保导出文件在不同系统下的编码兼容性。
  • 前置准备:确保已安装MSOnline和AzureAD模块(可通过Install-Module MSOnline、Install-Module AzureAD命令安装),且账号拥有访问两个服务的权限。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 05:19:07