Functions/Test-IsNull.ps1

function Test-IsNull {
<#
.SYNOPSIS
    Given a passed [string] tests to determine if .IsNullOrEmpty() or .IsNullOrWhitespace(), with .IsNullOrEmpty() being the default
.DESCRIPTION
    Given a passed [string] tests to determine if .IsNullOrEmpty() or .IsNullOrWhitespace(), with .IsNullOrEmpty() being the default
.PARAMETER String
    A [string] that you wanted tested to see if Null or (Empty or WhiteSpace). In both parameter set names 'Empty' and 'WhiteSpace'
.PARAMETER Empty
    A switch to control if looking for .IsNullOrEmpty()
.PARAMETER WhiteSpace
    A switch to control if looking for .IsNullOrWhitespace()
.EXAMPLE
    Test-IsNull -String ''
 
    Would return
    $true
.EXAMPLE
    Test-IsNull -String ' '
 
    Would return
    $false
.EXAMPLE
    Test-IsNull -String " `t " -WhiteSpace
 
    Would return
    $true
.OUTPUTS
    'bool'
#>


    [CmdletBinding(DefaultParameterSetName = 'Empty', ConfirmImpact = 'Low')]
    [OutputType('bool')]
    [Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSReviewUnusedParameter','')]
    Param
    (

        [Parameter(Position=0,ParameterSetName = 'Empty')]
        [Parameter(Position=0,ParameterSetName = 'WhiteSpace')]
        [string] $String,

        [Parameter(ParameterSetName = 'Empty')]
        [switch] $Empty,

        [Parameter(ParameterSetName = 'WhiteSpace')]
        [switch] $WhiteSpace

    )
    #endregion parameter

    begin {
        Write-Verbose -Message "Starting [$($MyInvocation.Mycommand)]"
        Write-Verbose -Message "ParameterSetName [$($PsCmdlet.ParameterSetName)]"
    }

    process {
        switch ($PsCmdlet.ParameterSetName) {
            'Empty' {
                $ReturnVal = [string]::IsNullOrEmpty($String)
            }
            'WhiteSpace' {
                $ReturnVal = [string]::IsNullOrWhitespace($String)
            }
        }
    }

    end {
        Write-Output -InputObject $ReturnVal
        Write-Verbose -Message "Ending [$($MyInvocation.Mycommand)]"
    }
}