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

使用PowerShell导出含自定义属性的Azure AD B2C用户表格

批量导出数百万Azure AD用户指定字段到文件

针对数百万量级的Azure AD用户导出需求,直接一次性拉取所有用户会导致内存溢出或API超时,以下是优化后的分页导出方案:

核心脚本

# 配置导出参数
$exportFilePath = "C:\Your\Path\AzureAD_Users_Export.csv"
# 替换为实际的扩展属性名
$targetExtensionProp = "extension_<largenumber>_customerId"

# 初始化分页链路
$nextPageLink = $null

do {
    # 分页拉取用户,仅加载必要属性减少数据传输
    $batchUsers = Get-AzureADUser -All $false -Top 999 -NextPageLink $nextPageLink -Select ObjectId, UserPrincipalName, ExtensionProperty
    
    # 提取目标字段并格式化输出
    $exportData = $batchUsers | ForEach-Object {
        [PSCustomObject]@{
            ObjectId       = $_.ObjectId
            Email          = $_.UserPrincipalName
            CustomerId     = $_.ExtensionProperty[$targetExtensionProp] ?? $null
        }
    }
    
    # 增量追加到CSV文件(首次创建,后续追加)
    $exportData | Export-Csv -Path $exportFilePath -Append -NoTypeInformation -Encoding UTF8
    
    # 更新下一页链路
    $nextPageLink = $batchUsers.NextPageLink
} while ($nextPageLink -ne $null)

Write-Host "导出完成,文件路径:$exportFilePath"

关键优化说明

  • 分页处理:使用-Top 999(AzureAD模块单次请求最大返回量)结合-NextPageLink循环拉取,避免一次性加载数百万用户占用大量内存。
  • 属性筛选:通过-Select指定仅获取ObjectId、UserPrincipalName和ExtensionProperty,减少API传输的数据量,提升执行效率。
  • 扩展属性兼容:用?? $null处理部分用户缺失目标扩展属性的情况,避免脚本报错中断。
  • 增量写入:-Append参数确保每次分页结果直接写入文件,无需在内存中存储全量数据。

注意事项

  1. 替换脚本中的<largenumber>为实际的扩展属性ID前缀,可通过查询单个用户的ExtensionProperty确认具体名称。
  2. 确保导出路径所在磁盘有足够存储空间(数百万用户的CSV文件通常占几十到上百GB)。
  3. 建议在业务非高峰时段执行,避免对Azure AD服务造成额外负载。
  4. 若遇到API速率限制,可在循环中添加Start-Sleep -Seconds 1做短暂延迟,或调整-Top参数减小单次请求量。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 01:46:19