Microsoft Entra Bağlan: Hazırlama sunucusu ve olağanüstü durum kurtarma

Sunucu hazırlama modundayken yapılandırmada değişiklikler yapabilir ve sunucuyu etkin duruma getirmeden önce değişikliklerin önizlemesine bakabilirsiniz. Ayrıca tüm değişiklikleri üretim ortamınızda yapmadan önce bu değişikliklerin beklendiği gibi olduğunu doğrulamak için tam içeri aktarma ve tam eşitleme çalıştırmanıza olanak tanır.

Hazırlama modu

Hazırlama modu aşağıdakiler gibi çeşitli senaryolarda kullanılabilir:

  • Yüksek kullanılabilirlik.
  • Yeni yapılandırma değişikliklerini test etme ve dağıtma.
  • Yeni bir sunucu tanıtma ve eskisinin yetkisini alma.

Yükleme sırasında, hazırlama modunda olacak sunucuyu seçebilirsiniz. Bu eylem, sunucuyu içeri aktarma ve eşitleme için etkin hale getirir, ancak dışarı aktarma çalıştırmaz. Hazırlık modundaki bir sunucu, yükleme sırasında bu özellikleri seçmiş olsanız bile parola eşitleme veya parola geri yazma çalıştırmıyor. Hazırlama modunu devre dışı bırakırsanız, sunucu dışarı aktarmaya başlar, parola eşitlemeyi etkinleştirir ve parola geri yazmayı etkinleştirir.

Not

Parola Karması Eşitleme özelliğinin etkinleştirildiği bir Microsoft Entra Bağlan olduğunu varsayalım. Hazırlama modunu etkinleştirdiğinizde, sunucu şirket içi AD'den parola değişikliklerini eşitlemeyi durdurur. Hazırlama modunu devre dışı bıraktığınızda, sunucu parola değişikliklerini son kaldığı yerden eşitlemeye devam eder. Sunucu uzun bir süre için hazırlama modunda bırakılırsa, sunucunun zaman aralığında gerçekleşen tüm parola değişikliklerini eşitlemesi biraz zaman alabilir.

Eşitleme hizmeti yöneticisini kullanarak dışarı aktarmayı yine de zorlayabilirsiniz.

Hazırlama modundaki bir sunucu Active Directory ve Microsoft Entra Id'den değişiklikler almaya devam eder ve hata durumunda başka bir sunucunun sorumluluklarını hızla devralabilir. Birincil sunucunuzda yapılandırma değişiklikleri yaparsanız, aynı değişiklikleri hazırlama modunda sunucuda yapmak sizin sorumluluğunuzdadır.

Eski eşitleme teknolojileri hakkında bilgi sahibi olanlar için, sunucunun kendi SQL veritabanı olduğundan hazırlama modu farklıdır. Bu mimari, hazırlama modu sunucusunun farklı bir veri merkezinde bulunmasına olanak tanır.

Sunucunun yapılandırmasını doğrulama

Bu yöntemi uygulamak için şu adımları izleyin:

  1. Hazırlama
  2. Yapılandırma
  3. İçeri Aktarma ve Eşitleme
  4. Doğrulamak
  5. Etkin sunucuyu değiştirme

Hazırlama

  1. Microsoft Entra Bağlan yükleyin, hazırlama modunu seçin ve yükleme sihirbazının son sayfasında eşitlemeyi başlat'ın seçimini kaldırın. Bu mod, eşitleme altyapısını el ile çalıştırmanızı sağlar. Microsoft Entra Bağlan iletişim kutusundaki Yapılandırmaya hazır sayfasını gösteren ekran görüntüsü.
  2. Oturumu kapatın/oturum açın ve başlat menüsünde Eşitleme Hizmeti'ni seçin.

Yapılandırma

Birincil sunucuda özel değişiklikler yaptıysanız ve yapılandırmayı hazırlama sunucusuyla karşılaştırmak istiyorsanız, Microsoft Entra Bağlan yapılandırma belgeleyicisini kullanın.

