38 lines
1.5 KiB
PowerShell
38 lines
1.5 KiB
PowerShell
function Get-FirstFreeIP {
|
|
[CmdletBinding(DefaultParameterSetName="ByID")]
|
|
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=$false,ValueFromPipeline=$true,ValueFromPipelineByPropertyName=$true,Position=0,ParameterSetName="BySubnetObject")]
|
|
[ValidateNotNullOrEmpty()]
|
|
[PS.IPAM.Subnetwork]
|
|
$SubnetObject
|
|
)
|
|
process {
|
|
$_params = @{
|
|
Controller = [PS.IPAM.controllers]::subnets
|
|
Method = "GET"
|
|
}
|
|
switch ($PSCmdlet.ParameterSetName) {
|
|
"ByID" { $_subnetId = $Id; break }
|
|
"ByCIDR" {
|
|
$_subnetId = (Get-Subnet -CIDR $CIDR).id
|
|
if (!$_subnetId) { throw "Cannot find subnet!" }
|
|
break
|
|
}
|
|
"BySubnetObject" { $_subnetId = $SubnetObject.Id; break }
|
|
}
|
|
$_identifiers = @($_subnetId,"first_free")
|
|
$_params.Add("Identifiers",$_identifiers)
|
|
|
|
return Invoke-Request @_params | Select-Object @{n="Ip";e={$_}}
|
|
}
|
|
}
|
|
Export-ModuleMember -Function Get-FirstFreeIP |