2012-02-07 116 views
8

我试图将Powershell的多个SSRS报表的数据源更改为我的报表服务器上的一个共享数据源。在这里我的代码:更改Powershell的SSRS报表数据源

cls; 
$reportserver = "myServer";<br/> 
$url = "http://$($reportserver)/reportserver/reportservice2005.asmx?WSDL";";<br/> 
$ssrs = New-WebServiceProxy -uri $url -UseDefaultCredential -Namespace "ReportingWebService"; 

[ReportingWebService.DataSource[]] $myDataSource = new-object ReportingWebService.DataSource 
$myDataSource[0].Name = "myDS"";<br/> 
$myDataSource[0].Item = New-Object ReportingWebService.DataSourceReference<br/> 
$myDataSource[0].Item.Reference = "/Data Sources/MyDS"<br/> 

$reports = $ssrs.ListChildren('/DH', $false) 

$reports | ForEach-Object {<br/> 
$reportPath = $_.path<br/> 
Write-Host "Report: " $reportPath<br/> 
$dataSources = $ssrs.GetItemDataSources($reportPath)<br/> 
$dataSources | ForEach-Object {<br/> 
       Write-Host "Old source: $($_.Name), $($_.Item.ConnectString)"<br/> 
       $ssrs.SetItemDataSources($reportPath, $myDataSource)<br/> 
       Write-Host "New source: $($_.Name), $($_.Item.ConnectString)"<br/> 
      }<br/> 

Write-Host "------------------------" 
} 

不过我打电话时,得到以下错误“SetItemDataSources” - 方法:

***Argument "1" having the value "ReportingWebService.DataSource[]" of "SetItemDataSources" can not be converted to type "ReportingWebService.DataSource[]".*** 

的问题是:怎么了?类型是相同的!

回答

12

谢谢e82.eric!

你让我转向工作解决方案。那就是:

cls; 

#Set variables: 
$reportserver = "myServer"; 
$newDataSourcePath = "/Data Sources/MyDS" 
$newDataSourceName = "MyDS"; 
$reportFolderPath = "/DH" 
#------------------------------------------------------------------------ 

$ssrs = New-WebServiceProxy -uri $url -UseDefaultCredential 

$reports = $ssrs.ListChildren($reportFolderPath, $false) 

$reports | ForEach-Object { 
      $reportPath = $_.path 
      Write-Host "Report: " $reportPath 
      $dataSources = $ssrs.GetItemDataSources($reportPath) 
      $dataSources | ForEach-Object { 
          $proxyNamespace = $_.GetType().Namespace 
          $myDataSource = New-Object ("$proxyNamespace.DataSource") 
          $myDataSource.Name = $newDataSourceName 
          $myDataSource.Item = New-Object ("$proxyNamespace.DataSourceReference") 
          $myDataSource.Item.Reference = $newDataSourcePath 

          $_.item = $myDataSource.Item 

          $ssrs.SetItemDataSources($reportPath, $_) 

          Write-Host "Report's DataSource Reference ($($_.Name)): $($_.Item.Reference)" 
          } 

      Write-Host "------------------------" 
      } 
+0

你能帮助我在此http://stackoverflow.com/questions/41824616/ssrs-setitemdatasource-giving-exception – Learner 2017-01-24 10:54:55

10

我遇到了同样的问题。

它不是一个很好的解决方案,但根据http://www.vistax64.com/powershell/273120-bug-when-using-namespace-parameter-new-webserviceproxy.html。 New-WebServiceProxy的命名空间参数有些破裂。该帖子建议使用自动生成的命名空间,最终为我工作,所以我认为你可以做到这一点。

$reportserver = "myServer" 
$url = "http://$($reportserver)/reportserver/reportservice2005.asmx?WSDL" 
$ssrs = New-WebServiceProxy -uri $url -UseDefaultCredential 

$proxyNamespace = $ssrs.GetType().Namespace 

$myDataSource = New-Object ("$proxyNamespace.DataSource") 
$myDataSource[0].Name = "myDS" 
$myDataSource[0].Item = New-Object ("$proxyNamespace.DataSourceReference") 
$myDataSource[0].Item.Reference = "/Data Sources/MyDS" 

$reports = $ssrs.ListChildren('/DH', $false) 

$reports | ForEach-Object { 
$reportPath = $.path 
Write-Host "Report: " $reportPath 
$dataSources = $ssrs.GetItemDataSources($reportPath) 
$dataSources | ForEach-Object { 
Write-Host "Old source: $($.Name), $($.Item.ConnectString)" 
$ssrs.SetItemDataSources($reportPath, @($myDataSource)) 
Write-Host "New source: $($.Name), $($_.Item.ConnectString)" 
} 

Write-Host "------------------------" } 
+0

不错的主意!现在错误是不同的:“无法找到数据源'myDS'”。这很奇怪 - 我知道这个数据源确实存在! :( – eghetto 2012-02-16 09:32:40

+0

谢谢e82.eric 下面贴工作液: – eghetto 2012-02-16 10:29:38

+0

,我得到错误:属性“名称”不能在该物体上找到;请确保它存在并且可设置 $ myDataSource是Microsoft.PowerShell.Commands!。 NewWebserviceProxy.AutogeneratedTypes.WebServiceProxy1NG_ReportService2005_asmx_WSDL.DataSource 我觉得是$ myDataSource.Name。 – Kiquenet 2012-07-23 06:51:05

4
+1

任何版本无法使用Sharepoint,只有SSRS?对于我在“get-spweb”中失败 – Kiquenet 2012-07-20 08:58:21

+0

IvanJ感谢这些脚本。它保存了我的培根并制定了g不动产资产信托。 @Kiquenet确保您从SharePoint Management Shell运行此脚本,或者安装SharePoint PowerShell管理单元。 – HAL9256 2014-10-24 19:36:32

+0

获得SP2013以下错误“调用带有”1“参数的异常调用”GetItemDataSources“:”授予用户'NT AUTHORITY \ ANONYMOUS LOGON'的权限不足以执行此操作。 --->” – 2015-08-07 18:42:01

相关问题