Виявлення параметрів сайту AD за допомогою PowerShell


9

Як я можу використовувати PowerShell для пошуку таких варіантів сайту, як +IS_INTER_SITE_AUTO_TOPOLOGY_DISABLEDу PowerShell? Я граю з наступною командою, але не можу змусити її виплюнути щось корисне.

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

Відповіді:


17

Редагувати №3: Оновлення довідкової документації.

Редагування №2: Редагування ще раз, тому що я написав щось у PS, щоб зробити саме те, що ви намагаєтесь зробити. Це внизу.

Я збираюся йти вперед і стверджую, що в даний час немає способу, що це стосується Powershell Friendly (tm) . Але звичайно, ви все одно можете використовувати Powershell, щоб зробити запит LDAP необхідним, щоб побачити ці параметри, якщо ви дійсно цього хотіли. Перевірте optionsатрибут NTDS Settingsоб'єкта кожного сервера, який пов’язаний із сайтом AD:

введіть тут опис зображення

Саме таким атрибутом є бітова маска, над якою працює repadmin.exe. Repadmin.exe містить в своєму коді дружній перекладач біткої маски. Як і оснащення ADSIEdit MMC. Однак вам знадобиться відтворити цього перекладача біткої маски в Powershell.

Наприклад, Repadmin /options <DC> [{+|-} IS_GC]це дійсна команда, і тепер ми точно знаємо, який біт, на якому вона працює.

Ось відносно хитра документація MSDN на optionsатрибут.

Краща документація MSDN на optionsатрибут.

Параметри Атрибут

Бітове поле, де значення бітів змінюється від objectClass до objectClass. Може виникати на міжміських транспортних перевезеннях, підключенні NTDS, NTDS-DSA, налаштуваннях сайту NTDS та об’єктах Site-Link.

Ось приклад пошуку варіантів за допомогою операторів правил узгодження старої школи:

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

Цей фільтр використовує оператор правила відповідності LDAP_MATCHING_RULE_BIT_AND (1.2.840.113556.1.4.803) для пошуку nTDSDSA об'єктів, у яких біт низького порядку встановлений у бітній масці атрибута параметрів. Біт низького порядку, який відповідає константі NTDSDSA_OPT_IS_GC, визначеній у Ntdsapi.h, ідентифікує об'єкт nTDSDSA сервера глобального каталогу. Для отримання додаткової інформації про відповідність правил див. Синтаксис пошукового фільтра.

О, хлопче, це звучить весело!

Деякі інші значення для біткої маски:

введіть тут опис зображення

Тож з цим у вас має бути достатньо інформації для того, щоб розгорнути свій власний Get-ADSiteOptionsCmdlet ... якщо ви хочете, щоб я написав для вас я, за дуже скромну плату ...;)

Редагувати: Ось посилання Microsoft, Repadmin for Experts , в якому детально описано різницю між підкомандами repadmin optionsта siteoptionsпідкомандами:

Використовуючи підкоманду siteoptions, ми могли змінити атрибут параметрів, що зберігаються в об’єкті налаштувань сайту NTDS.

Що стосується тієї растрової карти? Це навіть задокументовано? Не впевнений. Якщо ви зможете сказати мені, що FORCE_KCC_WHISTLER_BEHAVIORозначає в інтерв'ю, я найму вас на місці. Ви такий шофф, МДМарра. ;)

Отже, підводячи підсумок, optionsатрибут на CN=NTDS Settingsоб'єкті для кожного контролера домену відповідає параметрам, що стосуються DC, тобто repadmin <DC> /options, тоді як optionsатрибут на CN=NTDS Site Settingsоб'єкті під кожним сайтом відповідає repadmin /siteoptions.

Отже, щоб нарешті відповісти на ваше запитання. Отримання конкретно параметрів сайту, а не параметрів постійного струму:

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

Якщо параметри сайту не встановлені, Powershell не поверне їх. Можливо, ви могли б трохи спростити вищевказаний код, але це з використанням мови, з якої ви почали. Після занадто багато пошуку, я нарешті знайшов документацію на бітмасках параметрів сайту :

Параметри сайту Bitmask

Так IS_INTER_SITE_AUTO_TOPOLOGY_DISABLEDщо ви дали в якості прикладу, ви будете шукати значення 0x00000010для optionsатрибута.

введіть тут опис зображення

І з запуску фрагмента Powershell:

Параметри сайту з Powershell


Редагувати №2: Я сьогодні вам щось написав:

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

І ось воно в дії:

Get-ADSiteOptions


Фантастичний пост!
Саймон Кетлін

1
Вістлер був кодовим іменем для операційних систем XP / 2003. Я припускаю FORCE_KCC_WHISTLER_BEHAVIOR, що змусить пізніші версії KCC використовувати лише параметри та алгоритми епохи 2003 року. Щодо решти вашої посади, я так вважав. Дякуємо за підтвердження.
MDMarra

4
Re: редагування №2 - Ви вийдете за мене заміж?
MDMarra

Це зірка, схрещена ароматом.
Ryan Ries

3

Документації згадуються Райан Виключають 2 NTDSettings параметрів , необхідних для підтримки всіх комбінацій. Будь ласка, знайдіть нижче ці значення, знайдені в 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
    }
"@

І

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

можна спростити за допомогою

SiteOptions=[nTDSSiteSettingsFlags]$SiteSettings.Options

Дякую за додаткову інформацію. Я включив його до свого сценарію.
Райан Райс
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.