function Get-Subnet { [CmdletBinding(DefaultParameterSetName="NoParams")] [OutputType([PS.IPAM.Subnetwork])] param ( [parameter( Mandatory=$true, ValueFromPipeline=$true, ValueFromPipelineByPropertyName=$true, Position=0, ParameterSetName="ByCIDR" )] [ValidateScript({[ipaddress] $_.Split("/")[0] -and $_.Split("/")[1] -match "\d{1,2}"})] [ValidateNotNullOrEmpty()] [string] $CIDR, [parameter( Mandatory=$true, ValueFromPipeline=$true, ValueFromPipelineByPropertyName=$true, Position=0, ParameterSetName="ByID" )] [ValidateNotNullOrEmpty()] [int] $Id, [parameter( Mandatory=$true, ValueFromPipeline=$true, ValueFromPipelineByPropertyName=$true, Position=0, ParameterSetName="BySectionId" )] [parameter( Mandatory=$false, ValueFromPipeline=$true, ValueFromPipelineByPropertyName=$true, Position=2, ParameterSetName="ByVlanNumber" )] [parameter( Mandatory=$false, ValueFromPipeline=$true, ValueFromPipelineByPropertyName=$true, Position=1, ParameterSetName="ByVlanId" )] [ValidateNotNullOrEmpty()] [int] $SectionId, [parameter( Mandatory=$true, ValueFromPipeline=$true, ValueFromPipelineByPropertyName=$true, Position=0, ParameterSetName="BySectionName" )] [parameter( Mandatory=$false, ValueFromPipeline=$true, ValueFromPipelineByPropertyName=$true, Position=3, ParameterSetName="ByVlanNumber" )] [parameter( Mandatory=$false, ValueFromPipeline=$true, ValueFromPipelineByPropertyName=$true, Position=2, ParameterSetName="ByVlanId" )] [ValidateNotNullOrEmpty()] [string] $SectionName, [parameter( Mandatory=$true, ValueFromPipeline=$true, ValueFromPipelineByPropertyName=$true, Position=0, ParameterSetName="ByVrfId" )] [ValidateNotNullOrEmpty()] [int] $VrfId, [parameter( Mandatory=$true, ValueFromPipeline=$true, ValueFromPipelineByPropertyName=$true, Position=0, ParameterSetName="ByVlanId" )] [ValidateNotNullOrEmpty()] [int] $VlanId, [parameter( Mandatory=$true, ValueFromPipeline=$true, ValueFromPipelineByPropertyName=$true, Position=0, ParameterSetName="ByVlanNumber" )] [ValidateNotNullOrEmpty()] [int] $VlanNumber, [parameter( Mandatory=$false, ValueFromPipeline=$true, ValueFromPipelineByPropertyName=$true, Position=1, ParameterSetName="ByVlanNumber" )] [ValidateNotNullOrEmpty()] [int] $VlanDomainId, [parameter( Mandatory=$false, ValueFromPipeline=$true, ValueFromPipelineByPropertyName=$true, Position=1, ParameterSetName="ByID" )] [switch] $Slaves, [parameter( Mandatory=$false, ValueFromPipeline=$true, ValueFromPipelineByPropertyName=$true, Position=2, ParameterSetName="ByID" )] [switch] $Recurse ) process { $_params = @{ Controller = [PS.IPAM.controllers]::subnets Method = "GET" Type = [PS.IPAM.types]::Subnetwork } switch ($PSCmdlet.ParameterSetName) { "ByCIDR" { $_identifiers = @("cidr",$CIDR); break } "ByID" { $_identifiers = @($Id) if ($Slaves) { if ($Recurse) { $_identifiers += "slaves_recursive" } else { $_identifiers += "slaves" } } break } "BySectionId" { $_params.Item("Controller") = "sections" $_sectionId = $SectionId $_identifiers = @($_sectionId,"subnets") break } "BySectionName" { $_params.Item("Controller") = "sections" $_sectionId = (Get-Section -Name $SectionName).id if (!$_sectionId) { throw "Cannot find section!" } $_identifiers = @($_sectionId,"subnets") break } "ByVrfId" { $_params.Item("Controller") = "vrf" $_vrfId = $VrfId $_identifiers = @($_vrfId,"subnets") break } "ByVlanId" { $_params.Item("Controller") = "vlan" $_vlanId = $VlanId if ($SectionId) { $_sectionId = $SectionId } if ($SectionName){ $_sectionId = (Get-Section -Name $SectionName).id } $_identifiers = @($_vlanId,"subnets") if ($_sectionId) { $_identifiers += $_sectionId } break } "ByVlanNumber" { $_params.Item("Controller") = "vlan" $_vlans = Get-Vlan -Number $VlanNumber if ($VlanDomain) { $_vlans = $_vlans | Where-Object {$_.domainId -eq $VlanDomain} } if ($SectionId) { $_sectionId = $SectionId } if ($SectionName){ $_sectionId = (Get-Section -Name $SectionName).id } $_vlanId = $_vlans.vlanId if ($_vlanid -is [System.Array]) { throw "More than one vLan with $VlanNumber number is present!" } if (!$_vlanId) { throw "Cannot find Vlan!"} $_identifiers = @($_vlanId,"subnets") if ($_sectionId) { $_identifiers += $_sectionId } break } } $_params.Add("Identifiers",$_identifiers) Invoke-Request @_params } } Export-ModuleMember Get-Subnet