Mendeteksi opsi Situs AD menggunakan PowerShell


9

Bagaimana saya bisa menggunakan PowerShell untuk menemukan opsi situs AD seperti +IS_INTER_SITE_AUTO_TOPOLOGY_DISABLEDdi PowerShell? Saya telah bermain-main dengan perintah berikut, tetapi tidak bisa memuntahkan sesuatu yang berguna.

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

Jawaban:


17

Sunting # 3: Memperbarui dokumentasi referensi.

Sunting # 2: Mengedit sekali lagi karena saya menulis sesuatu di PS untuk melakukan persis apa yang Anda coba lakukan. Itu di bawah.

Saya akan melanjutkan dan menegaskan bahwa tidak ada cara Powershell Friendly (tm) untuk melakukannya saat ini. Tapi tentu saja Anda masih bisa menggunakan Powershell untuk membuat kueri LDAP diperlukan untuk melihat opsi ini jika Anda benar-benar menginginkannya. Lihat optionsatribut NTDS Settingsobjek dari setiap server yang terkait dengan situs AD:

masukkan deskripsi gambar di sini

Itu adalah atribut yang tepat, yang merupakan bitmask, yang berfungsi pada repadmin.exe. Repadmin.exe berisi penerjemah bitmask yang ramah dalam kodenya. Seperti halnya snap-in MMC ADSIEdit. Namun, Anda harus membuat ulang penerjemah bitmask itu di Powershell.

Sebagai contoh, Repadmin /options <DC> [{+|-} IS_GC]adalah perintah yang valid, dan sekarang kita tahu persis bit mana yang beroperasi.

Berikut adalah dokumentasi MSDN yang relatif jelek pada optionsatribut.

Dokumentasi MSDN yang lebih baik pada optionsatribut.

Opsi Atribut

Bitfield, di mana arti bit bervariasi dari objectClass ke objectClass. Dapat terjadi pada Inter-Site-Transport, NTDS-Connection, NTDS-DSA, NTDS-Site-Settings, dan objek-situs-Link Site.

Dan di sini adalah contoh mencari opsi menggunakan operator aturan pencocokan old-school:

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

Filter ini menggunakan LDAP_MATCHING_RULE_BIT_AND operator aturan pencocokan (1.2.840.113556.1.4.803) untuk menemukan objek nTDSDSA yang memiliki bit orde rendah yang diatur dalam bitmask atribut options. Bit urutan rendah, yang sesuai dengan konstanta NTDSDSA_OPT_IS_GC didefinisikan dalam Ntdsapi.h, mengidentifikasi objek nTDSDSA dari server Katalog Global. Untuk informasi lebih lanjut tentang aturan yang cocok, lihat Sintaksis Filter Pencarian.

Oh boy apakah itu terdengar menyenangkan!

Beberapa nilai lain untuk bitmask:

masukkan deskripsi gambar di sini

Jadi dengan itu Anda harus memiliki informasi yang cukup untuk menggulung Get-ADSiteOptionsCmdlet Anda sendiri ... jika Anda ingin saya menulis satu untuk Anda, saya akan, dengan biaya yang sangat sederhana ...;)

Sunting: Berikut adalah tautan Microsoft, Repadmin untuk Para Ahli , yang merinci perbedaan antara optionsdan siteoptionssubperintah dari repadmin:

Dengan menggunakan sub-perintah opsi situs, kita bisa mengubah atribut opsi yang disimpan pada objek pengaturan situs NTDS.

Adapun bitmap itu? Apakah bahkan didokumentasikan? Tidak yakin. Jika Anda dapat memberitahu saya apa FORCE_KCC_WHISTLER_BEHAVIORartinya dalam sebuah wawancara, saya akan mempekerjakan Anda di tempat. Anda pamer seperti itu, MDMarra. ;)

Jadi hanya untuk meringkas, optionsatribut pada CN=NTDS Settingsobjek untuk setiap pengontrol domain sesuai dengan opsi spesifik DC, yaitu repadmin <DC> /options, sedangkan optionsatribut pada CN=NTDS Site Settingsobjek di bawah setiap situs sesuai dengan repadmin /siteoptions.

Jadi, untuk akhirnya menjawab pertanyaan Anda. Mendapatkan opsi situs secara khusus, bukan opsi DC:

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

Jika tidak ada opsi situs yang ditetapkan, Powershell tidak akan mengembalikannya. Anda mungkin bisa menyederhanakan kode di atas sedikit tetapi menggunakan bahasa yang Anda mulai. Setelah mencari terlalu banyak, akhirnya saya menemukan dokumentasi di situs bitmask :

Opsi Situs Bitmask

Jadi untuk IS_INTER_SITE_AUTO_TOPOLOGY_DISABLEDyang Anda berikan sebagai contoh, Anda akan mencari nilai 0x00000010untuk optionsatribut.

masukkan deskripsi gambar di sini

Dan dari menjalankan cuplikan Powershell:

Opsi situs dengan Powershell


Sunting # 2: Saya menulis sesuatu kepada Anda hari ini:

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

Dan ini dia beraksi:

Dapatkan-ADSiteOptions


Pos yang luar biasa!
Simon Catlin

1
Whistler adalah nama kode untuk sistem operasi XP / 2003. Saya berasumsi FORCE_KCC_WHISTLER_BEHAVIORakan memaksa versi KCC nanti untuk hanya menggunakan opsi dan algoritma era 2003. Sedangkan untuk sisa posting Anda, saya pikir begitu. Terimakasih sudah mengkonfirmasi.
MDMarra

4
Re: edit # 2 - Maukah kamu menikah denganku?
MDMarra

Ini adalah bromance bercabang bintang.
Ryan Ries

3

The dokumentasi yang disebutkan oleh Ryan menghilangkan 2 NTDSettings Pilihan yang diperlukan untuk mendukung semua kombinasi. Silakan temukan di bawah nilai-nilai yang ditemukan di 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
    }
"@

Dan

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

dapat disederhanakan dengan

SiteOptions=[nTDSSiteSettingsFlags]$SiteSettings.Options

Terima kasih atas informasi tambahannya. Saya telah memasukkannya ke dalam skrip saya.
Ryan Ries
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.