İçeri Aktarma ve Eşitleme

  1. Bağlan or'ları seçin ve Active Directory Etki Alanı Services türüne sahip ilk Bağlan seçin. Çalıştır'a tıklayın, Tam içeri aktarma'yı ve Tamam'ı seçin. Bu tür tüm Bağlan or'lar için bu adımları uygulayın.
  2. Microsoft Entra ID (Microsoft) türündeki Bağlan veya seçin. Çalıştır'a tıklayın, Tam içeri aktarma'yı ve Tamam'ı seçin.
  3. Sekme Bağlan orların seçili olduğundan emin olun. Active Directory Etki Alanı Hizmetleri türüne sahip her Bağlan için Çalıştır'a tıklayın, Delta Eşitleme'yi seçin ve Tamam'ı seçin.
  4. Microsoft Entra ID (Microsoft) türündeki Bağlan veya seçin. Çalıştır'a tıklayın, Delta Eşitleme'yi ve Tamam'ı seçin.

Dışarı aktarma değişikliklerini Microsoft Entra Id ve şirket içi AD'de (Exchange karma dağıtımı kullanıyorsanız) hazırlamış oldunuz. Sonraki adımlar, dizinlere dışarı aktarma işlemini başlatmadan önce nelerin değişeceğini incelemenize olanak sağlar.

Doğrulama

  1. Bir cmd istemi başlatın ve %ProgramFiles%\Microsoft Azure AD Sync\bin
  2. Çalıştırma: csexport "Name of Connector" %temp%\export.xml /f:x Bağlan veya adı Eşitleme Hizmeti'nde bulunabilir. Microsoft Entra Id için "contoso.com – Microsoft Entra Id" benzeri bir ada sahiptir.
  3. Çalıştır: CSExportAnalyzer %temp%\export.xml > %temp%\export.csv %temp% içinde microsoft Excel'de inceleyebileceğiniz export.csv adlı bir dosyanız var. Bu dosya, dışarı aktarılacak olan tüm değişiklikleri içerir.
  4. Verilerde veya yapılandırmada gerekli değişiklikleri yapın ve dışarı aktarılacak değişiklikler beklenene kadar bu adımları yeniden çalıştırın (İçeri Aktar ve Eşitle ve Doğrula).

export.csv dosyasını anlama

Dosyanın çoğu kendi kendine açıklayıcıdır. İçeriği anlamak için bazı kısaltmalar:

  • OMODT – Nesne Değiştirme Türü. Nesne düzeyindeki işlemin Ekle, Güncelleştir veya Sil olduğunu gösterir.
  • AMODT – Öznitelik Değiştirme Türü. Öznitelik düzeyindeki işlemin Ekle, Güncelleştir veya sil olduğunu gösterir.

Ortak tanımlayıcıları alma

export.csv dosyası, dışarı aktarılacak tüm değişiklikleri içerir. Her satır, bağlayıcı alanında bir nesnenin değişikliğine karşılık gelir ve nesne DN özniteliğiyle tanımlanır. DN özniteliği, bağlayıcı alanında bir nesneye atanmış benzersiz bir tanımlayıcıdır. çözümlenecek export.csv çok sayıda satırınız/değişikliğiniz olduğunda, değişikliklerin yalnızca DN özniteliğine göre hangi nesnelere yönelik olduğunu bulmak zor olabilir. Değişiklikleri çözümleme işlemini basitleştirmek için PowerShell betiğini kullanın csanalyzer.ps1 . Betik, nesnelerin ortak tanımlayıcılarını (örneğin, displayName, userPrincipalName) alır. Betiği kullanmak için:

  1. CSAnalyzer bölümündeki PowerShell betiğini adlı csanalyzer.ps1bir dosyaya kopyalayın.
  2. Bir PowerShell penceresi açın ve PowerShell betiğini oluşturduğunuz klasöre göz atın.
  3. Komutunu çalıştırın: .\csanalyzer.ps1 -xmltoimport %temp%\export.xml.
  4. Artık Microsoft Excel'de incelenebilen processedusers1.csv adlı bir dosyanız var. Dosyanın DN özniteliğinden ortak tanımlayıcılara (örneğin, displayName ve userPrincipalName) bir eşleme sağladığını unutmayın. Şu anda dışarı aktarılacak olan gerçek öznitelik değişikliklerini içermez.

