108 lines
3.4 KiB
PowerShell
108 lines
3.4 KiB
PowerShell
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="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 }
|
|
"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 |