NetworkHelper/Public/Get-NetworkRange.ps1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
function Get-NetworkRange
{
    param (
        [string]$IPAddress,
        [string]$SubnetMask
    )
    
    if ($IPAddress.Contains('/'))
    {
        $temp = $IPAddress.Split('/')
        $IPAddress = $temp[0]
        $SubnetMask = $temp[1]
    }
    
    If (-not $SubnetMask.Contains('.'))
    {
        $SubnetMask = ConvertTo-Mask -MaskLength $SubnetMask
    }
    
    $decimalIP = ConvertTo-DecimalIP -IPAddress $IPAddress
    $decimalMask = ConvertTo-DecimalIP -IPAddress $SubnetMask
    
    $network = $decimalIP -band $decimalMask
    $broadcast = $decimalIP -bor ((-bnot $decimalMask) -band [UInt32]::MaxValue)
    
    for ($i = $($network + 1); $i -lt $broadcast; $i++)
    {
        ConvertTo-DottedDecimalIP -IPAddress $i
    }
}