Functions/CatalogItems/Import-RsSubscriptionXml.ps1
# Copyright (c) 2016 Microsoft Corporation. All Rights Reserved. # Licensed under the MIT License (MIT) function Import-RsSubscriptionXml { <# .SYNOPSIS This script imports a subscription that has been exported e.g via Get-RsSubscription | Export-RsSubscriptionXml .\somepath.xml .DESCRIPTION This script imports a subscription and rebuilds the SRSS specific properties so that the resultant object will be accepted by Set-RsSubscription. This is useful if you need to store your subscription configs in a file (e.g to add to source control) and then later want to use that file to recreate your subscriptions. .PARAMETER Path The path to the XML file that contains the exported subscription. This is typically a file created by executing Get-RsSubscription | Export-RsSubscriptionXml .\somepath.xml .PARAMETER ReportServerUri Specify the Report Server URL to your SQL Server Reporting Services Instance. Use the "Connect-RsReportServer" function to set/update a default value. .PARAMETER Credential Specify the credentials to use when connecting to the Report Server. Use the "Connect-RsReportServer" function to set/update a default value. .PARAMETER Proxy Report server proxy to use. Use "New-RsWebServiceProxy" to generate a proxy object for reuse. Useful when repeatedly having to connect to multiple different Report Server. .EXAMPLE Import-RsSubscriptionXml .\MySubscriptions.xml Description ----------- This command will import the subscriptions contained in .\MySubscriptions.xml, recreate any SRSS specific properties and output a PowerShell object with the result. .EXAMPLE Import-RsSubscriptionXml .\MySubscriptions.xml | Set-RsSubscription -Path /Example/Report Description ----------- This command will import the subscriptions contained in .\MySubscriptions.xml, recreate any SRSS specific properties and pipe the results to Set-RsSubscription which will add them to the /Example/Report report. #> [cmdletbinding()] param( [Parameter(Mandatory=$True,Position=0)] [string] $Path, [string] $ReportServerUri, [System.Management.Automation.PSCredential] $Credential, $Proxy ) Begin { $Proxy = New-RsWebServiceProxyHelper -BoundParameters $PSBoundParameters $Namespace = $Proxy.GetType().NameSpace } Process { Write-Verbose "Importing Subscription from $Path..." $Subscription = Import-Clixml $Path foreach ($Sub in $Subscription) { #Recreate .DeliverySettings properties as valid SRSS object type $ParameterValues = @() $Sub.DeliverySettings.ParameterValues | ForEach-Object { if ($_.Name) { $ParameterValues = $ParameterValues + (New-Object "$Namespace.ParameterValue" -Property @{ Name = $_.Name; Value = $_.Value }) } elseif ($_.ParameterName) { $ParameterValues = $ParameterValues + (New-Object "$Namespace.ParameterFieldReference" -Property @{ ParameterName = $_.ParameterName; FieldAlias = $_.FieldAlias }) } } $DeliverySettings = @{ Extension = $Sub.DeliverySettings.Extension ParameterValues = $ParameterValues } $Sub.DeliverySettings = (New-Object "$Namespace.ExtensionSettings" -Property $DeliverySettings) #Recreate .Values property as valid SRSS object type $Values = @() $Sub.Values | ForEach-Object { if ($_.Name) { $Values = $Values + (New-Object "$Namespace.ParameterValue" -Property @{ Name = $_.Name; Value = $_.Value }) } elseif ($_.ParameterName) { $Values = $Values + (New-Object "$Namespace.ParameterFieldReference" -Property @{ ParameterName = $_.ParameterName; FieldAlias = $_.FieldAlias }) } } $Sub.Values = $Values #Recreate .DataRetrievalPlan property as valid SRSS object type for Data Driven subscriptions if ($Sub.IsDataDriven) { $DataSetDefinitionFields = @() $Sub.DataRetrievalPlan.DataSet.Fields | ForEach-Object { $DataSetDefinitionFields = $DataSetDefinitionFields + (New-Object "$Namespace.Field" -Property @{ Alias = $_.Alias; Name = $_.Name }) } $DataSetDefinition = New-Object "$Namespace.DataSetDefinition" $DataSetDefinition.Fields = $DataSetDefinitionFields $DataSetDefinition.Query = New-Object "$Namespace.QueryDefinition" $DataSetDefinition.Query.CommandType = $sub.DataRetrievalPlan.DataSet.Query.CommandType $DataSetDefinition.Query.CommandText = $sub.DataRetrievalPlan.DataSet.Query.CommandText $DataSetDefinition.Query.Timeout = $sub.DataRetrievalPlan.DataSet.Query.Timeout $DataSetDefinition.Query.TimeoutSpecified = $sub.DataRetrievalPlan.DataSet.Query.TimeoutSpecified $DataSetDefinition.CaseSensitivity = $sub.DataRetrievalPlan.DataSet.CaseSensitivity $DataSetDefinition.CaseSensitivitySpecified = $sub.DataRetrievalPlan.DataSet.CaseSensitivitySpecified $DataSetDefinition.Collation = $sub.DataRetrievalPlan.DataSet.Collation $DataSetDefinition.AccentSensitivity = $sub.DataRetrievalPlan.DataSet.AccentSensitivity $DataSetDefinition.AccentSensitivitySpecified = $sub.DataRetrievalPlan.DataSet.AccentSensitivitySpecified $DataSetDefinition.KanatypeSensitivity = $sub.DataRetrievalPlan.DataSet.KanatypeSensitivity $DataSetDefinition.KanatypeSensitivitySpecified = $sub.DataRetrievalPlan.DataSet.KanatypeSensitivitySpecified $DataSetDefinition.WidthSensitivity = $sub.DataRetrievalPlan.DataSet.WidthSensitivity $DataSetDefinition.WidthSensitivitySpecified = $sub.DataRetrievalPlan.DataSet.WidthSensitivitySpecified $DataSetDefinition.Name = $sub.DataRetrievalPlan.DataSet.Name $DataRetrievalPlanItem = New-Object "$Namespace.DataSourceReference" $DataRetrievalPlanItem.Reference = $sub.DataRetrievalPlan.Item.Reference $DataRetrievalSettings = @{ Item = $DataRetrievalPlanItem DataSet = $DataSetDefinition } $DataRetrievalPlan = New-Object "$Namespace.DataRetrievalPlan" -Property $DataRetrievalSettings $Sub.DataRetrievalPlan = $DataRetrievalPlan } #Output subscription $Sub } } } |