Public/Entra/Hybrid/Get-EntraIDHybridJoinComputerRegistryKey.ps1

<#
    .SYNOPSIS
    Retrieves Entra ID Hybrid Join registry keys from the local computer.
 
    .DESCRIPTION
    This function reads registry keys from HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\CDJ\AAD
    to retrieve TenantId, TenantName, and other hybrid join configuration values.
 
    .EXAMPLE
    Get-EntraIDHybridJoinComputerRegistryKey
 
    Returns an object containing TenantId, TenantName, and other registry keys if present.
 
    .NOTES
    Returns a PSCustomObject with ComputerName, TenantId, TenantName, and OtherKeys properties.
    Properties will be null if the registry path or values do not exist.
#>


function Get-EntraIDHybridJoinComputerRegistryKey {

    $path = 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\CDJ\AAD'

    $object = [PSCustomObject][ordered]@{
        ComputerName = $env:COMPUTERNAME
        TenantId     = $null
        TenantName   = $null
        OtherKeys    = ''
    }

    if (-not (Test-Path -Path $path)) {
        return $object
    }

    try {
        $reg = Get-ItemProperty -Path $path -ErrorAction Stop
    }
    catch {
        return $object
    }

    $valueProps = $reg.PSObject.Properties | Where-Object { $_.Name -notmatch '^PS' } | Select-Object -ExpandProperty Name

    if ($valueProps -contains 'TenantId') { $object.TenantId = $reg.TenantId }
    if ($valueProps -contains 'TenantName') { $object.TenantName = $reg.TenantName }

    $otherKeys = $valueProps | Where-Object { $_ -notin @('TenantId', 'TenantName') }
    if ($otherKeys) {
        $object.OtherKeys = ($otherKeys | ForEach-Object {
                $value = $reg.$_
                if ($value -is [array]) {
                    $value = $value -join ','
                }
                "$_=$value"
            }) -join '|'
    }

    return $object
}