ps/Modules/Alkami.DevOps.SqlReports/Public/Publish-SSRSReport.ps1
2023-05-30 22:51:22 -07:00

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"
}