functions/public/Get-PSIPAMVlan.ps1

function Get-PSIPAMVlan {
    [CmdletBinding(DefaultParameterSetName="ByID")]
    param (
        [parameter(Mandatory=$false,ValueFromPipeline=$true,ValueFromPipelineByPropertyName=$true,Position=0,ParameterSetName="ByID")]
        [ValidateScript({ $_ -match "^\d+$" })]
        [ValidateNotNullOrEmpty()]
        [string]
        $Id,
        [parameter(Mandatory=$true,ValueFromPipeline=$true,ValueFromPipelineByPropertyName=$true,Position=0,ParameterSetName="ByNumber")]
        [ValidateScript({ $_ -match "^\d+$" })]
        [ValidateNotNullOrEmpty()]
        [string]
        $Number,
        [parameter(Mandatory=$true,ValueFromPipeline=$true,ValueFromPipelineByPropertyName=$true,Position=0,ParameterSetName="ByL2Domain")]
        [ValidateScript({ $_ -match "^\d+$" })]
        [ValidateNotNullOrEmpty()]
        [string]
        $L2DomainId
    )
    process {
        [string[]]$visiblePropertiesList = @('Id','Name','Description')
        $visibleProperties = [System.Management.Automation.PSPropertySet]::new('DefaultDisplayPropertySet',$visiblePropertiesList)

        $_params = @{
            Controller = "vlan"
            Method     = "GET"
        }
        switch ($PSCmdlet.ParameterSetName) {
            "ByID"      { $_identifiers = @($Id) }
            "ByNumber"  { $_identifiers = @("search",$Number) }
            "ByL2Domain"{
                $_params.Item("Controller") = "l2domains"

                $_l2domainId = $L2DomainId

                $_identifiers = @($_l2domainId,"vlans")
            }
        }
        $_params.Add("Identifiers",$_identifiers)

        Invoke-PSIPAMRequest @_params | Select-Object @{n="id";e={$_.vlanId}},* | Select-Object -ExcludeProperty vlanId | `
            Add-Member -MemberType MemberSet -Name PSStandardMembers -Value $visibleProperties -PassThru
    }
}
Export-ModuleMember -Function Get-PSIPAMVlan