Private/Resolve-DMHyperCDPLun.ps1

function Resolve-DMHyperCDPLun {
    [CmdletBinding()]
    param(
        [pscustomobject]$WebSession,
        [string]$LunId,
        [string]$LunName,
        [psobject]$InputObject
    )

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

    if ($LunId) {
        $lun = @(Get-DMlun -WebSession $WebSession -Id $LunId)[0]
        if ($null -eq $lun) {
            throw "Invalid LunId '$LunId'."
        }
        return $lun
    }

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

    throw 'LunId, LunName, or a piped LUN object is required.'
}