Comprendre Microsoft Entra Connect 1.4.xx.x et la disparition de l’appareil

Avec l’implémentation de la version 1.4.xx.x de Microsoft Entra Connect, les clients peuvent voir tout ou partie de leurs appareils Windows disparaître de Microsoft Entra ID. Il ne s’agit pas d’un problème, car ces identités d’appareil ne sont pas utilisées par Microsoft Entra’ID lors de l’autorisation d’accès conditionnel. Cette modification ne supprime pas les appareils Windows qui ont été correctement inscrits avec l’ID Microsoft Entra pour Microsoft Entra jointure hybride.

Si vous voyez que la suppression d’objets d’appareil dans Microsoft Entra ID dépasse le seuil de suppression d’exportation, autorisez les suppressions. Procédure : autoriser le flux des suppressions lorsqu’elles dépassent le seuil de suppression

Contexte

Les appareils Windows inscrits comme Microsoft Entra joints hybrides sont représentés dans Microsoft Entra ID en tant qu’objets d’appareil et peuvent être utilisés pour l’accès conditionnel. Windows 10 appareils sont synchronisés avec le cloud via Microsoft Entra Connect, tandis que les appareils Windows de bas niveau sont inscrits directement à l’aide de Services ADFS (AD FS) ou de l’authentification unique transparente.

appareils Windows 10

Seuls les appareils Windows 10 avec une valeur d’attribut userCertificate spécifique configurée par Microsoft Entra jointure hybride doivent être synchronisés avec le cloud par Microsoft Entra Connect. Dans les versions précédentes de Microsoft Entra Connect, cette exigence n’était pas rigoureusement appliquée et des objets d’appareil inutiles ont été ajoutés à Microsoft Entra ID. Ces appareils dans Microsoft Entra ID sont toujours restés dans l’état « en attente », car ces appareils n’étaient pas destinés à être inscrits avec l’ID Microsoft Entra.

Cette version de Microsoft Entra Connect synchronise uniquement Windows 10 appareils correctement configurés pour être Microsoft Entra jointure hybride. Windows 10 objets d’appareil sans Microsoft Entra jointure spécifique userCertificate seront supprimés de l’ID de Microsoft Entra.

Down-Level appareils Windows

Microsoft Entra Connect ne doit jamais synchroniser les appareils Windows de bas niveau. Tous les appareils dans Microsoft Entra ID précédemment synchronisés de manière incorrecte seront supprimés de Microsoft Entra ID. Si Microsoft Entra Connect tente de supprimer des appareils Windows de bas niveau, l’appareil n’est pas celui qui a été créé par microsoft Workplace Join pour les ordinateurs non Windows 10 MSI, et il ne peut pas être consommé par une autre fonctionnalité Microsoft Entra.

Certains clients devront peut-être revoir Comment : planifier votre implémentation de jointure hybride Microsoft Entra pour inscrire correctement leurs appareils Windows et s’assurer que ces appareils peuvent participer à l’accès conditionnel basé sur les appareils.

Comment puis-je vérifier quels appareils sont supprimés avec cette mise à jour ?

Pour vérifier quels appareils sont supprimés, utilisez le script PowerShell dans le script de rapport de certificat PowerShell.

Ce script génère un rapport sur les certificats stockés dans les objets Ordinateur Active Directory, et en particulier les certificats émis par la fonctionnalité de jointure hybride Microsoft Entra.

Le script vérifie également les certificats présents dans la propriété UserCertificate d’un objet Computer dans AD. Pour chaque certificat non expiré présent, le script vérifie si le certificat a été émis ou non pour la fonctionnalité de jointure hybride Microsoft Entra, par exemple. Subject Name matches CN={ObjectGUID}

Avant cette mise à jour, Microsoft Entra Connect se synchronise avec Microsoft Entra tout ordinateur contenant au moins un certificat valide. À compter de Microsoft Entra Connect version 1.4, le moteur de synchronisation identifie Microsoft Entra certificats de jointure hybride et utilise le filtre cloudfilter pour empêcher la synchronisation de l’objet ordinateur avec Microsoft Entra’ID, sauf s’il existe un Microsoft Entra hybride valide joindre un certificat.

