functions/reports/Set-TssReportSchedule.ps1
|
function Set-TssReportSchedule { <# .SYNOPSIS Set the properties of a report schedule .DESCRIPTION Set the format, report parameter values or schedule of a report schedule. Only the parameters provided are changed. .PARAMETER TssSession TssSession object created by New-TssSession for authentication .PARAMETER Id Report schedule ID .PARAMETER Format Format of the stored and emailed report: Html or Csv .PARAMETER UserParameterValue User ID for the report's user parameter .PARAMETER GroupParameterValue Group ID for the report's group parameter .PARAMETER FolderParameterValue Folder ID for the report's folder parameter .PARAMETER FolderPathParameterValue Folder path for the report's folder path parameter .PARAMETER CustomParameterValue Value for the report's custom text parameter .PARAMETER StartDateParameterValue Start date option for the report's start date parameter; SpecificDate uses StartDateParameterSpecificDateValue .PARAMETER StartDateParameterSpecificDateValue Start date used when StartDateParameterValue is SpecificDate .PARAMETER EndDateParameterValue End date option for the report's end date parameter; SpecificDate uses EndDateParameterSpecificDateValue .PARAMETER EndDateParameterSpecificDateValue End date used when EndDateParameterValue is SpecificDate .PARAMETER Schedule Schedule properties to change, provided as hash format of @{<property> = <value>}. Keys are the schedule properties of the REST API: scheduleName, changeType, days, weeks, startingOn, historySize, sendEmail, sendEmailWithHighPriority, additionalEmailAddresses, emailGroups, healthCheck, monday through sunday, monthlyScheduleType, monthlyDay, monthlyDayOfMonth, monthlyDayOrder, monthlyDayOrderRecurrence, monthlyDayRecurrence. .EXAMPLE $session = New-TssSession -SecretServer https://alpha -Credential $ssCred Set-TssReportSchedule -TssSession $session -Id 7 -Format Csv Stores and emails the runs of report schedule 7 as CSV .EXAMPLE $session = New-TssSession -SecretServer https://alpha -Credential $ssCred Set-TssReportSchedule -TssSession $session -Id 7 -StartDateParameterValue StartPreviousMonth -EndDateParameterValue EndPreviousMonth -Schedule @{historySize = 12; sendEmail = $true} Runs report schedule 7 over the previous month, keeps 12 runs and emails each run .LINK https://thycotic-ps.github.io/thycotic.secretserver/commands/reports/Set-TssReportSchedule .LINK https://github.com/thycotic-ps/thycotic.secretserver/blob/main/src/functions/reports/Set-TssReportSchedule.ps1 .NOTES Requires TssSession object returned by New-TssSession #> [CmdletBinding(SupportsShouldProcess)] [OutputType('Thycotic.PowerShell.Reports.ReportSchedule')] param ( [Parameter(Mandatory, ValueFromPipeline, Position = 0)] [Thycotic.PowerShell.Authentication.Session] $TssSession, [Parameter(Mandatory, ValueFromPipelineByPropertyName)] [Alias('ScheduleReportId', 'ReportScheduleId')] [int] $Id, [ValidateSet('Html', 'Csv')] [string] $Format, [int] $UserParameterValue, [int] $GroupParameterValue, [int] $FolderParameterValue, [string] $FolderPathParameterValue, [string] $CustomParameterValue, [ValidateSet('StartToday', 'EndToday', 'StartYesterday', 'EndYesterday', 'StartPreviousMonth', 'EndPreviousMonth', 'StartCurrentMonth', 'EndCurrentMonth', 'StartPreviousYear', 'EndPreviousYear', 'StartCurrentYear', 'EndCurrentYear', 'StartWeek', 'EndWeek', 'SpecificDate')] [string] $StartDateParameterValue, [datetime] $StartDateParameterSpecificDateValue, [ValidateSet('StartToday', 'EndToday', 'StartYesterday', 'EndYesterday', 'StartPreviousMonth', 'EndPreviousMonth', 'StartCurrentMonth', 'EndCurrentMonth', 'StartPreviousYear', 'EndPreviousYear', 'StartCurrentYear', 'EndCurrentYear', 'StartWeek', 'EndWeek', 'SpecificDate')] [string] $EndDateParameterValue, [datetime] $EndDateParameterSpecificDateValue, [hashtable] $Schedule ) begin { $tssParams = $PSBoundParameters $invokeParams = . $GetInvokeApiParams $TssSession } process { Get-TssInvocation $PSCmdlet.MyInvocation if ($tssParams.ContainsKey('TssSession') -and $TssSession.IsValidSession()) { Compare-TssVersion $TssSession '10.9.000000' $PSCmdlet.MyInvocation $restResponse = $null $uri = $TssSession.ApiUrl, 'reports', 'schedules', $Id -join '/' $invokeParams.Uri = $uri $invokeParams.Method = 'PATCH' $body = @{ data = @{ } } switch ($tssParams.Keys) { 'Format' { $body.data.Add('format', @{ dirty = $true; value = $Format }) } 'UserParameterValue' { $body.data.Add('userParameterValue', @{ dirty = $true; value = $UserParameterValue }) } 'GroupParameterValue' { $body.data.Add('groupParameterValue', @{ dirty = $true; value = $GroupParameterValue }) } 'FolderParameterValue' { $body.data.Add('folderParameterValue', @{ dirty = $true; value = $FolderParameterValue }) } 'FolderPathParameterValue' { $body.data.Add('folderPathParameterValue', @{ dirty = $true; value = $FolderPathParameterValue }) } 'CustomParameterValue' { $body.data.Add('customParameterValue', @{ dirty = $true; value = $CustomParameterValue }) } 'StartDateParameterValue' { $body.data.Add('startDateParameterValue', @{ dirty = $true; value = $StartDateParameterValue }) } 'StartDateParameterSpecificDateValue' { $body.data.Add('startDateParameterSpecificDateValue', @{ dirty = $true; value = $StartDateParameterSpecificDateValue.ToString('s') }) } 'EndDateParameterValue' { $body.data.Add('endDateParameterValue', @{ dirty = $true; value = $EndDateParameterValue }) } 'EndDateParameterSpecificDateValue' { $body.data.Add('endDateParameterSpecificDateValue', @{ dirty = $true; value = $EndDateParameterSpecificDateValue.ToString('s') }) } 'Schedule' { $scheduleBody = @{ } foreach ($scheduleKey in $Schedule.Keys) { $scheduleValue = $Schedule[$scheduleKey] if ($scheduleValue -is [datetime]) { $scheduleValue = $scheduleValue.ToString('s') } $scheduleBody.Add($scheduleKey, @{ dirty = $true; value = $scheduleValue }) } $body.data.Add('schedule', $scheduleBody) } } if ($body.data.Count -eq 0) { Write-Error 'Provide at least one property to update' return } $invokeParams.Body = $body | ConvertTo-Json -Depth 100 if ($PSCmdlet.ShouldProcess("Report schedule Id: $Id", "$($invokeParams.Method) $uri with:`n$($invokeParams.Body)`n")) { Write-Verbose "Performing the operation $($invokeParams.Method) $uri with:`n$($invokeParams.Body)`n" try { $apiResponse = Invoke-TssApi @invokeParams $restResponse = . $ProcessResponse $apiResponse } catch { Write-Warning "Issue updating report schedule [$Id]" $err = $_ . $ErrorHandling $err } if ($restResponse) { . $GetReportSchedule $restResponse } } } else { Write-Warning 'No valid session found' } } } |