在我们的SSRS
解决方案中,对于dev/prod/local有不同的共享数据源连接。当我们将报表部署到报表服务器时,需要将数据源替换为适当的数据源。例如,在开发报表时,我使用的是ds_local
共享连接,但在将其部署到dev服务器之前,需要将其更改为dev。没有什么复杂的事情,但是开发人员通常忘记更新这个连接并使用错误的数据源提交报告。我编写了powershell脚本,它将自动将数据源替换为我们需要的数据源。为此,我需要编写大量代码,更新ReportServer数据库表等。然后,我发现了一个非常好的powershell模块,它可以完成我所做的所有事情,但要简单得多:RportingServicesTools。
它似乎工作得很好,但我无法理解如何实现以下场景:
我发现了以下函数:Get-RsDataSource
和Set-RsItemDataSource
,但正如我现在所理解的,第一个函数只是数据源的信息,第二个函数需要数据源对象。是否有任何方法将共享数据源检索为数据源对象,或者我能做的唯一方法是手动创建新数据源?
发布于 2018-08-14 08:46:33
我想做些类似的事情。最后,我直接更新了rdl文件的XML。在您的示例中,我可能会下载RDL文件,更新XML并将其推回。我的情况有点不同,但下面是我最后使用的代码,用于获取从供应商那里获得的大量报告,更新数据源并将其上传到SSRS。
#Install-Module -name ReportingServicesTools
$reportPath = "C:\Path\to\rdls"
$dataSourceReference = "theNameoftheSharedDataSourceOnSSRS"
$rsFolder = "/Path/to/destination/folder/on/SSRS"
$rsURI = "https://SSRSsite/reportserver"
get-childitem -Path $reportPath -Filter *.rdl -Recurse | % {
$curItem = $_.FullName
$xml = [xml](get-content $curItem)
$xml.Report.DataSources.DataSource.DataSourceReference = $dataSourceReference
$xml.Save($curItem)
Write-RsFolderContent -Path $_.DirectoryName -RsFolder $rsFolder -ReportServerUri $rsURI -ErrorAction SilentlyContinue
Write-Output $_.FullName
}
还有Get-RSItemDataSource。它可能能做你想要做的事情。
https://stackoverflow.com/questions/49272832
复制