function Get-Vlan { <# .SYNOPSIS Return vlan object. .DESCRIPTION Return vlan object by vlanId, vlan number, l2domainId (return all vlans in domain), subnet object or l2domain object .PARAMETER Number Vlan tag #> [CmdletBinding(DefaultParameterSetName="NoParams")] [OutputType([PS.IPAM.Vlan])] param ( [parameter( Mandatory=$true, ValueFromPipeline=$true, ValueFromPipelineByPropertyName=$true, Position=0, ParameterSetName="ByID" )] [ValidateNotNullOrEmpty()] [int] $Id, [parameter( Mandatory=$true, ValueFromPipeline=$true, ValueFromPipelineByPropertyName=$true, Position=0, ParameterSetName="ByNumber" )] [ValidateNotNullOrEmpty()] [int] $Number, [parameter( Mandatory=$true, ValueFromPipeline=$true, ValueFromPipelineByPropertyName=$true, Position=0, ParameterSetName="ByL2Domain" )] [ValidateNotNullOrEmpty()] [int] $L2DomainId, [parameter( Mandatory=$false, ValueFromPipeline=$true, ValueFromPipelineByPropertyName=$true, Position=0, ParameterSetName="BySubnetObject" )] [ValidateNotNullOrEmpty()] [PS.IPAM.Subnetwork] $SubnetObject, [parameter( Mandatory=$false, ValueFromPipeline=$true, ValueFromPipelineByPropertyName=$true, Position=0, ParameterSetName="ByDomainObject" )] [ValidateNotNullOrEmpty()] [PS.IPAM.Domain] $DomainObject ) process { $_params = @{ Controller = [PS.IPAM.controllers]::vlan Method = "GET" Type = [PS.IPAM.types]::Vlan } switch ($PSCmdlet.ParameterSetName) { "ByID" { $_identifiers = @($Id); break } "ByNumber" { $_identifiers = @("search",$Number); break } "ByL2Domain"{ $_params.Item("Controller") = [PS.IPAM.controllers]::l2domains $_l2domainId = $L2DomainId $_identifiers = @($_l2domainId,[PS.IPAM.subcontrollers]::vlans) break } "BySubnetObject" { if ($SubnetObject.VlanId) { $_identifiers = @($SubnetObject.VlanId); break } else { return $null } } "DomainObject" { Get-Vlan -L2DomainId $DomainObject.Id } } $_params.Add("Identifiers",$_identifiers) Invoke-Request @_params } } Export-ModuleMember -Function Get-Vlan