Etkin sunucuyu değiştirme

Microsoft Entra Bağlan, bir sunucunun eşitlenen AD nesnelerinde değişiklikleri etkin bir şekilde Microsoft Entra ID'ye göndereceği ve pasif sunucunun bu değişiklikleri devralmak zorunda olacağı bir Etkin-Pasif Yüksek Kullanılabilirlik kurulumunda ayarlanabilir.

Not

Active-Active kurulumunda Microsoft Entra Bağlan ayarlayamazsınız. Aktif-Pasif olmalı. Yalnızca 1 Microsoft Entra Bağlan sunucusunun değişiklikleri etkin bir şekilde eşitlediğinden emin olun.

Microsoft Entra Bağlan Sync sunucusunu Hazırlama Modu'nda ayarlama hakkında daha fazla bilgi için bkz. hazırlama modu

Microsoft Entra Bağlan sürümünü yükseltme veya Eşitleme Hizmeti'nin sistem durumu hizmetinin güncel bilgileri almadığını belirten bir uyarı alma gibi çeşitli nedenlerle Eşitleme Sunucularının yük devretmesini gerçekleştirmeniz gerekebilir. Bu olaylarda, aşağıdaki adımları izleyerek Eşitleme Sunucularının yük devretmesini denemeniz gerekir.

Önemli

Aşağıdaki koşullar karşılanmazsa, hazırlama sunucusunun etkin moda geçmesi eşitlemede ciddi bir etkiye sahip olabilir. Önlem olarak, bu işlemi yapmadan önce her zaman bir ilk eşitleme döngüsü çalıştırın ve Bekleyen dışarı aktarmaları doğrulayın .

Önkoşullar

  • Şu anda etkin olan bir Microsoft Entra Bağlan Eşitleme Sunucusu
  • Bir hazırlama Microsoft Entra Bağlan Eşitleme Sunucusu
  • Hazırlama sunucusunda eşitleme zamanlayıcısı etkindir ve yakın zamanda Microsoft Entra Kimliği ile eşitlenmiştir
  • Eşitleme kurallarında veya eşitleme kapsamında herhangi bir güncelleştirme olması durumunda, ilk eşitleme döngüsünü çalıştırın
  • Microsoft Entra Bağlan Eşitleme Sunucunuzun yanlışlıkla silmeleri önlemek için yapılandırıldığını onaylayın
  • Bekleyen dışarı aktarmaları doğrulayın ve önemli güncelleştirmeler olmadığını ve bu güncelleştirmelerin beklendiğini onaylayın
  • Microsoft Entra Bağlan Health portalında sunucuyu denetleyerek Microsoft Entra Bağlan Bağlan Health aracısının güncelleştirilip güncelleştirilmediğini denetleyin
  • Hazırlama sunucusunu etkin olarak değiştirmeden önce geçerli etkin sunucuyu hazırlama moduna geçirin

Şu anda Etkin Eşitleme Sunucusu'nu hazırlama moduna değiştirme

Bu işlem boyunca herhangi bir zamanda yalnızca bir Eşitleme Sunucusunun değişiklikleri eşitlediğinden emin olmamız gerekir. Etkin durumdaki Eşitleme Sunucusuna ulaşılabilir durumdaysa, hazırlama moduna taşımak için aşağıdaki adımları gerçekleştirebilirsiniz. Erişilemiyorsa, sunucuyu kapatarak veya giden bağlantılardan yalıtarak sunucunun veya VM'nin beklenmedik bir şekilde yeniden erişim kazanmadığından emin olun.

  1. Şu anda etkin olan Microsoft Entra Bağlan sunucusu için Microsoft Entra Bağlan sihirbazını açın ve "Hazırlama modunu yapılandır" seçeneğine ve ardından İleri'ye tıklayın:

    Etkin Microsoft Entra Bağlan iletişim kutusunda Hazırlama Modu'nu gösteren ekran görüntüsü.

  2. Microsoft Entra Id'de Genel Yönetici istrator veya Karma Kimlik Yönetici kimlik bilgileriyle oturum açmanız gerekir:

    Etkin Microsoft Entra Bağlan iletişim kutusunda Oturum açma istemini gösteren ekran görüntüsü.

  3. Hazırlama Modu kutusunu işaretleyin ve İleri'ye tıklayın:

    Etkin Microsoft Entra Bağlan iletişim kutusunda Hazırlama Modu yapılandırmasını gösteren ekran görüntüsü.

  4. Microsoft Entra Bağlan sunucusu yüklü bileşenleri denetler ve yapılandırma değişikliği tamamlandığında eşitleme işlemini başlatmak isteyip istemediğinizi sorar:

    Etkin Microsoft Entra Bağlan iletişim kutusunda Yapılandırmaya Hazır ekranını gösteren ekran görüntüsü.

