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

执行PowerShell更新指定数据源凭据后,所有Windows密码失效

问题分析

你的脚本出现问题的核心原因是:Get-RsRestItemDataSource从服务器获取数据源对象时,出于安全考虑不会返回Secret(密码)字段,该字段值为$null。当你将未修改的数据源对象(包含$null的Secret)通过Set-RsRestItemDataSource提交回服务器时,服务器会将对应数据源的密码设置为空,从而覆盖原有有效密码,导致使用Windows认证的非目标数据源(如datasource3)运行失败。

修复后的脚本
# Variables
$ReportPortalUri = 'http://blah.co.nz/reports';
$reportFolder = "ReptFolder";

# Create new web session to your Power BI Report portal
$session = New-RsRestSession -ReportPortalUri $ReportPortalUri;

# Get list of all reports
$reports = Get-RsCatalogItems -ReportServerUri $ReportPortalUri -RsFolder "/$($reportFolder)" -Recurse | Where {$_.TypeName -eq 'PowerBIReport'};

# Loop through selected reports
ForEach ($report in $reports)
{
    Write-Host "Processing report: $($report.Path)"
    try
    {
        # Get data source object
        $dataSources = Get-RsRestItemDataSource -WebSession $session -RsItem $report.Path

        # Update data source object
        foreach ($dataSource in $dataSources)
        {
            switch -Regex ($dataSource.ConnectionString) {
                'datasource1' {
                    $dataSource.DataModelDataSource.AuthType = 'Windows'
                    $dataSource.CredentialRetrieval = 'Store'
                    $dataSource.DataModelDataSource.Username = 'win_srv_account1'
                    $dataSource.DataModelDataSource.Secret = '1234'
                }
                'datasource2' {
                    $dataSource.DataModelDataSource.AuthType = 'UsernamePassword'
                    $dataSource.CredentialRetrieval = 'Store'
                    $dataSource.DataModelDataSource.Username = 'sql_srv_account2'
                    $dataSource.DataModelDataSource.Secret = '1234'
                }
                default {
                    Write-Host "No matching condition for connection string $($dataSource.ConnectionString). Skipping modification."
                    # 移除Secret属性,避免提交空值覆盖原有密码
                    if ($dataSource.DataModelDataSource.PSObject.Properties['Secret']) {
                        $dataSource.DataModelDataSource.PSObject.Properties.Remove('Secret')
                    }
                }
            }
        }     

        # Update data source object on server
        Set-RsRestItemDataSource -WebSession $session -RsItem $report.Path -RsItemType 'PowerBIReport' -DataSources $dataSources
    }
    catch 
    {
        Write-Error "Error processing report $($report.Path): $_"
    }
}
关键修复点
  • 在default分支中移除了数据源对象的Secret属性:提交到服务器时该字段不会被包含,服务器会保留原有密码,而非用空值覆盖
  • 优化了日志输出,便于跟踪每个报表和数据源的处理状态

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 20:56:07