Public/Set-DuneDeploymentLifetime.ps1

function Set-DuneDeploymentLifetime {
    [CmdletBinding(
        SupportsShouldProcess,
        ConfirmImpact = 'None',
        DefaultParameterSetName = "Id_ValidUntil"
    )]
    param (
        [Parameter(Mandatory, ParameterSetName = "Id_ValidUntil")]
        [Parameter(Mandatory, ParameterSetName = "Id_NeverExpires")]
        [guid]$Id,

        [Parameter(Mandatory, ValueFromPipeline, ParameterSetName = "Object_ValidUntil")]
        [Parameter(Mandatory, ValueFromPipeline, ParameterSetName = "Object_NeverExpires")]
        [DuneDeployment]$Deployment,

        [Parameter(Mandatory, ParameterSetName = "Id_ValidUntil")]
        [Parameter(Mandatory, ParameterSetName = "Object_ValidUntil")]
        [DateTime]$ValidUntil,

        [Parameter(Mandatory, ParameterSetName = "Id_NeverExpires")]
        [Parameter(Mandatory, ParameterSetName = "Object_NeverExpires")]
        [switch]$NeverExpires,

        [Parameter()]
        [switch]$SuppressOwnerNotification,

        [Parameter()]
        [string]$TxId
    )

    begin {}

    process {
        Write-Debug "$($MyInvocation.MyCommand)|process|$($PSCmdlet.ParameterSetName)"
        switch ($PSCmdlet.ParameterSetName) {
            {$_ -like "Id_*"} {
                Write-Debug "$($MyInvocation.MyCommand)|process|$($PSCmdlet.ParameterSetName)|$($Id)"
                $Deployment = Get-DuneDeployment -Id $Id
            }
            {$_ -like "Object_*"} {
                Write-Debug "$($MyInvocation.MyCommand)|process|$($PSCmdlet.ParameterSetName)|$($Deployment.Id)"
            }
            Default {
                return
            }
        }
        if ($ValidUntil) {
            if ($PSCmdlet.ShouldProcess($Deployment.Name)) {
                if ($Deployment.IsNeverExpiring) {
                    $Url = $("deployments/{0}/neverexpires" -f $Deployment.Id)
                    $Body = @{
                        IsNeverExpiring    = $false
                        SendNotifications  = $false
                    }
                    $Null = Invoke-DuneApiRequest $Url -Method PATCH -Body $Body
                }
                $Url = $("deployments/{0}/lifetime/extend" -f $Deployment.Id)
                $Body = @{
                    ValidTo           = $ValidUntil
                    SendNotifications = if($SuppressOwnerNotification){$false}else{$true}
                }
                $Null = Invoke-DuneApiRequest $Url -Method PATCH -Body $Body
            }
        }
        if ($NeverExpires) {
            if ($PSCmdlet.ShouldProcess($Deployment.Name)) {
                $Url = $("deployments/{0}/neverexpires" -f $Deployment.Id)
                $Body = @{
                    IsNeverExpiring    = $true
                    SendNotifications = if($SuppressOwnerNotification){$false}else{$true}
                }
                $Null = Invoke-DuneApiRequest $Url -Method PATCH -Body $Body
            }
        }
    }

    end {}
}