function Get-Address { [CmdletBinding(DefaultParameterSetName="ByID")] [OutputType([PS.IPAM.address])] 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="ByIP" )] [parameter( Mandatory=$false, ValueFromPipeline=$true, ValueFromPipelineByPropertyName=$true, Position=1, ParameterSetName="BySubnetId" )] [ValidateNotNullOrEmpty()] [ipaddress] $IP, [parameter( Mandatory=$true, ValueFromPipeline=$true, ValueFromPipelineByPropertyName=$true, Position=0, ParameterSetName="ByHostName" )] [ValidateNotNullOrEmpty()] [string] $HostName, [parameter( Mandatory=$true, ValueFromPipeline=$true, ValueFromPipelineByPropertyName=$true, Position=0, ParameterSetName="ByHostBase" )] [ValidateNotNullOrEmpty()] [string] $HostBase, [parameter( Mandatory=$true, ValueFromPipeline=$true, ValueFromPipelineByPropertyName=$true, Position=0, ParameterSetName="ByTag" )] [ValidateNotNullOrEmpty()] [int] $TagId, [parameter( Mandatory=$true, ValueFromPipeline=$true, ValueFromPipelineByPropertyName=$true, Position=0, ParameterSetName="BySubnetId" )] [ValidateNotNullOrEmpty()] [int] $SubnetId, [parameter( Mandatory=$true, ValueFromPipeline=$true, ValueFromPipelineByPropertyName=$true, Position=0, ParameterSetName="BySubnetCIDR" )] [ValidateScript({[ipaddress] $_.Split("/")[0] -and $_.Split("/")[1] -match "\d{1,2}"})] [ValidateNotNullOrEmpty()] [string] $SubnetCIDR ) process { $_params = @{ Controller = [PS.IPAM.controllers]::addresses Method = "GET" Type = [PS.IPAM.types]::address } switch ($PSCmdlet.ParameterSetName) { "ByID" { $_identifiers = @($id); break } "ByIP" { $_identifiers = ("search",$IP); break } "ByHostName" { $_identifiers = ("search_hostname",$HostName); break } "ByHostBase" { $_identifiers = ("search_hostbase",$HostBase); break } "ByTag" { $_identifiers = ("tags",$TagId,[PS.IPAM.controllers]::addresses); break } "BySubnetId" { if ($IP) { $_identifiers = ($IP,$SubnetId) } else { $_params.Item("Controller") = [PS.IPAM.controllers]::subnets $_identifiers = ($SubnetId,[PS.IPAM.controllers]::addresses) } break } "BySubnetCIDR" { $_params.Item("Controller") = [PS.IPAM.controllers]::subnets $_subnetId = (Get-Subnet -CIDR $SubnetCIDR).id if (!$_subnetId) { throw "Cannot find subnet!" } $_identifiers = ($_subnetId,[PS.IPAM.controllers]::addresses) break } } $_params.Add("Identifiers",$_identifiers) Invoke-Request @_params } } Export-ModuleMember -Function Get-Address