PowerShell kullanarak AD Site seçeneklerini algılama


9

PowerShell'deki gibi AD site seçeneklerini bulmak için PowerShell'i nasıl kullanabilirim +IS_INTER_SITE_AUTO_TOPOLOGY_DISABLED? Aşağıdaki komutla oynuyorum, ama yararlı bir şey tükürmek için alamıyorum.

Get-ADObject -Filter 'objectClass -eq "site"' -Searchbase (Get-ADRootDSE).ConfigurationNamingContext` -Properties options

Yanıtlar:


17

Düzenleme # 3: Referans belgelerini güncelleme.

Edit # 2: PS'de tam olarak yapmaya çalıştığınız şeyi yapmak için bir şey yazdığım için bir kez daha düzenleme. En altta.

Devam edeceğim ve şu anda bunu yapmanın Powershell Friendly (tm) yolu olmadığını iddia edeceğim . Ancak elbette Powershell'i, gerçekten isterseniz bu seçenekleri görmek için LDAP sorgusunu yapmak için kullanabilirsiniz. Check out optionsvasfını NTDS SettingsAD sitesine ilişkili her sunucu nesnesi:

resim açıklamasını buraya girin

Bu, repadmin.exe'nin çalıştığı bir bit maskesi olan özniteliktir. Repadmin.exe kendi kodunda bir dostu bitmask çevirmeni içerir. ADSIEdit MMC ek bileşeni gibi. Ancak, Powershell'de o bitmask çevirmenini yeniden oluşturmanız gerekir.

Örneğin, Repadmin /options <DC> [{+|-} IS_GC]geçerli bir komuttur ve şimdi tam olarak hangi bit üzerinde çalıştığını biliyoruz.

İşte optionsöznitelik ile ilgili nispeten berbat MSDN belgeleri .

optionsÖzellik hakkında daha iyi MSDN belgeleri .

Seçenek Özelliği

Bitlerin anlamının objectClass'tan objectClass'a değiştiği bir bit alanı. Siteler Arası Aktarım, NTDS Bağlantısı, NTDS-DSA, NTDS-Site-Settings ve Site-Link nesnelerinde oluşabilir.

İşte eski okul eşleme kuralı operatörlerini kullanarak seçenekleri aramaya bir örnek :

(&(objectCategory=nTDSDSA)(options:1.2.840.113556.1.4.803:=1))

Bu filtre, options özelliğinin bit maskında düşük sıralı biti ayarlanmış nTDSDSA nesnelerini bulmak için LDAP_MATCHING_RULE_BIT_AND eşleme kuralı operatörünü (1.2.840.113556.1.4.803) kullanır. Ntdsapi.h dosyasında tanımlanan NTDSDSA_OPT_IS_GC sabitine karşılık gelen düşük dereceli bit, Genel Katalog sunucusunun nTDSDSA nesnesini tanımlar. Eşleme kuralları hakkında daha fazla bilgi için, bkz. Arama Filtresi Sözdizimi.

Oh oğlum bu kulağa eğlenceli geliyor!

Bitmask için diğer bazı değerler:

resim açıklamasını buraya girin

Bu nedenle, kendi Get-ADSiteOptionsCmdlet'inizi yuvarlamak için yeterli bilgiye sahip olmalısınız ... eğer sizin için bir tane yazmamı istiyorsanız, çok mütevazı bir ücret karşılığında ...;)

Düzenleme: İşte repadmin ve alt komutları arasındaki farkı ayrıntılar, Uzmanlar için Repadmin Microsoft bağlantısı :optionssiteoptions

Siteoptions alt komutunu kullanarak, NTDS Site Ayarları Nesnesinde depolanan options özniteliğini değiştirebiliriz.

Bu bitmap'e gelince? Belgeleniyor mu? Emin değil. Bir FORCE_KCC_WHISTLER_BEHAVIORröportajda bana ne anlama geldiğini söyleyebilirsen , seni yerinde tutacağım. Sen çok gösterişlisin, MDMarra. ;)

Dolayısıyla, sadece, özetlemek gerekirse optionsüzerine niteliği CN=NTDS SettingsDC özgü seçenekleri, yani her etki alanı denetleyicisi karşılık gelir için nesne repadmin <DC> /options, oysa optionsüzerinde özniteliği CN=NTDS Site Settingsher site karşılık gelir altında nesneye repadmin /siteoptions.

Sonunda sorunuzu cevaplamak için. DC seçeneklerini değil, özellikle site seçeneklerini alma:

ForEach($Site In (Get-ADObject -Filter 'objectClass -eq "site"' -Searchbase (Get-ADRootDSE).ConfigurationNamingContext)) 
{ 
    Get-ADObject "CN=NTDS Site Settings,$($Site.DistinguishedName)" -Properties Options 
}

Herhangi bir site seçeneği ayarlanmamışsa, Powershell bunları döndürmez. Muhtemelen yukarıdaki kodu biraz basitleştirebilirsiniz, ancak bu, başladığınız uyumu kullanır. Çok fazla arama yaptıktan sonra , site seçenekleri bitmask ile ilgili belgeleri buldum :

Site Seçenekleri Bitmask

Bunun için IS_INTER_SITE_AUTO_TOPOLOGY_DISABLEDörnek olarak verdiğinizde 0x00000010, optionsözellik için bir değer arıyordunuz .

resim açıklamasını buraya girin

Powershell snippet'ini çalıştırmaktan:

Powershell ile site seçenekleri


Edit # 2: Bugün size bir şey yazdım:

#Require -Version 3
#Require -Module ActiveDirectory
Function Get-ADSiteOptions
{
<#
.SYNOPSIS
    This Cmdlet gets Active Directory Site Options.
.DESCRIPTION
    This Cmdlet gets Active Directory Site Options.
    We can fill out the rest of this comment-based help later.
.LINK
    http://myotherpcisacloud.com
.NOTES
    Written by Ryan Ries, October 2013. ryanries09@gmail.com.
#>
    [CmdletBinding()]
    Param()
    BEGIN
    {
        Set-StrictMode -Version Latest

        # This enum comes from NtDsAPI.h in the Windows SDK.
        # Also thanks to Jason Scott for pointing it out to me. http://serverfault.com/users/23067/jscott
        Add-Type -TypeDefinition @" 
                                   [System.Flags]
                                   public enum nTDSSiteSettingsFlags {
                                   NTDSSETTINGS_OPT_IS_AUTO_TOPOLOGY_DISABLED            = 0x00000001,
                                   NTDSSETTINGS_OPT_IS_TOPL_CLEANUP_DISABLED             = 0x00000002,
                                   NTDSSETTINGS_OPT_IS_TOPL_MIN_HOPS_DISABLED            = 0x00000004,
                                   NTDSSETTINGS_OPT_IS_TOPL_DETECT_STALE_DISABLED        = 0x00000008,
                                   NTDSSETTINGS_OPT_IS_INTER_SITE_AUTO_TOPOLOGY_DISABLED = 0x00000010,
                                   NTDSSETTINGS_OPT_IS_GROUP_CACHING_ENABLED             = 0x00000020,
                                   NTDSSETTINGS_OPT_FORCE_KCC_WHISTLER_BEHAVIOR          = 0x00000040,
                                   NTDSSETTINGS_OPT_FORCE_KCC_W2K_ELECTION               = 0x00000080,
                                   NTDSSETTINGS_OPT_IS_RAND_BH_SELECTION_DISABLED        = 0x00000100,
                                   NTDSSETTINGS_OPT_IS_SCHEDULE_HASHING_ENABLED          = 0x00000200,
                                   NTDSSETTINGS_OPT_IS_REDUNDANT_SERVER_TOPOLOGY_ENABLED = 0x00000400,
                                   NTDSSETTINGS_OPT_W2K3_IGNORE_SCHEDULES                = 0x00000800,
                                   NTDSSETTINGS_OPT_W2K3_BRIDGES_REQUIRED                = 0x00001000  }
"@
        ForEach($Site In (Get-ADObject -Filter 'objectClass -eq "site"' -Searchbase (Get-ADRootDSE).ConfigurationNamingContext)) 
        {            
            $SiteSettings = Get-ADObject "CN=NTDS Site Settings,$($Site.DistinguishedName)" -Properties Options
            If(!$SiteSettings.PSObject.Properties.Match('Options').Count -OR $SiteSettings.Options -EQ 0)
            {
                # I went with '(none)' here to give it a more classic repadmin.exe feel.
                # You could also go with $Null, or omit the property altogether for a more modern, Powershell feel.
                [PSCustomObject]@{SiteName=$Site.Name; DistinguishedName=$Site.DistinguishedName; SiteOptions='(none)'} 
            }
            Else
            {
                [PSCustomObject]@{SiteName=$Site.Name; DistinguishedName=$Site.DistinguishedName; SiteOptions=[Enum]::Parse('nTDSSiteSettingsFlags', $SiteSettings.Options)}
            }
        }
    }
}

Ve işte burada:

-ADSiteOptions alın


Harika bir gönderi!
Simon Catlin

1
Whistler, XP / 2003 işletim sistemleri çağının kod adıdır. FORCE_KCC_WHISTLER_BEHAVIORKCC'nin sonraki sürümlerinin yalnızca 2003 dönemi seçeneklerini ve algoritmalarını kullanmaya zorlayacağını varsayıyorum . Gönderinin geri kalanına gelince, ben de öyle düşünmüştüm. Onayladığınız için teşekkürler.
MDMarra

4
Re: edit # 2 - Benimle evlenir misin?
MDMarra

Bu yıldız çapraz bir kardeş.
Ryan Ries

3

Dokümantasyon bahsettiği Ryan tüm kombinasyonları desteklemek için gerekli atlar 2 NTDSettings Seçenekler. Lütfen şu değerlerde bulunan değerleri bulun ntdsapi.h:

Add-Type -TypeDefinition @"
    [System.Flags]
    public enum nTDSSiteSettingsFlags {
    NTDSSETTINGS_OPT_IS_AUTO_TOPOLOGY_DISABLED = 0x00000001,
    NTDSSETTINGS_OPT_IS_TOPL_CLEANUP_DISABLED = 0x00000002,
    NTDSSETTINGS_OPT_IS_TOPL_MIN_HOPS_DISABLED = 0x00000004,
    NTDSSETTINGS_OPT_IS_TOPL_DETECT_STALE_DISABLED = 0x00000008,
    NTDSSETTINGS_OPT_IS_INTER_SITE_AUTO_TOPOLOGY_DISABLED = 0x00000010,
    NTDSSETTINGS_OPT_IS_GROUP_CACHING_ENABLED = 0x00000020,
    NTDSSETTINGS_OPT_FORCE_KCC_WHISTLER_BEHAVIOR = 0x00000040,
    NTDSSETTINGS_OPT_FORCE_KCC_W2K_ELECTIONn = 0x00000080,
    NTDSSETTINGS_OPT_IS_RAND_BH_SELECTION_DISABLED = 0x00000100,
    NTDSSETTINGS_OPT_IS_SCHEDULE_HASHING_ENABLED = 0x00000200,
    NTDSSETTINGS_OPT_IS_REDUNDANT_SERVER_TOPOLOGY_ENABLED = 0x00000400,
    NTDSSETTINGS_OPT_W2K3_IGNORE_SCHEDULES = 0x00000800,
    NTDSSETTINGS_OPT_W2K3_BRIDGES_REQUIRED = 0x00001000
    }
"@

Ve

SiteOptions=[Enum]::Parse('nTDSSiteSettingsFlags', $SiteSettings.Options)

tarafından basitleştirilebilir

SiteOptions=[nTDSSiteSettingsFlags]$SiteSettings.Options

Ek bilgi için teşekkürler. Senaryomun içine dahil ettim.
Ryan Ries
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.