IsNumeric PowerShell Cmdlet

A few days ago, I have updated the Convert-Byte cmdlet with a numeric validation for the input value so that the script will not attempt to convert something that is not a numeric data type and break in powershell.

Today, I decided that it will be a pain to keep rewriting a numeric data type validation for every single script that I will be writing in the future so I have decided to contribute this IsNumeric cmdlet for everyone to use.

IsNumeric is a PowerShell cmdlet that is written to validate the value as numeric or not. It returns 0 or 1 binary and True or False boolean result. The whole idea is to contribute this IsNumeric function to validate if the value is numeric value or not and reduce coding for others and myself.

Download Link – http://gallery.technet.microsoft.com/IsNumeric-c50ecf05

This is extremely handy for numeric data type validation and provides result in boolean or binary format.

function IsNumeric {

<#   
.SYNOPSIS   
    Analyse whether input value is numeric or not
  
.DESCRIPTION   
    Allows the administrator or programmer to analyse if the value is numeric value or 
    not.
    
    By default, the return result value will be in 1 or 0. The binary of 1 means on and 
    0 means off is used as a straightforward implementation in electronic circuitry 
    using logic gates. Therefore, I have kept it this way. But this IsNumeric cmdlet 
    will return True or False boolean when user specified to return in boolean value 
    using the -Boolean parameter.

.PARAMETER Value
    
    Specify a value

.PARAMETER Boolean
    
    Specify to return result value using True or False

.EXAMPLE
    Get-ChildItem C:\Windows\Logs | where { $_.GetType().Name -eq "FileInfo" } | Select -ExpandProperty Name | IsNumeric -Verbose
    DirectX.log
    VERBOSE: False
    0
    IE9_NR_Setup.log
    VERBOSE: False
    0

    The default return value is 0 when we attempt to get the files name through the 
    pipeline. You can see the Verbose output stating False when you specified the 
    -Verbose parameter

.EXAMPLE
    Get-ChildItem C:\Windows\Logs | where { $_.GetType().Name -eq "FileInfo" } | Select -ExpandProperty Length | IsNumeric -Verbose
    119155
    VERBOSE: True
    1
    2740
    VERBOSE: True
    1
    
    The default return value is 1 when we attempt to get the files length through the 
    pipeline. You can see the Verbose output stating False when you specified the 
    -Verbose parameter
        
.EXAMPLE
    $IsThisNumbers? = ("1234567890" | IsNumeric -Boolean) ; $IsThisNumbers?
    True
    
    The return value is True for the input value 1234567890 because we specified the 
    -Boolean parameter
    
.EXAMPLE    
    $IsThisNumbers? = ("ABCDEFGHIJ" | IsNumeric -Boolean) ; $IsThisNumbers?
    False

    The return value is False for the input value ABCDEFGHIJ because we specified the 
    -Boolean parameter

.NOTES   
    Author  : Ryen Kia Zhi Tang
    Date    : 20/07/2012
    Blog    : ryentang.wordpress.com
    Version : 1.0
    
#>

[CmdletBinding(
    SupportsShouldProcess=$True,
    ConfirmImpact='High')]

param (

[Parameter(
    Mandatory=$True,
    ValueFromPipeline=$True,
    ValueFromPipelineByPropertyName=$True)]
    
    $Value,
    
[Parameter(
    Mandatory=$False,
    ValueFromPipeline=$True,
    ValueFromPipelineByPropertyName=$True)]
    [alias('B')]
    [Switch] $Boolean
    
)
    
BEGIN {

    #clear variable
    $IsNumeric = 0

}

PROCESS {

    #verify input value is numeric data type
    try { 0 + $Value | Out-Null
    $IsNumeric = 1 }catch{ $IsNumeric = 0 }

    if($IsNumeric){ 
        $IsNumeric = 1
        if($Boolean) { $Isnumeric = $True }
    }else{ 
        $IsNumeric = 0
        if($Boolean) { $IsNumeric = $False }
    }
    
    if($PSBoundParameters['Verbose'] -and $IsNumeric) { 
    Write-Verbose "True" }else{ Write-Verbose "False" }
    
   
    return $IsNumeric
}

END {}

} #end of #function IsNumeric