Functions/Get-SubnetMaskIPv4.ps1
Function Get-SubnetMaskIPv4 { <# .SYNOPSIS Gets a dotted decimal subnet mask given the number of bits in the mask .DESCRIPTION Gets a dotted decimal subnet mask given the number of bits in the mask. Can optionally include the number of bits. .PARAMETER NetworkLength A mandatory [int] or array of [int] for which you want the subnet mask. Can be fed from the pipeline. Aliased to both 'Length' and 'CIDR' .PARAMETER IncludeCIDR A switch controlling whether you want to see the CIDR length .EXAMPLE Get-SubnetMaskIPv4 -NetworkLength 22 -IncludeCIDR Would return something similar to the following: VERBOSE: $MinDate specified as [01/01/1969 00:00:00] VERBOSE: $MaxDate specified as [01/01/2040 00:00:00] VERBOSE: $MinDate ouside valid UnixEpoch setting to [01/01/1970 00:00:00] VERBOSE: $MaxDate ouside valid UnixEpoch setting to [01/19/2038 03:14:07] VERBOSE: The random date calculated is [12/26/1997 18:41:51] VERBOSE: The return value is [System.DateTime] datatype Friday, December 26, 1997 6:41:51 PM .EXAMPLE 11..16 | Get-SubnetMaskIPv4 -IncludeCIDR Would return: CIDR SubnetMask ---- ---------- 11 255.224.0.0 12 255.240.0.0 13 255.248.0.0 14 255.252.0.0 15 255.254.0.0 16 255.255.0.0 .EXAMPLE Get-SubnetMaskIPv4 23 Would return: 255.255.254.0 .OUTPUTS [psobject] if -IncludeCIDR switch specified [string] default .LINK https://www.Google.com #> [CmdletBinding()] param( [Parameter(ValueFromPipeline,Mandatory,HelpMessage='Enter the length of the subnet mask (1-32). Press ENTER with no other input to finish.')] [Alias('Length','CIDR')] [ValidateRange(1,32)] [int[]] $NetworkLength, [Parameter()] [switch] $IncludeCIDR ) Begin { Write-Verbose -Message "Starting $($MyInvocation.Mycommand)" } process { foreach ($curLength in $NetworkLength) { $MaskBinary = ('1' * $curLength).PadRight(32, '0') $DottedMaskBinary = $MaskBinary -replace '(.{8}(?!\z))', '${1}.' $SubnetMask = ($DottedMaskBinary.Split('.') | foreach-object { [Convert]::ToInt32($_, 2) }) -join '.' if ($IncludeCIDR) { $prop = [ordered] @{ CIDR = $curLength ; SubnetMask = $SubnetMask } $obj = New-Object -typename PsObject -Property $prop $obj } else { $SubnetMask } } } End { Write-Verbose -Message "Ending $($MyInvocation.Mycommand)" } } Set-Alias -Name 'Get-SubnetMaskIP' -Value 'Get-SubnetMaskIPv4' -Description 'Alias for Get-SubnetMaskIPv4' |