Public/Get-SubnetInformation.ps1
<# .SYNOPSIS Returns the information regarding a subnet that an IPv4 Address exists .DESCRIPTION Returns the information regarding a subnet that an IPv4 Address exists and returns information regarding Subnet ID, Broadcast Address, Subnet Mask, Network Prefix, First IP Address, Last IP Address, Total Hosts, and Total Class C addresses. .PARAMETER IPv4Address The IPv4 Address .PARAMETER SubnetMask The subnet mask of the network .PARAMETER Prefix The network prefix .EXAMPLE Get-SubnetInformation -IPv4Address 192.168.1.120 -SubnetMask 255.255.254.0 SubnetId : 192.168.0.0 BroadcastAddress : 192.168.1.255 SubnetMask : 255.255.254.0 Prefix : 23 FirstIPv4Address : 192.168.0.1 LastIPv4Address : 192.168.1.254 TotalHosts : 510 TotalClassCSubnets : 2 .EXAMPLE Get-SubnetInformation -Ipv4Address 192.168.1.120 -Prefix 16 SubnetId : 192.168.0.0 BroadcastAddress : 192.168.255.255 SubnetMask : 255.255.0.0 Prefix : 16 FirstIPv4Address : 192.168.0.1 LastIPv4Address : 192.168.255.254 TotalHosts : 65534 TotalClassCSubnets : 256 .LINK http://www.github.com/roberttoups/IPv4Toolbox #> function Get-SubnetInformation { [CmdletBinding( DefaultParameterSetName = 'Prefix' )] [OutputType([PSCustomObject])] Param ( [Parameter( Mandatory = $true, ValueFromPipeline = $true )] [Alias('IPAddress')] [ValidatePattern( '^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$' )] [String] $IPv4Address, [Parameter( Mandatory = $true, ParameterSetName = 'SubnetMask' )] [Alias('Mask')] [ValidateSet( '255.0.0.0', '255.128.0.0', '255.192.0.0', '255.224.0.0', '255.240.0.0', '255.248.0.0', '255.252.0.0', '255.254.0.0', '255.255.0.0', '255.255.128.0', '255.255.192.0', '255.255.224.0', '255.255.240.0', '255.255.248.0', '255.255.252.0', '255.255.254.0', '255.255.255.0', '255.255.255.128', '255.255.255.192', '255.255.255.224', '255.255.255.240', '255.255.255.248', '255.255.255.252', '255.255.255.254', '255.255.255.255' )] [String] $SubnetMask, [Parameter( Mandatory = $false, ParameterSetName = 'Prefix' )] [ValidateRange(8 , 30)] [Int32] $Prefix = 24 ) begin {} process { Write-Verbose -Message "IPv4Address: $IPv4Address" Write-Verbose -Message "Parameter Set: $($PSCmdlet.ParameterSetName)" if($IPv4Address) { $IPv4AddressObject = [System.Net.IPAddress]::Parse($IPv4Address) if($PSCmdlet.ParameterSetName -eq 'Prefix') { $SubnetMaskObject = [System.Net.IPAddress]::Parse((ConvertTo-IPv4 -Integer ([System.Convert]::ToInt64(("1" * $Prefix + "0" * (32 - $Prefix)), 2)))) } elseif($PSCmdlet.ParameterSetName -eq 'SubnetMask') { $SubnetMaskObject = [System.Net.IPAddress]::Parse($SubnetMask) $TempTable = Get-PrefixTable $Prefix = $TempTable.Item($($SubnetMaskObject.IPAddressToString)) Write-Verbose -Message "Converted $SubnetMask to /$Prefix" } if($IPv4Address) { $SubnetAddressObject = New-Object System.Net.IPAddress($SubnetMaskObject.Address -band $IPv4AddressObject.Address) $BroadcastAddressObject = New-Object System.Net.IPAddress( [System.Net.IpAddress]::Parse('255.255.255.255').Address -bxor $SubnetMaskObject.Address -bor $SubnetAddressObject.Address ) } $StartingAddress = ConvertTo-Int64 -IPv4Address $SubnetAddressObject.IPAddressToString $EndingAddress = ConvertTo-Int64 -IPv4Address $BroadcastAddressObject.IPAddressToString $LastAddress = ConvertTo-IPv4 -Integer ($EndingAddress - 1) $FirstAddress = ConvertTo-IPv4 -Integer ($StartingAddress + 1) $AWSFirstIPv4Address = ConvertTo-IPv4 -Integer ($StartingAddress + 3) $Hosts = ((ConvertTo-DecimalIP -IPAddressObject $BroadcastAddressObject) - (ConvertTo-DecimalIP -IPAddressObject $SubnetAddressObject) - 1) [PsCustomObject] @{ 'SubnetId' = $SubnetAddressObject.IPAddressToString 'BroadcastAddress' = $BroadcastAddressObject.IPAddressToString 'SubnetMask' = $SubnetMaskObject.IPAddressToString 'Prefix' = $Prefix 'Subnet' = "$($SubnetAddressObject.IPAddressToString)/$Prefix" 'FirstIPv4Address' = $FirstAddress 'LastIPv4Address' = $LastAddress 'TotalHosts' = $Hosts 'AWSFirstIPv4Address' = $AWSFirstIPv4Address 'AWSTotalHosts' = ($Hosts - ((ConvertTo-Int64 -IPv4Address $AWSFirstIPv4Address) - (ConvertTo-Int64 -IPv4Address $FirstAddress))) } } else { Write-Error "-IPv4Address is NULL!" $null } } end {} } |