Since Powershell v2.0 introduce the new cmdlet New-WebServiceProxy, it’s no longer needed to generate a class library to deploy/undeploy SSRS file (RDL), below are two powershell scripts Install-SSRSRDL and Uninstall-SSRSRDL that can be useful when doing an automated deployment or silent installation of rdl files to Reporting Services.
Install SSRS RDL Script:
<# .SYNOPSIS Installs an RDL file to SQL Reporting Server using Web Service .DESCRIPTION Installs an RDL file to SQL Reporting Server using Web Service .NOTES File Name: Install-SSRSRDL.ps1 Author: Randy Aldrich Paulo Prerequisite: SSRS 2008, Powershell 2.0 .PARAMETER reportName Name of report wherein the rdl file will be save as in Report Server. If this is not specified it will get the name from the file (rdl) exluding the file extension. .PARAMETER force If force is specified it will create the report folder if not existing and overwrites the report if existing. .EXAMPLE Install-SSRSRDL -webServiceUrl "http://[ServerName]/ReportServer/ReportService2005.asmx" -rdlFile "C:\Report.rdl" -force .EXAMPLE Install-SSRSRDL "http://[ServerName]/ReportServer/ReportService2005.asmx" "C:\Report.rdl" -force .EXAMPLE Install-SSRSRDL "http://[ServerName]/ReportServer/ReportService2005.asmx" "C:\Report.rdl" -force -reportName "MyReport" .EXAMPLE Install-SSRSRDL "http://[ServerName]/ReportServer/ReportService2005.asmx" "C:\Report.rdl" -force -reportFolder "Reports" -reportName "MyReport" #> function Install-SSRSRDL ( [Parameter(Position=0,Mandatory=$true)] [Alias("url")] [string]$webServiceUrl, [ValidateScript({Test-Path $_})] [Parameter(Position=1,Mandatory=$true)] [Alias("rdl")] [string]$rdlFile, [Parameter(Position=2)] [Alias("folder")] [string]$reportFolder="", [Parameter(Position=3)] [Alias("name")] [string]$reportName="", [switch]$force ) { $ErrorActionPreference="Stop" #Create Proxy Write-Host "[Install-SSRSRDL()] Creating Proxy, connecting to : $webServiceUrl" $ssrsProxy = New-WebServiceProxy -Uri $webServiceUrl -UseDefaultCredential $reportPath = "/" if($force) { #Check if folder is existing, create if not found try { $ssrsProxy.CreateFolder($reportFolder, $reportPath, $null) Write-Host "[Install-SSRSRDL()] Created new folder: $reportFolder" } catch [System.Web.Services.Protocols.SoapException] { if ($_.Exception.Detail.InnerText -match "[^rsItemAlreadyExists400]") { Write-Host "[Install-SSRSRDL()] Folder: $reportFolder already exists." } else { $msg = "[Install-SSRSRDL()] Error creating folder: $reportFolder. Msg: '{0}'" -f $_.Exception.Detail.InnerText Write-Error $msg } } } #Set reportname if blank, default will be the filename without extension if($reportName -eq "") { $reportName = [System.IO.Path]::GetFileNameWithoutExtension($rdlFile);} Write-Host "[Install-SSRSRDL()] Report name set to: $reportName" try { #Get Report content in bytes Write-Host "[Install-SSRSRDL()] Getting file content (byte) of : $rdlFile" $byteArray = gc $rdlFile -encoding byte $msg = "[Install-SSRSRDL()] Total length: {0}" -f $byteArray.Length Write-Host $msg $reportFolder = $reportPath + $reportFolder Write-Host "[Install-SSRSRDL()] Uploading to: $reportFolder" #Call Proxy to upload report $warnings = $ssrsProxy.CreateReport($reportName,$reportFolder,$force,$byteArray,$null) if($warnings.Length -eq $null) { Write-Host "[Install-SSRSRDL()] Upload Success." } else { $warnings | % { Write-Warning "[Install-SSRSRDL()] Warning: $_" }} } catch [System.IO.IOException] { $msg = "[Install-SSRSRDL()] Error while reading rdl file : '{0}', Message: '{1}'" -f $rdlFile, $_.Exception.Message Write-Error msg } catch [System.Web.Services.Protocols.SoapException] { $msg = "[Install-SSRSRDL()] Error while uploading rdl file : '{0}', Message: '{1}'" -f $rdlFile, $_.Exception.Detail.InnerText Write-Error $msg } }
Uninstall SSRS RDL Script:
<# .SYNOPSIS Uninstalls an RDL file from SQL Reporting Server using Web Service .DESCRIPTION Uninstalls an RDL file from SQL Reporting Server using Web Service .NOTES File Name: Uninstall-SSRSRDL.ps1 Author: Randy Aldrich Paulo Prerequisite: SSRS 2008, Powershell 2.0 .EXAMPLE Uninstall-SSRSRDL -webServiceUrl "http://[ServerName]/ReportServer/ReportService2005.asmx" -path "MyReport" .EXAMPLE Uninstall-SSRSRDL -webServiceUrl "http://[ServerName]/ReportServer/ReportService2005.asmx" -path "Reports/Report1" #> function Uninstall-SSRSRDL ( [Parameter(Position=0,Mandatory=$true)] [Alias("url")] [string]$webServiceUrl, [Parameter(Position=1,Mandatory=$true)] [Alias("path")] [string]$reportPath ) { #Create Proxy Write-Host "[Uninstall-SSRSRDL()] Creating Proxy, connecting to : $webServiceUrl" $ssrsProxy = New-WebServiceProxy -Uri $webServiceUrl -UseDefaultCredential #Set Report Folder if(!$reportPath.StartsWith("/")) { $reportPath = "/" + $reportPath } try { Write-Host "[Uninstall-SSRSRDL()] Deleting: $reportPath" #Call Proxy to upload report $ssrsProxy.DeleteItem($reportPath) Write-Host "[Uninstall-SSRSRDL()] Delete Success." } catch [System.Web.Services.Protocols.SoapException] { $msg = "[Uninstall-SSRSRDL()] Error while deleting report : '{0}', Message: '{1}'" -f $reportPath, $_.Exception.Detail.InnerText Write-Error $msg } }
Install-SSRSRDL Powershell Script
Uninstall-SSRSRDL Powershell Script
For permission check this blog: https://randypaulo.wordpress.com/2012/02/22/powershell-set-user-permission-in-ssrs-item-sql-reporting-server-using-powershell/