2016-06-28 9 views
1

私はいくつかの異なるサーバーにコピーされたレポートを持っています。これは手動でインポートされ、データソースのプロパティは現在のサーバーの仕様と一致するように変更されます。 SSRSレポートを開き、PowerShellを使用してSSRSレポートの共有データソースプロパティを動的に変更できるようにして、プロセスを自動化したいと考えています。あなたが手伝ってくれることを願っています下の参照が表示される場合があります。Powershellを使用してSSRSプロジェクトを開く

The Report is located on this location:

enter image description here

スクリプトは、サーバー名、ユーザー名とパスワードの入力パラメータを受け入れるだろう。また、私のパスワードを保存する必要があります。

答えて

0

私はこのためのスクリプトを作成することができないと信じられませんでした。将来の参考資料として、以下のスクリプトを使用することができます。コメントは各パーツで利用でき、変更が必要なものは「ここ」のキーワードがあります。 Your_database_name_here。

Import-Module SqlPs 

#Input parameter to get Server\Instancename of your Datasource 
$Servername = Read-Host "Please enter your Servername" 
$Instancename = Read-Host "Please enter your Instancename. For default instance please press enter" 
Write-host "" 

if ($Instancename -eq ""){ 
    $ServerInstance = $Servername 
    } 
Else { 
    $ServerInstance = $Servername +"\"+ $InstanceName 
} 

#Setting up SSRS Target URL. This is the location where your reports would be deployed. 
if ($Instancename -eq ""){ 
    $ReportServerUri = "http://$Servername/ReportServer//ReportService2010.asmx?wsdl" 
    $TargetURL = "http://$Servername/Reports" 
    } 
Else { 
    $ReportServerUri = "http://$Servername/ReportServer_$Instancename//ReportService2010.asmx?wsdl" 
    $TargetURL = "http://$Servername/Reports_$Instancename" 
} 

$global:proxy = New-WebServiceProxy -Uri $ReportServerUri -UseDefaultCreden 



#We would make use of SQL Server Authentication for the reports shared datasource so you need to supply a username and password. 
Write-Host "  SQL Server Authentication:" 
$Username = Read-Host "  Username" 
$Password = Read-Host -AsSecureString "Password" 


$type = $Proxy.GetType().Namespace 
$datatype = ($type + '.Property') 

$property =New-Object ($datatype); 
$property.Name = “NewFolder” 
$property.Value = “NewFolder” 

$numproperties = 1 
$properties = New-Object ($datatype + '[]')$numproperties 
$properties[0] = $property; 

$newFolder = $proxy.CreateFolder("Reports”, “/”, $properties); 
$newFolder = $proxy.CreateFolder("Data Sources”, “/”, $properties); 

$Children =$proxy.ListChildren("/",$false) 
$DBname = 'Your_Database_Name_Here' 


# Creating Datasource through powershell 
Write-Host "  Creating Datasource ..." 
$Name = "Name_Your_Datasource_here" 
$Parent = "/Data Sources" 
$ConnectString = "data source=$Servername\$Instancename;initial catalog=$DBname" 
$type = $Proxy.GetType().Namespace 
$DSDdatatype = ($type + '.DataSourceDefinition') 
$DSD = new-object ($DSDdatatype) 
if($DSD -eq $null){ 
     Write-Error Failed to create data source definition object 
} 
$CredentialDataType = ($type + '.CredentialRetrievalEnum') 
$Cred = new-object ($CredentialDataType) 
$CredEnum = ($CredentialDataType).Integrated 
$Cred.value__=1 

$DSD.CredentialRetrieval =$Cred 
$DSD.ConnectString = $ConnectString 
$DSD.Enabled = $true 
$DSD.EnabledSpecified = $false 
$DSD.Extension = "SQL" 
$DSD.ImpersonateUserSpecified = $false 
$DSD.Prompt = $null 
$DSD.WindowsCredentials = $false 
$DSD.UserName = $Username 
$DSD.Password = [Runtime.InteropServices.Marshal]::PtrToStringAuto([Runtime.InteropServices.Marshal]::SecureStringToBSTR($Password)) 

$newDSD = $proxy.CreateDataSource($Name,$Parent,$true,$DSD,$null) 

#Deploying RLD files to Target URL 
Write-Host "  Deploying RDL files ..." 
$stream = Get-Content 'D:\Your_RDL_path_here.rdl' -Encoding byte 
$warnings [email protected](); 
$proxy.CreateCatalogItem("Report","Report_Name_here","/Reports",$true,$stream,$null,[ref]$warnings) 


#Let's make use of the datasource we just created for your RDL files. 
$Items = $global:proxy.listchildren("/Data Sources", $true) 
foreach ($item in $items) 
{ 

$DatasourceName = $item.Name 
$DatasourcePath = $item.Path 
} 


$RDLS = $global:proxy.listchildren("/Reports", $true) 
foreach ($rdl in $rdls) 
{ 
$report = $rdl.path 


$rep = $global:proxy.GetItemDataSources($report) 
$rep | ForEach-Object { 
$proxyNamespace = $_.GetType().Namespace 
    $constDatasource = New-Object ("$proxyNamespace.DataSource") 
    $constDatasource.Name = $DataSourceName 
    $constDatasource.Item = New-Object ("$proxyNamespace.DataSourceReference") 
    $constDatasource.Item.Reference = $DataSourcePath 

$_.item = $constDatasource.Item 
$global:proxy.SetItemDataSources($report, $_) 
Write-Host "Changing datasource `"$($_.Name)`" to $($_.Item.Reference)" 
} 
} 

#Open a IE browser to view the report. 
$IE=new-object -com internetexplorer.application 
$IE.navigate2($TargetURL) 
$IE.visible=$true 
Write-Host ""  
Write-Host "You may now view the Reports through the open IE browser." 
Write-Host -ForegroundColor Green "**STEP COMPLETED!" 
関連する問題