Dela via


Förstå Microsoft Entra Connect 1.4.xx.x och enhetens försvinnande

Med implementeringen av version 1.4.xx.x av Microsoft Entra Connect kan kunder se att vissa eller alla deras Windows-enheter försvinner från Microsoft Entra ID. Detta är inte en anledning till problem eftersom dessa enhetsidentiteter inte används av Microsoft Entra-ID under auktorisering av villkorsstyrd åtkomst . Den här ändringen tar inte bort några Windows-enheter som har registrerats korrekt med Microsoft Entra-ID för Microsoft Entra-hybridanslutning.

Om du ser att borttagningen av enhetsobjekt i Microsoft Entra-ID:t överskrider tröskelvärdet för exportborttagning tillåter du att borttagningarna går igenom. Anvisningar: Tillåt att borttagningar flödar när de överskrider tröskelvärdet för borttagning

Bakgrund

Windows-enheter som registrerats som Microsoft Entra Hybrid-anslutna representeras i Microsoft Entra-ID som enhetsobjekt, och de kan användas för villkorsstyrd åtkomst. Windows 10-enheter synkroniseras till molnet via Microsoft Entra Connect, medan Windows-enheter på nednivå registreras direkt med antingen Active Directory Federation Services (AD FS) (AD FS) eller sömlös enkel inloggning.

Windows 10-enheter

Endast Windows 10-enheter med ett specifikt userCertificate-attributvärde som konfigureras av Microsoft Entra-hybridanslutning ska synkroniseras till molnet av Microsoft Entra Connect. I tidigare versioner av Microsoft Entra Connect tillämpades inte detta krav strikt och onödiga enhetsobjekt lades till i Microsoft Entra-ID. Sådana enheter i Microsoft Entra-ID:t förblev alltid i tillståndet "väntande", eftersom dessa enheter inte var avsedda att registreras med Microsoft Entra-ID.

Den här versionen av Microsoft Entra Connect synkroniserar endast Windows 10-enheter som är korrekt konfigurerade för att vara Microsoft Entra-hybridanslutna. Windows 10-enhetsobjekt utan Microsoft Entra-kopplingsspecifik användareCertifikat tas bort från Microsoft Entra-ID.

Windows-enheter på nednivå

Microsoft Entra Connect bör aldrig synkronisera Windows-enheter på nednivå. Alla enheter i Microsoft Entra-ID som tidigare synkroniserats felaktigt tas bort från Microsoft Entra-ID. Om Microsoft Entra Connect försöker ta bort Windows-enheter på nednivå är enheten inte den som skapades av Microsoft Workplace Join för datorer som inte är Windows 10-datorer MSI, och den kan inte användas av någon annan Microsoft Entra-funktion.

Vissa kunder kan behöva gå tillbaka till How To: Plan your Microsoft Entra hybrid join implementation to register their Windows devices correctly and ensure that those devices can participate in device-based Conditional Access.Some customers might need to revisit How To: Plan your Microsoft Entra hybrid join implementation to register their Windows devices correctly and ensure that those devices can participate in device-based Conditional Access.

Hur kan jag kontrollera vilka enheter som tas bort med den här uppdateringen?

Om du vill kontrollera vilka enheter som tas bort använder du PowerShell-skriptet i PowerShell-certifikatrapportskriptet.

Det här skriptet genererar en rapport om certifikat som lagras i Active Directory-datorobjekt och specifikt certifikat som utfärdats av hybridanslutningsfunktionen i Microsoft Entra.

Skriptet kontrollerar även certifikaten som finns i egenskapen UserCertificate för ett datorobjekt i AD. För varje certifikat som inte har upphört att gälla kontrollerar skriptet om certifikatet har utfärdats för hybridanslutningsfunktionen i Microsoft Entra. till exempel Subject Name matches CN={ObjectGUID}.

Före den här uppdateringen synkroniserar Microsoft Entra Connect till Microsoft Entra alla datorer som innehåller minst ett giltigt certifikat. Från och med Microsoft Entra Connect version 1.4 identifierar synkroniseringsmotorn Microsoft Entra-hybridanslutningscertifikat och använder cloudfilterfiltret för att förhindra att datorobjektet synkroniseras med Microsoft Entra-ID om det inte finns ett giltigt Microsoft Entra-hybridanslutningscertifikat.

Microsoft Entra-enheter som tidigare synkroniserats med AD, men som inte har ett giltigt Microsoft Entra-hybridanslutningscertifikat, tas bort av synkroniseringsmotorn med hjälp av filtret CloudFiltered=TRUE.

PowerShell-certifikatrapportskript

<#

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ästa steg

Kontakta oss för att få hjälp

Om du har frågor eller behöver hjälp skapar du en supportförfrågan eller frågar Azure community support. Du kan också skicka produktfeedback till Azure-feedbackcommunityn.