Powershell/Private/WindowsMDM/Get-WindowsMDMProvider.ps1

function Get-WindowsMDMProvider {
    [OutputType([System.Collections.ArrayList])]
    [CmdletBinding()]
    param (
        [Parameter(Mandatory = $false)]
        [string]$MdmEnrollmentKey = 'HKLM:\SOFTWARE\Microsoft\Enrollments\'
    )
    begin {
        Write-ToLog "Checking for MDM Enrollment Key at: $MdmEnrollmentKey" -Step "Get-WindowsMDMProvider" -Level Verbose
        if (!(Test-Path $MdmEnrollmentKey)) {
            Write-ToLog "MDM enrollment key: '$MdmEnrollmentKey' not found." -Level Warning -Step "Get-WindowsMDMProvider"
            return # Exit the function if the base key doesn't exist
        }

        $enrollmentGuids = Get-ChildItem $MdmEnrollmentKey -ErrorAction SilentlyContinue
        if (!$enrollmentGuids) {
            Write-ToLog "MDM enrollment key exists at '$MdmEnrollmentKey', but no specific enrollment GUIDs (subkeys) were found under it." -Step "Get-WindowsMDMProvider" -Level Verbose
            return # Exit if no subkeys
        }
        Write-ToLog "MDM Enrollment Keys Found. Checking for ProviderID and UPN..." -Step "Get-WindowsMDMProvider" -Level Verbose
        # create a list to return results
        $enrollmentList = New-Object System.Collections.ArrayList
    }
    process {
        foreach ($guidItem in $enrollmentGuids) {
            if ($guidItem.PSChildName -match '^[A-Fa-f0-9]{8}-([A-Fa-f0-9]{4}-){3}[A-Fa-f0-9]{12}$') {
                $enrollmentPropertiesPath = $guidItem.PSPath
                $providerID = (Get-ItemProperty -Path $enrollmentPropertiesPath -Name 'ProviderID' -ErrorAction SilentlyContinue).ProviderID
                $upn = (Get-ItemProperty -Path $enrollmentPropertiesPath -Name 'UPN' -ErrorAction SilentlyContinue).UPN

                if ($providerID -and $upn) {
                    Write-ToLog "Found ProviderID '$providerID' and UPN '$upn' for enrollment $($guidItem.PSChildName)." -Step "Get-WindowsMDMProvider" -Level Verbose
                    # Output the object
                    $enrollmentList.Add([PSCustomObject]@{
                            EnrollmentGUID = $guidItem.PSChildName
                            ProviderID     = $providerID
                            UPN            = $upn
                        }) | Out-Null
                }
            } else {
                Write-ToLog "Skipping non-GUID subkey: $($guidItem.PSChildName)" -Step "Get-WindowsMDMProvider" -Level Verbose
            }
        }
    }
    end {
        return $enrollmentList
    }
}