Microsoft Entra appareils précédemment synchronisés avec AD, mais qui n’ont pas de certificat de jointure hybride Microsoft Entra valide, seront supprimés par le moteur de synchronisation à l’aide du filtre CloudFiltered=TRUE.

Script de rapport de certificat PowerShell

<#

Filename:    Export-ADSyncToolsHybridAzureADjoinCertificateReport.ps1.

DISCLAIMER:
Copyright (c) Microsoft Corporation. All rights reserved. This script is made available to you without any express, implied or statutory warranty, not even the implied warranty of  merchantability or fitness for a particular purpose, or the warranty of title or non-infringement. The entire risk of the use or the results from the use of this script remains with you.
.Synopsis
This script generates a report about certificates stored in Active Directory Computer objects, specifically, 
certificates issued by the Microsoft Entra hybrid join feature.
.DESCRIPTION
It checks the certificates present in the UserCertificate property of a Computer object in AD and, for each 
non-expired certificate present, validates if the certificate was issued for the Microsoft Entra hybrid join feature 
(i.e. Subject Name matches CN={ObjectGUID}).
Before, Microsoft Entra Connect would synchronize to Microsoft Entra ID any Computer that contained at least one valid 
certificate but starting on Microsoft Entra Connect version 1.4, the sync engine can identify Hybrid 
Microsoft Entra join certificates and will 'cloudfilter' the computer object from synchronizing to Microsoft Entra ID unless 
there's a valid Microsoft Entra hybrid join certificate.
Microsoft Entra Device objects that were already synchronized to AD but do not have a valid Microsoft Entra hybrid join 
certificate will be deleted (CloudFiltered=TRUE) by the sync engine.
.EXAMPLE
.\Export-ADSyncToolsHybridAzureADjoinCertificateReport.ps1 -DN 'CN=Computer1,OU=SYNC,DC=Fabrikam,DC=com'
.EXAMPLE
.\Export-ADSyncToolsHybridAzureADjoinCertificateReport.ps1 -OU 'OU=SYNC,DC=Fabrikam,DC=com' -Filename "MyHybridAzureADjoinReport.csv" -Verbose

