2012-02-07 11 views
8

के साथ एसएसआरएस रिपोर्ट का डेटासोर्स बदलें मैं अपने रिपोर्टिंग सर्वर पर एक साझा डेटा स्रोत पर पावरहेल के साथ एकाधिक एसएसआरएस रिपोर्ट के डेटा स्रोतों को डेटा देने का प्रयास कर रहा हूं। यहाँ मेरी कोड:पावरहेल

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" -method:

***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-upgrade – Learner

10

मुझे एक ही समस्या थी।

यह कोई अच्छा समाधान नहीं है लेकिन http://www.vistax64.com/powershell/273120-bug-when-using-namespace-parameter-new-webserviceproxy.html के अनुसार। न्यू-वेब सेवाप्रोक्सी का नामस्थान पैरामीटर कुछ हद तक टूटा हुआ है। पोस्ट ऑटो जेनरेटेड नेमस्पेस का उपयोग करने का सुझाव देता है जो मेरे लिए काम करना समाप्त कर देता है, इसलिए मुझे लगता है कि आप ऐसा कर सकते हैं।

$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

+0

धन्यवाद e82.eric नीचे काम कर समाधान तैनात: – eghetto

+0

मैं त्रुटि मिलती है: संपत्ति 'नाम' इस वस्तु पर पाया नहीं जा सकता है, तो सुनिश्चित करें कि यह मौजूद है और settable है $ myDataSource Microsoft.PowerShell.Commands है!।। NewWebserviceProxy.AutogeneratedTypes.WebServiceProxy1NG_ReportService2005_asmx_WSDL.DataSource मुझे लगता है कि $ myDataSource.Name है। – Kiquenet

4

मैं दो अच्छा लिपियों में यह जानकारी पैक है:

http://gallery.technet.microsoft.com/scriptcenter/Get-SSRS-Data-Source-19360302

http://gallery.technet.microsoft.com/scriptcenter/Set-SSRS-Data-Source-3b074747

का आनंद लें!

+1

बिना किसी संस्करण के शेयरपॉइंट, केवल एसएसआरएस? मेरे लिए "get-spweb" में विफल रहता है। – Kiquenet

+0

स्क्रिप्ट के लिए इवानजे धन्यवाद। यह मेरे बेकन को बचाया और जी reat। @Kiquenet सुनिश्चित करें कि आप इसे SharePoint प्रबंधन शैल से चला रहे हैं, या SharePoint PowerShell स्नैपिन स्थापित है। – HAL9256

+0

SP2013 "अपवाद कॉलिंग" GetItemDataSources "के साथ" 1 "तर्क के साथ त्रुटि प्राप्त करना:" उपयोगकर्ता को दी गई अनुमतियां 'एनटी प्राधिकरण \ ANONYMOUS LOGON' इस ऑपरेशन को करने के लिए अपर्याप्त हैं। ---> " –