Sunucu hazırlama modunda olacağından, Microsoft Entra Id'de değişiklik yazmaz, ancak AD'deki değişiklikleri Bağlan veya Boşlukta, yazmaya hazır olarak saklar.
Sunucu için eşitleme işlemini Hazırlama Modu'nda bırakmanız önerilir, bu nedenle etkin hale gelirse, hızlı bir şekilde devralır ve kapsamdaki Active Directory / Microsoft Entra nesnelerinin geçerli durumuna yetişmek için büyük bir eşitleme yapması gerekmez.

  1. Eşitleme işlemini başlatmayı seçip Yapılandır'a tıkladıktan sonra, Microsoft Entra Bağlan sunucusu Hazırlama Modu'na yapılandırılır.
    Bu işlem tamamlandığında, Hazırlama Modu'nu etkinleştirdiğini onaylayan bir ekran istenir.
    Bitirmek için Çıkış'a tıklayabilirsiniz.

  2. Windows PowerShell'i açarak, "AD Eşitleme" modülünü yükleyerek ve aşağıdaki komutları kullanarak AD Eşitleme Scheduler yapılandırmasını doğrulayarak sunucunun Hazırlama Modu'nda başarılı olduğunu doğrulayabilirsiniz:

Import-Module ADSync
Get-ADSyncScheduler

Sonuçlardan "StagingModeEnabled" ayarının değerini doğrulayın. Sunucu hazırlama moduna başarıyla geçirildiyse, aşağıdaki örnekte olduğu gibi bu ayarın değeri True olmalıdır:

Etkin Microsoft Entra Bağlan iletişim kutusundaki Eşitleme Hizmeti konsolunu gösteren ekran görüntüsü.

Geçerli Hazırlama Eşitleme sunucusunu etkin moda değiştirme

Bu noktada, tüm Microsoft Entra Bağlan Eşitleme Sunucularımızın değişiklikleri dışarı aktarmadan Hazırlama Modu'nda olması gerekir. Artık Hazırlama Eşitleme Sunucumuzu Etkin moda taşıyabilir ve değişiklikleri etkin bir şekilde eşitleyebiliriz.

  1. Şimdi, başlangıçta Hazırlama Modu'nda olan Microsoft Entra Bağlan sunucusuna gidin ve Microsoft Entra Bağlan sihirbazını açın.

    "Hazırlama modunu yapılandır" seçeneğine tıklayın ve İleri'ye tıklayın:

    Hazırlama Microsoft Entra Bağlan iletişim kutusunda Hazırlama Modu'nu vurgulanmış olarak gösteren ekran görüntüsü.

    Sihirbazın en altındaki ileti, bu sunucunun Hazırlama Modu'nda olduğunu gösterir.

  2. Microsoft Entra Id'de oturum açın, ardından Hazırlama Modu ekranına gidin.

    Hazırlama Modu kutusunun işaretini kaldırın ve İleri'ye tıklayın

    Microsoft Entra Bağlan Hazırlama iletişim kutusunda Hazırlama Modu yapılandırmasını gösteren ekran görüntüsü.

    Bu sayfadaki uyarıya göre, başka hiçbir Microsoft Entra Bağlan sunucusunun etkin bir şekilde eşitlenmediğinden emin olmak önemlidir.

    Herhangi bir anda yalnızca bir etkin Microsoft Entra Bağlan Sync sunucusu olmalıdır.

  3. Eşitleme işlemini başlatmanız istendiğinde, bu kutuyu işaretleyin ve Yapılandır'a tıklayın:

    Microsoft Entra Bağlan Hazırlama iletişim kutusunda Yapılandırmaya Hazır ekranını gösteren ekran görüntüsü.

  4. İşlem tamamlandıktan sonra, bitirmek için Çıkış'a tıklayabileceğiniz aşağıdaki onay ekranını almalısınız:

    Ekran görüntüsü, Hazırlama Microsoft Entra Bağlan iletişim kutusundaki Onay ekranını gösterir.

  5. Eşitleme Hizmeti Konsolu'nu açıp dışarı aktarma işlerinin çalışıp çalışmadığını denetleyerek bunun çalıştığını onaylayabilirsiniz:

    Microsoft Entra Bağlan Hazırlama iletişim kutusundaki Eşitleme Hizmeti konsolunu gösteren ekran görüntüsü.

