Public/EAI/Remove-EAISdtOverride.ps1
|
<# .SYNOPSIS Removes an Edwin SDT instance override. .DESCRIPTION Remove-EAISdtOverride deletes an override and restores the calculated instance behavior. The DELETE path uses the canonical original instance identity (`scheduleId:isoStartTime`), not the rescheduled newStartTime. Pipe objects from Get-EAISdtInstance or from a schedule's overrides array returned by Get-EAISdt. .PARAMETER InputObject An Edwin.SDT.Instance, a schedule override object from Get-EAISdt, or any object with instanceId or originalInstanceId properties. .PARAMETER InstanceId Instance ID in the format scheduleId:isoStartTime. .EXAMPLE Remove-EAISdtOverride -InstanceId '97038d1b-648a-4718-b287-33726ed49624:2026-07-22T16:00:00.000Z' .EXAMPLE Get-EAISdtInstance -ScheduleId $id | Where-Object { $_.instanceId -like '*2026-07-22T16:00:00.000Z*' } | Remove-EAISdtOverride .EXAMPLE # Remove one stored override (originalInstanceId.startTime may be epoch seconds from the API) (Get-EAISdt -Id $id).overrides | Select-Object -First 1 | Remove-EAISdtOverride .EXAMPLE # Preview removals before deleting orphaned overrides (Get-EAISdt -Id $id).overrides | Remove-EAISdtOverride -WhatIf .NOTES Use Connect-EAIAccount before running this command. To remove all overrides at once, use Set-EAISdtOverride -ScheduleId $id -Override @(). .INPUTS You can pipe Edwin.SDT.Instance objects, override objects from Get-EAISdt, or instance ID strings. .OUTPUTS None. #> function Remove-EAISdtOverride { [CmdletBinding(SupportsShouldProcess, ConfirmImpact = 'None')] param ( [Parameter(ValueFromPipeline)] $InputObject, [Parameter(ValueFromPipelineByPropertyName)] [String]$InstanceId ) begin { if (-not (Test-EAIAuth -CallerPSCmdlet $PSCmdlet)) { $script:SkipRemoveEAISdtOverride = $true return } $script:SkipRemoveEAISdtOverride = $false } process { if ($script:SkipRemoveEAISdtOverride) { return } $resolvedInstanceId = if ($null -ne $InputObject) { if ($InputObject.PSObject.Properties['instanceId'] -and $InputObject.instanceId -is [string]) { $InputObject.instanceId } elseif ($InputObject.PSObject.Properties['originalInstanceId']) { Format-EAISdtInstanceId -ScheduleId $InputObject.originalInstanceId.scheduleId ` -StartTime $InputObject.originalInstanceId.startTime } elseif ($InputObject.PSObject.Properties['instanceId']) { Format-EAISdtInstanceId -ScheduleId $InputObject.instanceId.scheduleId ` -StartTime $InputObject.instanceId.startTime } else { throw 'Piped input must include instanceId or originalInstanceId.' } } elseif (-not [string]::IsNullOrWhiteSpace($InstanceId)) { $InstanceId } else { throw 'InstanceId is required.' } $encodedInstanceId = [System.Uri]::EscapeDataString($resolvedInstanceId) $headers = New-EAIHeader -Auth $Script:EAIAuth -Method 'DELETE' $uri = Join-EAIUri -PortalUrl $Script:EAIAuth.PortalUrl -ResourcePath "/action/sdt/override/$encodedInstanceId" $enableDebugLogging = $DebugPreference -ne 'SilentlyContinue' if ($PSCmdlet.ShouldProcess($resolvedInstanceId, 'Remove Edwin SDT override')) { Resolve-EAIDebugInfo -Url $uri -Headers $headers -Command $MyInvocation $null = Invoke-EAIRestMethod -Uri $uri -Method DELETE -Headers $headers -Auth $Script:EAIAuth ` -CallerPSCmdlet $PSCmdlet -EnableDebugLogging:$enableDebugLogging Write-Information "[INFO]: Successfully removed Edwin SDT override for instance $resolvedInstanceId." } } } |