Private/Resolve-DMHyperCDPSchedule.ps1

function Resolve-DMHyperCDPSchedule {
    [CmdletBinding()]
    param(
        [pscustomobject]$WebSession,
        [string]$Id,
        [string]$Name,
        [psobject]$InputObject
    )

    if ($InputObject) {
        if ($InputObject.Id) {
            $Id = $InputObject.Id
        }
        elseif ($InputObject.Name) {
            $Name = $InputObject.Name
        }
        else {
            throw 'Piped schedule input must include an Id or Name property.'
        }
    }

    if ($Id) {
        $schedule = @(Get-DMHyperCDPSchedule -WebSession $WebSession -Id $Id)[0]
        if ($null -eq $schedule) {
            throw "Invalid HyperCDP schedule Id '$Id'."
        }
        return $schedule
    }

    if ($Name) {
        $matches = @(Get-DMHyperCDPSchedule -WebSession $WebSession -Name $Name | Where-Object Name -EQ $Name)
        if ($matches.Count -eq 1) {
            return $matches[0]
        }
        if ($matches.Count -gt 1) {
            throw "HyperCDP schedule name is ambiguous because more than one schedule is named '$Name'."
        }
        throw "Invalid HyperCDP schedule name '$Name'."
    }

    throw 'ScheduleId, ScheduleName, or a piped schedule object is required.'
}