function Get-Vlan { [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-Request @_params | Select-Object @{n="id";e={$_.vlanId}},* | Select-Object -ExcludeProperty vlanId | ` Add-Member -MemberType MemberSet -Name PSStandardMembers -Value $visibleProperties -PassThru } } Export-ModuleMember -Function Get-Vlan