Private/Test-IfStringIsValidBase64.ps1

<#
.SYNOPSIS
    Function
  
.DESCRIPTION
    #************************************************************************************************************
    # Disclaimer
    #
    # This sample script is not supported under any Microsoft standard support program or service. This sample
    # script is provided AS IS without warranty of any kind. Microsoft further disclaims all implied warranties
    # including, without limitation, any implied warranties of merchantability or of fitness for a particular
    # purpose. The entire risk arising out of the use or performance of this sample script and documentation
    # remains with you. In no event shall Microsoft, its authors, or anyone else involved in the creation,
    # production, or delivery of this script be liable for any damages whatsoever (including, without limitation,
    # damages for loss of business profits, business interruption, loss of business information, or other
    # pecuniary loss) arising out of the use of or inability to use this sample script or documentation, even
    # if Microsoft has been advised of the possibility of such damages.
    #
    #************************************************************************************************************
 
#>

#region Test-IfStringIsValidBase64
function Test-IfStringIsValidBase64 
{
    param([string]$Text)

    # Check format: only valid Base64 characters and optional padding
    if ($Text -notmatch '^[A-Za-z0-9+/]*={0,2}$') 
    {
        return $false
    }

    # Length must be a multiple of 4
    if ($Text.Length % 4 -ne 0) 
    {
        return $false
    }

    # Length must be at least 16 cahrs long
    if ($Text.Length -lt 16) 
    {
        return $false
    }

    try 
    {
        [Convert]::FromBase64String($Text) | Out-Null
        return $true
    } 
    catch 
    {
        return $false
    }
}
#endregion