Functions/CatalogItems/Set-RsSubscription.ps1
# Copyright (c) 2016 Microsoft Corporation. All Rights Reserved. # Licensed under the MIT License (MIT) function Set-RsSubscription { <# .SYNOPSIS This script will update subscriptions piped from Get-RsSubscriptions .DESCRIPTION This script will take the custom object producted by get-RSSubscription and use the data to update the matchdata xml to either a new startdatetime, enddate, or owner. .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. .PARAMETER StartDateTime StartDateTime to change Start Date and Time of subscription. .PARAMETER EndDate Used to change the EndDate of subscription. .PARAMETER Owner Used to change the owner of a subscription. .PARAMETER SubProperties Subscription object returned from Get-RsSubscription .EXAMPLE Get-RsSubscription -path '/Finance/ImportantReports' | Set-RsSubscription -EndDate 9/9/2099 Description ----------- Update all subscriptions on localhost associated with '/finance/ImportantReports' to have an EndDate of 9/9/2099 .EXAMPLE Get-RsSubscription -path '/Finance/ImportantReports' | Set-RsSubscription -StartDateTime "1/9/2017 9am" Description ----------- Update all subscriptions on localhost associated with '/finance/ImportantReports' to have a startdate of 1/9/2017 and time of 9am .EXAMPLE Get-RsSubscription -path '/Finance/ImportantReports' | Set-RsSubscription -Owner "Warren" Description ----------- Update all subscriptions on localhost associated with '/finance/ImportantReports' to have an owner of "Warren". The user being updated needs to have the correct permissions in order to successfully update the owner. #> [CmdletBinding()] param ( [string] $ReportServerUri, [System.Management.Automation.PSCredential] $Credential, $Proxy, [parameter(Mandatory = $false)] [DateTime]$StartDateTime, [parameter(Mandatory = $false)] [DateTime]$EndDate, [parameter(Mandatory = $False)] [string]$Owner, [Parameter(Mandatory=$true,ValueFromPipeLine)] [PSCustomObject[]]$SubProperties ) Begin { $Proxy = New-RsWebServiceProxyHelper -BoundParameters $PSBoundParameters } Process { Write-Verbose "Updating Subscriptions..." try { [xml]$XMLMatch = $SubProperties.MatchData if ($owner){ $proxy.ChangeSubscriptionOwner($SubProperties.subscriptionID,$owner) } if ($StartDateTime) { $XMLMatch.ScheduleDefinition.StartDateTime.InnerText = $StartDateTime } if ($EndDate) { #check to see if end date exists as a node $EndExists = $XMLMatch.SelectNodes("//*") | Select-Object name | Where-Object name -eq "EndDate" #if no enddate create child node if ($EndExists -eq $null) { $child = $XMLMatch.CreateElement("EndDate") $child.InnerText = $EndDate $XMLMatch.ScheduleDefinition.AppendChild($child) } else { #if enddate node exists update $XMLMatch.ScheduleDefinition.EndDate.InnerText = $EndDate } } if ($StartDateTime -ne $null -or $EndDate -ne $null -or $SubProperties -ne $null) { $null = $Proxy.SetSubscriptionProperties($SubProperties.subscriptionID, $SubProperties.DeliverySettings, $SubProperties.Description, $SubProperties.EventType, $XMLMatch.OuterXml, $SubProperties.Values) Write-Verbose "Subscription $($SubProperties.subscriptionId) for $($SubProperties.report) report successfully updated!" } } Catch { throw (New-Object System.Exception("Exception while updating subscription(s)! $($_.Exception.Message)", $_.Exception)) } } } |