Определение параметров сайта AD с помощью PowerShell

9

Как я могу использовать PowerShell для поиска параметров сайта AD, как +IS_INTER_SITE_AUTO_TOPOLOGY_DISABLEDв PowerShell? Я играл со следующей командой, но не могу заставить ее выплюнуть что-нибудь полезное.

Get-ADObject -Filter 'objectClass -eq "site"' -Searchbase (Get-ADRootDSE).ConfigurationNamingContext` -Properties options
MDMarra
источник

Ответы:

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. Может встречаться в объектах Inter-Site-Transport, NTDS-Connection, NTDS-DSA, NTDS-Site-Settings и 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-ADSiteOptionsкомандлет ... если вы хотите, чтобы я написал для вас один, я сделаю это за очень скромную плату ...;)

Изменить: Вот ссылка Microsoft, Repadmin for Experts , которая детализирует разницу между optionsи siteoptionsподкоманды repadmin:

Используя подкоманду siteoptions, мы могли изменить атрибут параметров, хранящийся в объекте параметров сайта NTDS.

Что касается этого растрового изображения? Это даже задокументировано? Точно сказать не могу. Если вы можете сказать мне, что FORCE_KCC_WHISTLER_BEHAVIORзначит в интервью, я найму вас на месте. Вы такой понты, MDMarra. ;)

Итак, просто подытожим, что optionsатрибут CN=NTDS Settingsобъекта для каждого контроллера домена соответствует специфическим для DC параметрам, т. repadmin <DC> /optionsЕ. optionsАтрибут CN=NTDS Site Settingsобъекта в каждом сайте соответствует repadmin /siteoptions.

Итак, чтобы окончательно ответить на ваш вопрос. Получение конкретно параметров сайта, а не параметров DC:

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
Whistler был кодовым названием эпохи операционных систем XP / 2003. Я предполагаю, FORCE_KCC_WHISTLER_BEHAVIORчто в более поздних версиях KCC будут использоваться только опции и алгоритмы 2003 года. Что касается остальной части вашего поста, я так и думал. Спасибо за подтверждение.
MDMarra
4
Re: редактировать # 2 - ты выйдешь за меня?
MDMarra
Это скрещенный звездой роман.
Райан Райс
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
Аксель Лимузен
источник
Спасибо за дополнительную информацию. Я включил это в свой сценарий.
Райан Райс