Public/New-DuneActionAssignment.ps1

<#
.SYNOPSIS
Create or set an action assignment on a deployment/resourcegroup/resource.

.DESCRIPTION
PUTs action-assignment to the target path: `deployments|resourcegroups|resources` / <id> / `action-assignments`.
Provide `ActionId` and optional `Parameters` and `CronExpression`.
#>

function New-DuneActionAssignment {
    [CmdletBinding(DefaultParameterSetName = 'Default')]
    param(
        [Parameter(ParameterSetName = 'Deployment', ValueFromPipeline)]
        [Parameter(ParameterSetName = 'DeploymentId')]
        [DuneDeployment]$Deployment,

        [Parameter(ParameterSetName = 'ResourceGroup', ValueFromPipeline)]
        [Parameter(ParameterSetName = 'ResourceGroupId')]
        [DuneResourceGroup]$ResourceGroup,

        [Parameter(ParameterSetName = 'Resource', ValueFromPipeline)]
        [Parameter(ParameterSetName = 'ResourceId')]
        [DuneResource]$Resource,

        [Parameter(Mandatory = $true)]
        [string]$Name,

        [Parameter(ParameterSetName = 'Deployment')]
        [Parameter(ParameterSetName = 'ResourceGroup')]
        [Parameter(ParameterSetName = 'Resource')]
        [guid]$ActionId,

        [Parameter(ParameterSetName = 'DeploymentId', ValueFromPipeline)]
        [Parameter(ParameterSetName = 'ResourceGroupId', ValueFromPipeline)]
        [Parameter(ParameterSetName = 'ResourceId', ValueFromPipeline)]
        [DuneAction]$Action,

        [Parameter()]
        [hashtable]$Parameters,

        [Parameter()]
        [string]$CronExpression
    )

    begin {}

    process {
        $Uri = 'action-assignments'

        $Body = @{
            ActionId = $ActionId
            Name     = $Name
        }

        switch ($PSCmdlet.ParameterSetName) {
            'Deployment' { 
                $Body.ConfigItemId = $Deployment.Id
                $Body.ConfigItemType = "Deployment"
            }
            'ResourceGroup' {
                $ResourceGroup.Id
                $Body.ConfigItemType = "ResourceGroup"
            }
            'Resource' {
                $Resource.Id
                $Body.ConfigItemType = "Resource"
            }
        }

        if ($PSBoundParameters.ContainsKey('Parameters')) { $Body.Parameters = $Parameters }
        if ($PSBoundParameters.ContainsKey('CronExpression')) { $Body.CronExpression = $CronExpression }

        $Return = Invoke-DuneApiRequest -Uri $Uri -Method POST -Body $Body
        $ReturnObject = if ($Return.Content) { $Return.Content | ConvertFrom-Json | ConvertTo-DuneClassObject -Class DuneActionAssignment }
        return $ReturnObject
    }

    end {}
}