Назад | Перейти на главную страницу

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

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

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

Редактировать # 3: Обновление справочной документации.

Редактировать # 2: Редактирую еще раз, потому что я написал что-то в PS, чтобы делать именно то, что вы пытаетесь сделать. Это внизу.

Я собираюсь пойти дальше и заявить, что Powershell Friendly не существует (тм) способ сделать это в настоящее время. Но, конечно, вы все равно можете использовать Powershell, чтобы сделать запрос LDAP необходимым для просмотра этих параметров, если вы действительно этого хотите. Проверьте options атрибут NTDS Settings объект каждого сервера, который связан с сайтом AD:

Это точный атрибут, который представляет собой битовую маску, с которой работает repadmin.exe. Repadmin.exe содержит в своем коде удобный переводчик битовых масок. Как и оснастка ADSIEdit MMC. Однако вам нужно будет воссоздать этот переводчик битовой маски в Powershell.

Например, Repadmin /options <DC> [{+|-} IS_GC] - допустимая команда, и теперь мы точно знаем, с каким битом она работает.

Вот относительно дрянная документация MSDN на options атрибут.

Лучшая документация MSDN на options атрибут.

Атрибут опций

Битовое поле, значение битов в котором меняется от объектного класса к объектному. Может возникать в объектах 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 для экспертов, который подробно описывает разницу между options и siteoptions подкоманды repadmin:

Используя подкоманду siteoptions, мы можем изменить атрибут options, хранящийся в объекте настроек сайта 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 их не вернет. Вы, вероятно, могли бы немного упростить приведенный выше код, но используя язык, с которого вы начали. После долгих поисков я наконец нашел документацию по битовая маска параметров сайта:

Таким образом, для IS_INTER_SITE_AUTO_TOPOLOGY_DISABLED который вы привели в качестве примера, вы будете искать значение 0x00000010 для options атрибут.

И от запуска фрагмента 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)}
            }
        }
    }
}

И вот оно в действии:

В документация упомянутый Райан опускает 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