Public/Test-RegistryValue.ps1

function global:Test-RegistryValue
{
    <#
        .EXTERNALHELP HelperFunctions.psm1-Help.xml
    #>

    
    [CmdletBinding()]
    [OutputType([System.Boolean])]
    param
    (
        [Parameter(Mandatory = $true,
                 ValueFromPipeline = $true,
                 ValueFromPipelineByPropertyName = $true,
                 Position = 0)]
        [Alias('RegistryKey')]
        [String]$Path,
        [Parameter(Mandatory = $true,
                 Position = 1)]
        [Alias('Name')]
        [String]$Value,
        [Parameter(Mandatory = $false,
                 Position = 2)]
        [Switch]$PassThru,
        [Parameter(Mandatory = $false,
                 Position = 3)]
        [System.Management.Automation.PSCredential]$Credential
    )
    
    begin
    {
        # Enable TLS 1.2 and 1.3
        try
        {
            #https://docs.microsoft.com/en-us/dotnet/api/system.net.securityprotocoltype?view=netcore-2.0#System_Net_SecurityProtocolType_SystemDefault
            if ($PSVersionTable.PSVersion.Major -lt 6 -and [Net.ServicePointManager]::SecurityProtocol -notmatch 'Tls12')
            {
                Write-Verbose -Message 'Adding support for TLS 1.2'
                [Net.ServicePointManager]::SecurityProtocol += [Net.SecurityProtocolType]::Tls12
            }
        }
        catch
        {
            Write-Warning -Message 'Adding TLS 1.2 to supported security protocols was unsuccessful.'
        }
        
        $localComputer = Get-CimInstance -ClassName CIM_ComputerSystem -Namespace 'root\CIMv2' -ErrorAction SilentlyContinue
        
        if (($localComputer.Caption -match "Windows 11") -eq $true)
        {
            try
            {
                #https://docs.microsoft.com/en-us/dotnet/api/system.net.securityprotocoltype?view=netcore-2.0#System_Net_SecurityProtocolType_SystemDefault
                if ($PSVersionTable.PSVersion.Major -lt 6 -and [Net.ServicePointManager]::SecurityProtocol -notmatch 'Tls13')
                {
                    Write-Verbose -Message 'Adding support for TLS 1.3'
                    [Net.ServicePointManager]::SecurityProtocol += [Net.SecurityProtocolType]::Tls13
                }
            }
            catch
            {
                Write-Warning -Message 'Adding TLS 1.3 to supported security protocols was unsuccessful.'
            }
        }
        elseif (($localComputer.Caption -match "Server 2022") -eq $true)
        {
            try
            {
                #https://docs.microsoft.com/en-us/dotnet/api/system.net.securityprotocoltype?view=netcore-2.0#System_Net_SecurityProtocolType_SystemDefault
                if ($PSVersionTable.PSVersion.Major -lt 6 -and [Net.ServicePointManager]::SecurityProtocol -notmatch 'Tls13')
                {
                    Write-Verbose -Message 'Adding support for TLS 1.3'
                    [Net.ServicePointManager]::SecurityProtocol += [Net.SecurityProtocolType]::Tls13
                }
            }
            catch
            {
                Write-Warning -Message 'Adding TLS 1.3 to supported security protocols was unsuccessful.'
            }
        }
    }
    process
    {
        if ((Test-Path -Path $Path -PathType Container) -eq $true)
        {
            if (($PSBoundParameters.ContainsKey('Credential')) -and ($null -ne $PSBoundParameters["Credential"]))
            {
                $Key = Get-Item -LiteralPath $Path -Credential $Credential
            }
            else
            {
                $Key = Get-Item -LiteralPath $Path
            }
            
            if ($null -ne $Key.GetValue($Name, $null))
            {
                if ($PSBoundParameters.ContainsKey("PassThru"))
                {
                    if (($PSBoundParameters.ContainsKey('Credential')) -and ($null -ne $PSBoundParameters["Credential"]))
                    {
                        Get-ItemProperty -Path $Path -Name $Name -Credential $Credential
                    }
                    else
                    {
                        Get-ItemProperty -Path $Path -Name $Name
                    }
                }
                else
                {
                    $true
                }
            }
            else
            {
                $false
            }
        }
        else
        {
            $false
        }
    }
    end { }
} #End function Test-RegistryValue