Правка № 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:
Изменить № 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)}
}
}
}
}
И вот оно в действии:
FORCE_KCC_WHISTLER_BEHAVIOR
что в более поздних версиях KCC будут использоваться только опции и алгоритмы 2003 года. Что касается остальной части вашего поста, я так и думал. Спасибо за подтверждение.В документации, упомянутой Райаном, опущены 2 параметра NTDSettings, необходимые для поддержки всех комбинаций. Ниже приведены значения, найденные в
ntdsapi.h
:А также
может быть упрощено
источник