Редагувати №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-ADSiteOptions
Cmdlet ... якщо ви хочете, щоб я написав для вас я, за дуже скромну плату ...;)
Редагувати: Ось посилання 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 не поверне їх. Можливо, ви могли б трохи спростити вищевказаний код, але це з використанням мови, з якої ви почали. Після занадто багато пошуку, я нарешті знайшов документацію на бітмасках параметрів сайту :
Так 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)}
}
}
}
}
І ось воно в дії: