Private/GetMaxSubnetCount.ps1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
function GetMaxSubnetCount {
    [CmdletBinding(DefaultParameterSetName='Mask')]
    param(
        [Parameter(ParameterSetName='Mask')]
        [ValidateScript({$_ -in $(GetValidMask)})]
        [ipaddress]$Mask,
        [Parameter(ParameterSetName='MaskLength')]
        [ValidateRange(0,32)]
        [int]$MaskLength
    )
    begin{}
    process{
        $Length = switch ($PSCmdlet.ParameterSetName) {
            Mask { $(GetValidMask).IndexOf($Mask) }
            MaskLength { $MaskLength }
        }
        $Total = [math]::Max(1,[math]::Pow(2,(30-$Length)))
        $result = If($total -eq 1){0}else{$Total}
        $result
    }
    end{}
}