运行 PowerShell 脚本来更新特定数据源的凭据后,保存的任何 Windows 密码均被破坏

问题描述 投票:0回答:1

我有一个 powershell 脚本,它循环遍历所有报告并更新 Windows 凭据以使用服务帐户,但仅适用于特定数据源。

运行脚本后,任何具有 Windows 身份验证帐户的报告都已更改密码(但不是用户名),即使对于不应触及的数据源也是如此。

当我打开使用未列出的数据源(即 datasource3)的报告时,Windows 用户名将与以前相同,但密码将被更改,这会导致报告失败。

我不想接触任何非 datasource1 或 datasource2 的凭据

我厌倦了使用 IF 语句、SWITCH 语句,甚至添加要排除的 Windows 用户名,虽然脚本告诉我报告已被排除,但它仍然会破坏密码。

        --#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)
        --{
        --  $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."
        --                  continue
        --              }
        --          }
        --      }     

        --      #Update data source object on server
        --      Set-RsRestItemDataSource -WebSession $session -RsItem $report.Path -RsItemType 'PowerBIReport' -DataSources $dataSources
        --  }
        --  catch 
        --  {
        --      $Error[0].Exception
        --  }
        -
powershell reporting-services
1个回答
0
投票

我发现了问题。

我在案例陈述中添加了中断,并将更新移至每个案例之后。

一个问题是下面的行更新所有源,而不仅仅是您想要的源。

-数据源 $dataSources

应该是

-数据源 $dataSources

© www.soinside.com 2019 - 2024. All rights reserved.