Olağanüstü durum kurtarma

Uygulama tasarımının bir parçası da eşitleme sunucunuzu kaybetmenize neden olan bir olağanüstü durum yaşandığında ne yapılacağını planlamaktır. Kullanılacak farklı modeller vardır ve hangisinin kullanılacağı aşağıdakiler gibi çeşitli faktörlere bağlıdır:

  • Kapalı kalma süresi boyunca Microsoft Entra Id'de nesnelerde değişiklik yapamamaya karşı toleransınız nedir?
  • Parola eşitleme kullanıyorsanız, kullanıcılar parolalarını şirket içinde değiştirmeleri durumda Microsoft Entra ID'de eski parolalarını kullanmak zorunda olmayı kabul ediyorlar mı?
  • Parola geri yazma gibi gerçek zamanlı işlemlere bağımlılığınız var mı?

Bu soruların yanıtlarına ve kuruluşunuzun ilkesine bağlı olarak aşağıdaki stratejilerden biri uygulanabilir:

  • Gerektiğinde yeniden oluşturun.
  • Hazırlama modu olarak bilinen yedek bir hazır bekleyen sunucuya sahip olun.
  • Sanal makineleri kullanın.

Yerleşik SQL Express veritabanını kullanmıyorsanız, SQL Yüksek Kullanılabilirlik bölümünü de gözden geçirmeniz gerekir.

Gerektiğinde yeniden derleme

Uygun bir strateji, gerektiğinde sunucunun yeniden oluşturulmasını planlamaktır. Genellikle, eşitleme altyapısını yükleme ve ilk içeri aktarma ve eşitleme işlemi birkaç saat içinde tamamlanabilir. Kullanılabilir yedek sunucu yoksa, eşitleme altyapısını barındırmak için geçici olarak bir etki alanı denetleyicisi kullanmak mümkündür.

Eşitleme altyapısı sunucusu nesneler hakkında herhangi bir durum depolamaz, bu nedenle veritabanı Active Directory ve Microsoft Entra Id'deki verilerden yeniden oluşturulabilir. sourceAnchor özniteliği, şirket içindeki ve buluttaki nesneleri birleştirmek için kullanılır. Sunucuyu şirket içindeki ve bulutdaki mevcut nesnelerle yeniden oluşturursanız, eşitleme altyapısı yeniden yükleme işleminde bu nesneleri yeniden eşleştirir. Belgelemeniz ve kaydetmeniz gerekenler, filtreleme ve eşitleme kuralları gibi sunucuda yapılan yapılandırma değişiklikleridir. Eşitlemeye başlamadan önce bu özel yapılandırmaların yeniden uygulanması gerekir.

Yedek bekleme sunucusuna sahip olun - hazırlama modu

Daha karmaşık bir ortamınız varsa, bir veya daha fazla hazır bekleyen sunucuya sahip olmanız önerilir. Yükleme sırasında, bir sunucunun hazırlama modunda olmasını etkinleştirebilirsiniz.

