function Publish-SSRSReport { <# .SYNOPSIS Publish SSRS report to SSRS server .PARAMETER WebServiceUrl Url of SSRS webservice .PARAMETER RdlPath Path to report file .PARAMETER ReportFolder Folder on SSRS server to publish report to .PARAMETER AvoidDoubleHop Parameter to pass to Set-ReportDataSource to avoid DoubleHob issue .PARAMETER ReportServerUserName Username for SSRS server .PARAMETER ReportServerPassword Password for SSRS server #> [CmdletBinding()] Param( [Parameter(Position=0, Mandatory=$true)] [Alias("url")] [string]$WebServiceUrl, [ValidateScript({Test-Path $_})] [Parameter(Position=1, Mandatory=$true)] [Alias("rdl")] [string]$RdlPath, [Parameter(Position=2, Mandatory=$true)] [Alias("folder")] [string]$ReportFolder, [Parameter(Position=3, Mandatory=$true)] [Alias("ApplyDoubleHopFix")] [bool]$AvoidDoubleHop, [Parameter(Position=4, Mandatory=$false)] [Alias("Username")] [string]$ReportServerUserName, [Parameter(Position=5, Mandatory=$false)] [Alias("Password")] [string]$ReportServerPassword ) $logLead = Get-LogLeadName # Create Proxy Write-Verbose "$logLead : Calling New-SSRSProxy" $proxy = New-SSRSProxy $WebServiceUrl New-ExecutionProxy -WebServiceUrl $WebServiceUrl | Out-Null # Set reportname if blank, default will be the filename without extension $reportName = [System.IO.Path]::GetFileNameWithoutExtension($RdlPath) Write-Verbose ("$logLead : Report name set to: {0}" -f $reportName) #Get Report content in bytes Write-Host ("$logLead : Publishing report file {0}" -f $reportName) Write-Verbose "$logLead : Getting file content (byte[]) of : $RdlPath" $byteArray = Get-Content $RdlPath -encoding byte Write-Verbose ("$logLead : Total length: {0}" -f $byteArray.Length) if (!($ReportFolder.StartsWith("/"))) { Write-Verbose ("$logLead : Transform {0} => /{0}" -f $ReportFolder) $ReportFolder = "/" + $ReportFolder } Write-Verbose ("$logLead : Uploading to: {0}" -f $ReportFolder) #Call Proxy to upload report Write-Host "$logLead : --- Uploading RDL" [Ref]$UploadWarnings = $null $proxy.CreateCatalogItem("Report", $reportName, $ReportFolder, $true, $byteArray, $null, $UploadWarnings) | Out-Null Write-Verbose "$logLead : Calling Get-PublishedSSRSReports" $allItems = Get-PublishedSSRSReports $proxy $ReportFolder $publishedReport = $allItems | Where-Object {($_.Name -eq $reportName)} | Sort-Object ModifiedDate -Descending | Select-Object -first 1 if ($null -ne $publishedReport) { Write-Host "$logLead : --- Setting DataSources" Write-Verbose "$logLead : Calling Set-ReportDataSource" Write-Verbose ("Username: $ReportServerUserName") Set-ReportDataSource $proxy $publishedReport.Path $RdlPath $AvoidDoubleHop -Username $ReportServerUserName -Password $ReportServerPassword Write-Host "$logLead : --- Setting Parameters" Write-Verbose "$logLead : Calling Set-ReportParameters" Set-ReportParameters $proxy $executionProxy $publishedReport.Path $RdlPath } else { Write-Warning ("$logLead : Could not locate published report {0}. Verify the upload and datasources manually." -f $reportName) } Write-Host "$logLead : --- Done" }