#>
   [CmdletBinding()]
   Param
   (
       # Computer DistinguishedName
       [Parameter(ParameterSetName='SingleObject',
               Mandatory=$true,
               ValueFromPipelineByPropertyName=$true,
               Position=0)]
       [String]
       $DN,

       # AD OrganizationalUnit
       [Parameter(ParameterSetName='MultipleObjects',
               Mandatory=$true,
               ValueFromPipelineByPropertyName=$true,
               Position=0)]
       [String]
       $OU,

       # Output CSV filename (optional)
       [Parameter(Mandatory=$false,
               ValueFromPipelineByPropertyName=$false,
               Position=1)]
       [String]
       $Filename

   )

   # Generate Output filename if not provided
   If ($Filename -eq "")
   {
       $Filename = [string] "$([string] $(Get-Date -Format yyyyMMddHHmmss))_ADSyncAADHybridJoinCertificateReport.csv"
   }
   Write-Verbose "Output filename: '$Filename'"
   
   # Read AD object(s)
   If ($PSCmdlet.ParameterSetName -eq 'SingleObject')
   {
       $directoryObjs = @(Get-ADObject $DN -Properties UserCertificate)
       Write-Verbose "Starting report for a single object '$DN'"
   }
   Else
   {
       $directoryObjs = Get-ADObject -Filter { ObjectClass -like 'computer' } -SearchBase $OU -Properties UserCertificate
       Write-Verbose "Starting report for $($directoryObjs.Count) computer objects in OU '$OU'"
   }

   Write-Host "Processing $($directoryObjs.Count) directory object(s). Please wait..."
   # Check Certificates on each AD Object
   $results = @()
   ForEach ($obj in $directoryObjs)
   {
       # Read UserCertificate multi-value property
       $objDN = [string] $obj.DistinguishedName
       $objectGuid = [string] ($obj.ObjectGUID).Guid
       $userCertificateList = @($obj.UserCertificate)
       $validEntries = @()
       $totalEntriesCount = $userCertificateList.Count
       Write-verbose "'$objDN' ObjectGUID: $objectGuid"
       Write-verbose "'$objDN' has $totalEntriesCount entries in UserCertificate property."
       If ($totalEntriesCount -eq 0)
       {
           Write-verbose "'$objDN' has no Certificates - Skipped."
           Continue
       }

       # Check each UserCertificate entry and build array of valid certs
       ForEach($entry in $userCertificateList)
       {
           Try
           {
               $cert = [System.Security.Cryptography.X509Certificates.X509Certificate2] $entry
           }
           Catch
           {
               Write-verbose "'$objDN' has an invalid Certificate!"
               Continue
           }
           Write-verbose "'$objDN' has a Certificate with Subject: $($cert.Subject); Thumbprint:$($cert.Thumbprint)."
           $validEntries += $cert

       }
       
       $validEntriesCount = $validEntries.Count
       Write-verbose "'$objDN' has a total of $validEntriesCount certificates (shown above)."
       
       # Get non-expired Certs (Valid Certificates)
       $validCerts = @($validEntries | Where-Object {$_.NotAfter -ge (Get-Date)})
       $validCertsCount = $validCerts.Count
       Write-verbose "'$objDN' has $validCertsCount valid certificates (not-expired)."

       # Check for Microsoft Entra hybrid join Certificates
       $hybridJoinCerts = @()
       $hybridJoinCertsThumbprints = [string] "|"
       ForEach ($cert in $validCerts)
       {
           $certSubjectName = $cert.Subject
           If ($certSubjectName.StartsWith($("CN=$objectGuid")) -or $certSubjectName.StartsWith($("CN={$objectGuid}")))
           {
               $hybridJoinCerts += $cert
               $hybridJoinCertsThumbprints += [string] $($cert.Thumbprint) + '|'
           }
       }

       $hybridJoinCertsCount = $hybridJoinCerts.Count
       if ($hybridJoinCertsCount -gt 0)
       {
           $cloudFiltered = 'FALSE'
           Write-verbose "'$objDN' has $hybridJoinCertsCount Microsoft Entra hybrid join Certificates with Thumbprints: $hybridJoinCertsThumbprints (cloudFiltered=FALSE)"
       }
       Else
       {
           $cloudFiltered = 'TRUE'
           Write-verbose "'$objDN' has no Microsoft Entra hybrid join Certificates (cloudFiltered=TRUE)."
       }
       
       # Save results
       $r = "" | Select ObjectDN, ObjectGUID, TotalEntriesCount, CertsCount, ValidCertsCount, HybridJoinCertsCount, CloudFiltered
       $r.ObjectDN = $objDN
       $r.ObjectGUID = $objectGuid
       $r.TotalEntriesCount = $totalEntriesCount
       $r.CertsCount = $validEntriesCount
       $r.ValidCertsCount = $validCertsCount
       $r.HybridJoinCertsCount = $hybridJoinCertsCount
       $r.CloudFiltered = $cloudFiltered
       $results += $r
   }

   # Export results to CSV
   Try
   {        
       $results | Export-Csv $Filename -NoTypeInformation -Delimiter ';'
       Write-Host "Exported Hybrid Microsoft Entra Domain Join Certificate Report to '$Filename'.`n"
   }
   Catch
   {
       Throw "There was an error saving the file '$Filename': $($_.Exception.Message)"
   }

Étapes suivantes

Contactez-nous pour obtenir de l’aide

Pour toute demande ou assistance, créez une demande de support ou posez une question au support de la communauté Azure. Vous pouvez également envoyer des commentaires sur le produit à la communauté de commentaires Azure.