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