Daha fazla bilgi için bkz . hazırlama modu.

Sanal makineleri kullanma

Yaygın ve desteklenen bir yöntem, eşitleme altyapısını bir sanal makinede çalıştırmaktır. Konağın bir sorunu olması durumunda, eşitleme altyapısı sunucusuna sahip görüntü başka bir sunucuya geçirilebilir.

SQL Yüksek Kullanılabilirliği

Microsoft Entra Bağlan ile birlikte gelen SQL Server Express'i kullanmıyorsanız, SQL Server için yüksek kullanılabilirlik de göz önünde bulundurulmalıdır. Desteklenen yüksek kullanılabilirlik çözümleri SQL kümeleme ve AOA'dır (Always On Kullanılabilirlik Grupları). Desteklenmeyen çözümler yansıtmayı içerir.

1.1.524.0 sürümünde Microsoft Entra Bağlan'a SQL AOA desteği eklendi. Microsoft Entra Bağlan yüklemeden önce SQL AOA'yı etkinleştirmeniz gerekir. Yükleme sırasında Microsoft Entra Bağlan, sağlanan SQL örneğinin SQL AOA için etkinleştirilip etkinleştirilmediğini algılar. SQL AOA etkinleştirilirse, Microsoft Entra Bağlan SQL AOA'nın zaman uyumlu çoğaltmayı veya zaman uyumsuz çoğaltmayı kullanacak şekilde yapılandırılıp yapılandırılmamış olduğunu daha fazla Bağlan. Kullanılabilirlik Grubu Dinleyicisi ayarlanırken RegisterAllProvidersIP özelliği 0 olarak ayarlanmalıdır. Bunun nedeni, Microsoft Entra Bağlan şu anda SQL'e bağlanmak için SQL Yerel İstemcisi kullanıyor olması ve SQL Yerel İstemcisi'nin MultiSubNetFailover özelliğinin kullanımını desteklememesidir.

Ek CSAnalyzer

Bu betiğin nasıl kullanılacağını doğrulama bölümüne bakın.

Param(
    [Parameter(Mandatory=$true, HelpMessage="Must be a file generated using csexport 'Name of Connector' export.xml /f:x)")]
    [string]$xmltoimport="%temp%\exportedStage1a.xml",
    [Parameter(Mandatory=$false, HelpMessage="Maximum number of users per output file")][int]$batchsize=1000,
    [Parameter(Mandatory=$false, HelpMessage="Show console output")][bool]$showOutput=$false
)

#LINQ isn't loaded automatically, so force it
[Reflection.Assembly]::Load("System.Xml.Linq, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089") | Out-Null

[int]$count=1
[int]$outputfilecount=1
[array]$objOutputUsers=@()

#XML must be generated using "csexport "Name of Connector" export.xml /f:x"
write-host "Importing XML" -ForegroundColor Yellow

#XmlReader.Create won't properly resolve the file location,
#so expand and then resolve it
$resolvedXMLtoimport=Resolve-Path -Path ([Environment]::ExpandEnvironmentVariables($xmltoimport))

