100 lines
3.4 KiB
PowerShell
100 lines
3.4 KiB
PowerShell
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"
|
|
} |