Public/Test-IPv4Address.ps1

<#
.SYNOPSIS

Tests a string to determine if it is a valid IPv4 Address.

.DESCRIPTION

Tests a string to determine if it is a valid IPv4 Address (0.0.0.0 to 255.255.255.255).

.PARAMETER IPv4Address

The string to test if it is a valid IPv4 Address.

.EXAMPLE

  Test-IPv4Address -IPv4Address 192.168.0.1

  True

.EXAMPLE

  Test-IPv4Address -IPv4Address 192.apple.0.1

  False

.EXAMPLE

  Test-IPv4Address -IPv4Address 192.256.0.1

  False

.NOTES

  http://www.github.com/roberttoups/IPv4Toolbox

.LINK

#>

function Test-IPv4Address {
  [CmdletBinding()]
  [OutputType([Boolean])]
  param (
    # The IPv4 Address string to test.
    [Parameter(
      HelpMessage = 'The IPv4 Address string to test.',
      ValueFromPipeline = $true,
      Mandatory = $true
    )]
    [String]
    $IPv4Address
  )

  begin { }

  process {
    Write-Verbose -Message "Validating IPv4 Address $IPv4Address"
    $RegularExpression = '^(?:(?: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])$'
    if($IPv4Address -match $RegularExpression) {
      try {
        $TestIPv4Address = [System.Net.IPAddress]$IPv4Address
        if($TestIPv4Address) {
          Write-Verbose -Message "IPv4 Address $IPv4Address is valid."
          $true
        } else {
          Write-Verbose -Message "IPv4 Address $IPv4Address is not valid. (Failed System.Net.IPAddress)"
          $false
        }
      } catch {
        Write-Verbose -Message "IPv4 Address $IPv4Address is not valid. (Failed System.Net.IPAddress)"
        $false
      }
    } else {
      Write-Verbose -Message "IPv4 Address $IPv4Address is not valid. (Regular Expression)"
      $false
    }
  }
  end {  }
}