Grundlegendes zu Microsoft Entra Connect 1.4.xx.x und zum Verschwinden des Geräts

Mit der Implementierung von Version 1.4.xx.x von Microsoft Entra Connect sehen Kunden möglicherweise, dass einige oder alle ihre Windows-Geräte aus Microsoft Entra ID verschwinden. Dies ist kein Grund zur Sorge, da diese Geräteidentitäten nicht von Microsoft Entra ID während der Autorisierung für bedingten Zugriff verwendet werden. Diese Änderung löscht keine Windows-Geräte, die ordnungsgemäß bei Microsoft Entra ID für Microsoft Entra Hybrid join registriert wurden.

Wenn das Löschen von Geräteobjekten in Microsoft Entra ID den Schwellenwert für die Exportlöschung überschreitet, lassen Sie die Löschungen zu. Vorgehensweise: Zulassen von Löschvorgängen, wenn sie den Löschschwellenwert überschreiten

Hintergrund

Windows-Geräte, die als Microsoft Entra hybrid eingebunden registriert sind, werden in Microsoft Entra ID als Geräteobjekte dargestellt und können für bedingten Zugriff verwendet werden. Windows 10 Geräte werden über Microsoft Entra Connect mit der Cloud synchronisiert, während heruntergefahrene Windows-Geräte direkt über Active Directory-Verbunddienste (AD FS) (AD FS) oder nahtloses einmaliges Anmelden registriert werden.

Windows 10-Geräte

Nur Windows 10 Geräte mit einem bestimmten userCertificate-Attributwert, der von Microsoft Entra Hybridjoin konfiguriert wird, sollten von Microsoft Entra Connect mit der Cloud synchronisiert werden. In früheren Versionen von Microsoft Entra Connect wurde diese Anforderung nicht streng erzwungen, und unnötige Geräteobjekte wurden Microsoft Entra ID hinzugefügt. Solche Geräte in Microsoft Entra ID immer den Status "Ausstehend" beibehalten, da diese Geräte nicht für die Registrierung bei Microsoft Entra ID vorgesehen waren.

Diese Version von Microsoft Entra Connect synchronisiert nur Windows 10 Geräte, die ordnungsgemäß so konfiguriert sind, dass sie Microsoft Entra hybrid eingebunden sind. Windows 10 Geräteobjekte ohne die Microsoft Entra joinspezifische userCertificate werden aus Microsoft Entra ID entfernt.

Down-Level Windows-Geräte

Microsoft Entra Connect sollte windows-Geräte auf keinem Fall synchronisiert werden. Alle Geräte in Microsoft Entra ID, die zuvor falsch synchronisiert wurden, werden aus Microsoft Entra ID gelöscht. Wenn Microsoft Entra Connect versucht, heruntergefahrene Windows-Geräte zu löschen, ist das Gerät nicht das Gerät, das von microsoft Workplace Join für nicht Windows 10 Computer MSI erstellt wurde, und kann von keinem anderen Microsoft Entra-Feature genutzt werden.

Einige Kunden müssen möglicherweise die Vorgehensweise: Planen Ihrer Microsoft Entra Hybrid Join-Implementierung erneut aufrufen, um ihre Windows-Geräte ordnungsgemäß zu registrieren und sicherzustellen, dass diese Geräte am gerätebasierten bedingten Zugriff teilnehmen können.

Wie kann ich überprüfen, welche Geräte mit diesem Update gelöscht werden?

Um zu überprüfen, welche Geräte gelöscht werden, verwenden Sie das PowerShell-Skript im PowerShell-Zertifikatberichtsskript.

Dieses Skript generiert einen Bericht zu Zertifikaten, die in Active Directory-Computerobjekten gespeichert sind, und insbesondere zu Zertifikaten, die von der Microsoft Entra Hybrid Join-Funktion ausgestellt wurden.

Das Skript überprüft auch die Zertifikate, die in der UserCertificate-Eigenschaft eines Computer-Objekts in AD vorhanden sind. Für jedes nicht abgelaufene Zertifikat, das vorhanden ist, überprüft das Skript, ob das Zertifikat für die Microsoft Entra HybridJoin-Funktion ausgestellt wurde, z. BSubject Name matches CN={ObjectGUID}. .

Vor diesem Update wurde Microsoft Entra Connect mit Microsoft Entra jedem Computer synchronisiert, der mindestens ein gültiges Zertifikat enthielt. Ab Microsoft Entra Connect Version 1.4 identifiziert das Synchronisierungsmodul Microsoft Entra Hybrid join-Zertifikate und verwendet den Cloudfilterfilter, um zu verhindern, dass das Computerobjekt mit Microsoft Entra ID synchronisiert wird, es sei denn, es gibt eine gültige Microsoft Entra Hybrid Join-Zertifikat.

Microsoft Entra Geräte, die zuvor mit AD synchronisiert wurden, aber nicht über ein gültiges Microsoft Entra Hybrid Join-Zertifikat verfügen, werden vom Synchronisierungsmodul mithilfe des Filters CloudFiltered=TRUEgelöscht.

PowerShell-Zertifikatberichtsskript

<#

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)"
   }

Nächste Schritte

Kontaktieren Sie uns für Hilfe

Wenn Sie Fragen haben oder Hilfe mit Ihren Azure-Gutschriften benötigen, dann erstellen Sie beim Azure-Support eine Support-Anforderung oder fragen Sie den Azure Community-Support. Sie können auch Produktfeedback an die Azure Feedback Community senden.