function Set-ReportParameters { <# .SYNOPSIS Set SSRS report parameters from local RDL file on remote SSRS report #> [CmdletBinding()] Param( [Parameter(Position = 0, Mandatory = $true)] [System.Web.Services.Protocols.SoapHttpClientProtocol]$Proxy, [CmdletBinding()] [Parameter(Position = 1, Mandatory = $true)] [System.Web.Services.Protocols.SoapHttpClientProtocol]$SSRSExecutionProxy, [Parameter(Position = 2, Mandatory = $true)] [string]$ReportPath, [Parameter(Position = 3, Mandatory = $true)] [string]$RdlPath ) $logLead = Get-LogLeadName Write-Verbose ("$logLead : Getting RDL Content from {0}" -f $RdlPath) [xml]$reportContent = Get-Content $RdlPath $reportParameters = @() $namespace = $Proxy.GetType().Namespace Write-Verbose "$logLead : Calling Remove-DataSources" $reportData = Remove-Datasources $reportContent Write-Verbose "$logLead : Loading Report Execution Definition" $warnings = $null try { $reportInfo = $SSRSExecutionProxy.LoadReportDefinition($reportData, [ref]$warnings) } catch { Write-Warning "$logLead : --- An error occurred reading the report parameters. Let the reports developer know and manually validate the report parameters." return } Write-Verbose "$logLead : Cloning Report Parameters" foreach ($parameter in $reportInfo.Parameters) { $itemParameter = New-Object $Proxy.GetType().Assembly.GetType("$namespace.ItemParameter") $itemParameter = Copy-ObjectProperties $parameter $itemParameter @("ValidValues") foreach ($value in $parameter.ValidValues) { $validValue = New-Object $Proxy.GetType().Assembly.GetType("$namespace.ValidValue") Copy-ObjectProperties $value $validValue $itemParameter.ValidValues += $validValue } $reportParameters += $itemParameter } Write-Verbose "$logLead : Using Proxy to Set Report Parameters" $Proxy.SetItemParameters($ReportPath, $reportParameters) }