Private/Test-IsValidSID.ps1

function Test-IsValidSID {
    <#
        .SYNOPSIS
            Cmdlet will check if the input string is a valid SID.
 
        .DESCRIPTION
            Cmdlet will check if the input string is a valid SID.
 
            Cmdlet is intended as a diagnostic tool for input validation
 
        .PARAMETER ObjectSID
            A string representing the object Security Identifier (SID).
 
        .EXAMPLE
            Test-IsValidDN -ObjectSID 'S-1-5-21-2562450185-1914323539-512974444-1234'
 
        .NOTES
            https://pscustomobject.github.io/powershell/howto/identity%20management/PowerShell-Check-If-String-Is-A-DN/
            Version: 1.0
            DateModified: 08/Oct/2021
            LasModifiedBy: Vicente Rodriguez Eguibar
                vicente@eguibar.com
                Eguibar Information Technology S.L.
                http://www.eguibarit.com
    #>

    [CmdletBinding(ConfirmImpact = 'Low', SupportsShouldProcess = $false)]
    [OutputType([bool])]

    param
    (
        [Parameter(Mandatory = $true,
            ValueFromPipeline = $true,
            ValueFromPipelineByPropertyName = $true,
            ValueFromRemainingArguments = $true,
            HelpMessage = 'String to be validated as SID',
            Position = 0)]
        [ValidateNotNullOrEmpty()]
        [Alias('SID', 'SecurityIdentifier')]
        [string]
        $ObjectSID
    )

    Begin {

        ##############################
        # Module imports

        ##############################
        # Variables Definition
        # Ensure only account is used (remove anything before \ if exist)
        If ($PSBoundParameters['ObjectSID'] -contains '\') {
            $ObjectSID = ($PSBoundParameters['ObjectSID']).Split('\')[1]
        } else {
            # Account does not contains \
            $ObjectSID = $PSBoundParameters['ObjectSID']
        } #end If-Else

        [bool]$isValid = $false

    } #end Begin

    Process {
        # try RegEx
        Try {
            # Provide verbose output
            if ($PSCmdlet.MyInvocation.BoundParameters['Verbose']) {

                #if ($Variables.WellKnownSIDs -Contains $ObjectSID) {
                If ($Variables.WellKnownSIDs.Keys.Contains($ObjectSID)) {

                    Write-Verbose -Message ('The SID {0} is a WellKnownSid.' -f $ObjectSID)
                    $isValid = $true

                } elseIf ($ObjectSID -match $Constants.SidRegEx) {

                    Write-Verbose -Message ('The SID {0} is valid.' -f $ObjectSID)
                    $isValid = $true

                } else {

                    Write-Verbose -Message ('[WARNING] The SID {0} is NOT valid!.' -f $ObjectSID)
                    $isValid = $false

                } #end If-Else

            } #end If VERBOSE
        } catch {
            # Handle exceptions gracefully
            Write-Error -Message ('An error occurred when validating the SID: {0}' -f $_)
            Get-ErrorDetail -ErrorRecord $_
        } #end Try-Catch

        <#
        # try Native SID
        Try {
            # Perform the actual validation
            [System.Security.Principal.SecurityIdentifier]$sid = $Sid
            $isValid = $True
 
            # Provide verbose output
            if ($PSCmdlet.MyInvocation.BoundParameters['Verbose']) {
                Write-Verbose "objectSID validation result by [SecurityIdentifier]: $isValid"
            } #end If
 
        } catch {
            # Handle exceptions gracefully
            Write-Error "An error occurred on [SecurityIdentifier] comparison: $_"
        } #end Try-Catch
         #>

    } #end Process

    end {
        return $isValid
    } #end End

} #end Function