我有一个 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
-- }
-
我发现了问题。
我在案例陈述中添加了中断,并将更新移至每个案例之后。
一个问题是下面的行更新所有源,而不仅仅是您想要的源。
-数据源 $dataSources
应该是
-数据源 $dataSources