#use an XmlReader to deal with even large files
$result=$reader = [System.Xml.XmlReader]::Create($resolvedXMLtoimport) 
$result=$reader.ReadToDescendant('cs-object')
if($result)
{
    do 
    {
        #create the object placeholder
        #adding them up here means we can enforce consistency
        $objOutputUser=New-Object psobject
        Add-Member -InputObject $objOutputUser -MemberType NoteProperty -Name ID -Value ""
        Add-Member -InputObject $objOutputUser -MemberType NoteProperty -Name Type -Value ""
        Add-Member -inputobject $objOutputUser -MemberType NoteProperty -Name DN -Value ""
        Add-Member -inputobject $objOutputUser -MemberType NoteProperty -Name operation -Value ""
        Add-Member -inputobject $objOutputUser -MemberType NoteProperty -Name UPN -Value ""
        Add-Member -inputobject $objOutputUser -MemberType NoteProperty -Name displayName -Value ""
        Add-Member -inputobject $objOutputUser -MemberType NoteProperty -Name sourceAnchor -Value ""
        Add-Member -inputobject $objOutputUser -MemberType NoteProperty -Name alias -Value ""
        Add-Member -inputobject $objOutputUser -MemberType NoteProperty -Name primarySMTP -Value ""
        Add-Member -inputobject $objOutputUser -MemberType NoteProperty -Name onPremisesSamAccountName -Value ""
        Add-Member -inputobject $objOutputUser -MemberType NoteProperty -Name mail -Value ""

        $user = [System.Xml.Linq.XElement]::ReadFrom($reader)
        if ($showOutput) {Write-Host Found an exported object... -ForegroundColor Green}

        #object id
        $outID=$user.Attribute('id').Value
        if ($showOutput) {Write-Host ID: $outID}
        $objOutputUser.ID=$outID

        #object type
        $outType=$user.Attribute('object-type').Value
        if ($showOutput) {Write-Host Type: $outType}
        $objOutputUser.Type=$outType

        #dn
        $outDN= $user.Element('unapplied-export').Element('delta').Attribute('dn').Value
        if ($showOutput) {Write-Host DN: $outDN}
        $objOutputUser.DN=$outDN

        #operation
        $outOperation= $user.Element('unapplied-export').Element('delta').Attribute('operation').Value
        if ($showOutput) {Write-Host Operation: $outOperation}
        $objOutputUser.operation=$outOperation

        #now that we have the basics, go get the details

        foreach ($attr in $user.Element('unapplied-export-hologram').Element('entry').Elements("attr"))
        {
            $attrvalue=$attr.Attribute('name').Value
            $internalvalue= $attr.Element('value').Value

            switch ($attrvalue)
            {
                "userPrincipalName"
                {
                    if ($showOutput) {Write-Host UPN: $internalvalue}
                    $objOutputUser.UPN=$internalvalue
                }
                "displayName"
                {
                    if ($showOutput) {Write-Host displayName: $internalvalue}
                    $objOutputUser.displayName=$internalvalue
                }
                "sourceAnchor"
                {
                    if ($showOutput) {Write-Host sourceAnchor: $internalvalue}
                    $objOutputUser.sourceAnchor=$internalvalue
                }
                "alias"
                {
                    if ($showOutput) {Write-Host alias: $internalvalue}
                    $objOutputUser.alias=$internalvalue
                }
                "proxyAddresses"
                {
                    if ($showOutput) {Write-Host primarySMTP: ($internalvalue -replace "SMTP:","")}
                    $objOutputUser.primarySMTP=$internalvalue -replace "SMTP:",""
                }
            }
        }

        $objOutputUsers += $objOutputUser

        Write-Progress -activity "Processing ${xmltoimport} in batches of ${batchsize}" -status "Batch ${outputfilecount}: " -percentComplete (($objOutputUsers.Count / $batchsize) * 100)

        #every so often, dump the processed users in case we blow up somewhere
        if ($count % $batchsize -eq 0)
        {
            Write-Host Hit the maximum users processed without completion... -ForegroundColor Yellow

            #export the collection of users as a CSV
            Write-Host Writing processedusers${outputfilecount}.csv -ForegroundColor Yellow
            $objOutputUsers | Export-Csv -path processedusers${outputfilecount}.csv -NoTypeInformation

            #increment the output file counter
            $outputfilecount+=1

            #reset the collection and the user counter
            $objOutputUsers = $null
            $count=0
        }

        $count+=1

        #need to bail out of the loop if no more users to process
        if ($reader.NodeType -eq [System.Xml.XmlNodeType]::EndElement)
        {
            break
        }

    } while ($reader.Read)

    #need to write out any users that didn't get picked up in a batch of 1000
    #export the collection of users as CSV
    Write-Host Writing processedusers${outputfilecount}.csv -ForegroundColor Yellow
    $objOutputUsers | Export-Csv -path processedusers${outputfilecount}.csv -NoTypeInformation
}
else
{
    Write-Host "Imported XML file is empty. No work to do." -ForegroundColor Red
}

Sonraki adımlar

Genel bakış konuları