What Is Azure AD Hybrid Join?
Azure AD Hybrid Join is a device registration state where a Windows computer is simultaneously joined to your on-premises Active Directory domain AND registered in Azure Active Directory. This dual membership enables Conditional Access policies, Windows Hello for Business, seamless SSO to cloud resources, and Intune co-management from a single device that was originally on-premises domain joined. On Windows Server 2019, the Hybrid Join process is configured through Azure AD Connect’s device synchronization feature and Group Policy.
Prerequisites
# Prerequisites checklist:
# 1. Azure AD Connect 1.4+ installed and syncing (see post231)
# 2. Windows 10 1607+ or Windows Server 2016+ clients (for automatic registration)
# 3. Azure AD Premium P1 license OR Microsoft 365 license for Conditional Access
# 4. Users must be synced to Azure AD
# 5. SCP (Service Connection Point) must be configured in AD (done by AAD Connect)
# Verify Azure AD Connect version
$adSyncModule = Get-Module -ListAvailable ADSync
$adSyncModule.Version
# Verify users are synced to Azure AD
Connect-AzureAD
$syncedUsers = Get-AzureADUser -Filter "onPremisesSyncEnabled eq true" | Measure-Object
Write-Output "Synced users: $($syncedUsers.Count)"
# Verify device write-back is enabled in AAD Connect
# AAD Connect > Configure > Configure device options > Hybrid Azure AD join
Step 1: Configure Azure AD Connect for Hybrid Join
# Run the Azure AD Connect Configuration Wizard
# Start > Azure AD Connect > Configure > Configure device options > Hybrid Azure AD join
# Via PowerShell (AAD Connect must already be configured)
Import-Module ADSync
# Check current device sync settings
Get-ADSyncScheduler
Get-ADSyncConnector | Select-Object Name, Type
# Enable device synchronization in AAD Connect
# This creates the Service Connection Point (SCP) in AD and enables
# device object synchronization to Azure AD
# Verify the SCP was created after running AAD Connect wizard
$scp = Get-ADObject -Filter { objectClass -eq 'serviceConnectionPoint' } `
-SearchBase 'CN=Configuration,DC=corp,DC=local' `
-Properties keywords |
Where-Object { $_.keywords -like '*AzureAD*' }
$scp | Select-Object Name, DistinguishedName, keywords
# keywords should contain:
# azureADName:
# azureADId:
Step 2: Configure Managed Domains (PHS or PTA Authentication)
For Hybrid Join with Password Hash Sync or Pass-Through Authentication (non-federated domains), Windows 10/11 and Server 2016+ devices use the SCP to discover the tenant and register automatically. No additional AD FS configuration is required:
# Verify the domain authentication type in Azure AD
Connect-MsolService
Get-MsolDomain | Select-Object Name, Authentication
# For managed domains (Authentication = Managed), the automatic Hybrid Join
# process works via the Device Registration Service in Azure AD directly.
# Verify SCP keywords are correct
$scpKeywords = $scp.keywords
$tenantId = ($scpKeywords | Where-Object { $_ -like 'azureADId*' }) -replace 'azureADId:', ''
$tenantName = ($scpKeywords | Where-Object { $_ -like 'azureADName*' }) -replace 'azureADName:', ''
Write-Output "Tenant ID: $tenantId"
Write-Output "Tenant Name: $tenantName"
# Test SCP discovery from a domain member
dsregcmd /status
# Look for: AzureAdJoined, DomainJoined, and SCP detection in output
Step 3: Configure Group Policy for Automatic Device Registration
A GPO is required to configure the automatic device registration task on Windows 10/Server 2016+ domain members:
# Create GPO for Hybrid Azure AD Join
$gpo = New-GPO -Name 'Azure AD Hybrid Join Registration'
New-GPLink -Name 'Azure AD Hybrid Join Registration' `
-Target 'OU=Computers,DC=corp,DC=local'
# Configure the GPO setting via registry (the GPO path is:)
# Computer Configuration > Administrative Templates > Windows Components >
# Device Registration > Register domain joined computers as devices
# Set to: Enabled
# Or configure via Set-GPRegistryValue
Set-GPRegistryValue -Name 'Azure AD Hybrid Join Registration' `
-Key 'HKLMSOFTWAREPoliciesMicrosoftWindowsWorkplaceJoin' `
-ValueName 'autoWorkplaceJoin' `
-Type DWord -Value 1
# The automatic registration scheduled task will run on the next policy refresh
# Task path: MicrosoftWindowsWorkplace Join
# Task name: Automatic-Device-Join
# Force GPO update on test machines
Invoke-GPUpdate -Computer 'WORKSTATION01' -RandomDelayInMinutes 0
# Trigger the registration task manually (for testing)
Invoke-Command -ComputerName WORKSTATION01 -ScriptBlock {
Start-ScheduledTask -TaskPath 'MicrosoftWindowsWorkplace Join' `
-TaskName 'Automatic-Device-Join'
}
Step 4: Verify Hybrid Join Status on a Device
# Run on the target Windows Server 2019 or Windows 10 device
dsregcmd /status
# Expected output for a successfully Hybrid-joined device:
# +----------------------------------------------------------------------+
# | Device State |
# +----------------------------------------------------------------------+
# AzureAdJoined : YES
# DomainJoined : YES
# ...
# | SSO State |
# +----------------------------------------------------------------------+
# AzureAdPrt : YES &1
$azureAdJoined = ($dsreg | Select-String 'AzureAdJoined').ToString().Trim()
$domainJoined = ($dsreg | Select-String 'DomainJoined').ToString().Trim()
Write-Output $azureAdJoined
Write-Output $domainJoined
# Verify in Azure AD portal
# Azure AD > Devices > All devices
# Look for the device with Join Type = "Hybrid Azure AD joined"
Step 5: Configure Conditional Access to Require Hybrid Join
# Azure AD Conditional Access is configured in the Azure portal
# Azure AD > Security > Conditional Access > New policy
# PowerShell (using AzureAD preview module)
Install-Module AzureADPreview -Force
Connect-AzureAD
# Create a Conditional Access policy requiring Hybrid Joined device
$conditions = New-Object -TypeName Microsoft.Open.MSGraph.Model.ConditionalAccessConditionSet
$conditions.Applications = New-Object -TypeName Microsoft.Open.MSGraph.Model.ConditionalAccessApplicationCondition
$conditions.Applications.IncludeApplications = 'All'
$conditions.Users = New-Object -TypeName Microsoft.Open.MSGraph.Model.ConditionalAccessUserCondition
$conditions.Users.IncludeGroups = @((Get-AzureADGroup -SearchString 'All Staff').ObjectId)
$conditions.Platforms = New-Object -TypeName Microsoft.Open.MSGraph.Model.ConditionalAccessPlatformCondition
$conditions.Platforms.IncludePlatforms = 'Windows'
$controls = New-Object -TypeName Microsoft.Open.MSGraph.Model.ConditionalAccessGrantControls
$controls._Operator = 'OR'
$controls.BuiltInControls = 'DomainJoinedDevice' # Requires Hybrid Join
New-AzureADMSConditionalAccessPolicy `
-DisplayName 'Require Hybrid Join for Windows' `
-State 'Enabled' `
-Conditions $conditions `
-GrantControls $controls
Troubleshooting Hybrid Join Failures
# Check automatic registration task output
Get-ScheduledTaskInfo -TaskPath 'MicrosoftWindowsWorkplace Join' `
-TaskName 'Automatic-Device-Join' | Select-Object LastRunTime, LastTaskResult
# Common error codes and meanings:
# 0x801C0003 - Device not found in Azure AD (sync not yet completed)
# 0x801C0012 - Certificate not trusted (check CA configuration)
# 0x80090016 - Keyset does not exist (TPM issue)
# 0x801C000B - Token binding failed
# View device registration event log
Get-WinEvent -LogName 'Microsoft-Windows-AAD/Operational' -MaxEvents 50 |
Where-Object { $_.LevelDisplayName -in 'Error','Warning' } |
Select-Object TimeCreated, Id, Message
# Check if the device exists in Azure AD after sync
Connect-AzureAD
Get-AzureADDevice -Filter "displayName eq 'WORKSTATION01'" |
Select-Object DisplayName, TrustType, IsCompliant, IsManaged, ApproximateLastLogonTimeStamp
# Force a full device sync in AAD Connect
Start-ADSyncSyncCycle -PolicyType Initial
Enabling Co-Management with Intune
# After Hybrid Join, enable co-management (SCCM + Intune)
# Requires Microsoft Endpoint Configuration Manager
# Or enroll in Intune without SCCM via autopilot
# The device will receive Intune MDM policy after Hybrid Join completes
# Verify MDM enrollment
Get-ScheduledTask -TaskPath 'MicrosoftWindowsEnterpriseMgmt' |
Select-Object TaskName, State
# Check MDM enrollment status
dsregcmd /status | Select-String -Pattern 'MDM|Intune'
# View Intune enrollment event log
Get-WinEvent -LogName 'Microsoft-Windows-DeviceManagement-Enterprise-Diagnostics-Provider/Admin' `
-MaxEvents 20 | Select-Object TimeCreated, Id, Message
Conclusion
Azure AD Hybrid Join on Windows Server 2019 bridges on-premises Active Directory and Azure Active Directory to provide a unified identity for domain-joined devices in the cloud era. Configured through Azure AD Connect’s SCP registration and a Group Policy for automatic device registration, Hybrid Join enables Conditional Access enforcement, seamless SSO to Microsoft 365 and Azure applications, and a path to Intune co-management—all without disrupting existing on-premises domain workflows.