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

PowerShell调用Power BI Rest API获取数据源用户并保留ID导出CSV

解决方案

修改思路

  • 原代码仅存储了API返回的用户权限数据,没有将对应数据源ID(即导入CSV中的$Line.id)绑定到每条用户记录上,导致最终导出结果缺失ID字段
  • 调整逻辑为:每次调用接口拿到单个数据源的用户列表后,给每一条用户记录手动新增ID字段,赋值为当前循环对应的数据源ID,再存入结果集合
  • 导出前指定需要的字段顺序,过滤多余字段,保证输出CSV符合要求

完整修改后代码

$webclient=New-Object System.Net.WebClient
$webclient.Proxy.Credentials = [System.Net.CredentialCache]::DefaultNetworkCredentials

$Dir = "C:\pbi_pro_user_logs\"

Login-PowerBI

$GateWayFile = Import-CSV -Path "C:\pbi_pro_user_logs\Gateway_Detail.csv"
$Output = @()
foreach ($Line in $GateWayFile){
    $currentDatasourceId = $Line.id
    $url =  "https://api.powerbi.com/v1.0/myorg/gateways/HIDDEN/datasources/$currentDatasourceId/users"
    $response = Invoke-PowerBIRestMethod -Url $url -Method Get | ConvertFrom-Json
    # 为当前数据源下的所有用户记录附加数据源ID
    foreach ($user in $response.value) {
        $user | Add-Member -MemberType NoteProperty -Name 'ID' -Value $currentDatasourceId -Force
        $Output += $user
    }
}

# 按要求选择字段后导出CSV,指定UTF8编码避免乱码
$Output | Select-Object ID,emailAddress,datasourceAccessRight,displayName,identifier,principalType | Export-Csv (Join-Path $Dir "GateWay_users.csv") -NoTypeInformation -Encoding UTF8

关键修改说明

  • 调用接口后新增内层循环,遍历当前数据源下的所有用户权限记录,通过Add-Member给每条记录追加ID字段
  • 导出前通过Select-Object明确指定输出字段,保证输出结果结构完全符合需求
  • 用Join-Path拼接路径避免字符串拼接导致的路径错误,新增-Encoding UTF8参数避免特殊字符乱码

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 18:48:03