Private/Get-IACDirectoryDevice.ps1

function Get-IACDirectoryDevice {
    [CmdletBinding()]
    param(
        [Parameter(Mandatory)]
        [string]$AzureADDeviceId
    )

    try {
        $escapedId = $AzureADDeviceId -replace "'", "''"
        $encodedFilter = [uri]::EscapeDataString("deviceId eq '$escapedId'")
        $uri = "$script:GraphEndpoint/beta/devices?`$filter=$encodedFilter&`$select=id,displayName,deviceId"
        $devices = @((Invoke-IACGraphRequest -Uri $uri -Method Get).value)
        if ($devices.Count -eq 1 -and $devices[0].id) {
            return [PSCustomObject]@{ Success = $true; Device = $devices[0]; Reason = $null }
        }
        if ($devices.Count -gt 1) {
            return [PSCustomObject]@{ Success = $false; Device = $null; Reason = "Multiple Entra devices use deviceId '$AzureADDeviceId'." }
        }
        return [PSCustomObject]@{ Success = $false; Device = $null; Reason = "No Entra device maps to managedDevice.azureADDeviceId '$AzureADDeviceId'." }
    }
    catch {
        return [PSCustomObject]@{ Success = $false; Device = $null; Reason = "Entra device lookup failed: $($_.Exception.Message)" }
    }
}