แก้ไข # 3: การอัปเดตเอกสารอ้างอิง
แก้ไข # 2: การแก้ไขอีกครั้งเพราะฉันเขียนบางสิ่งใน PS เพื่อทำสิ่งที่คุณพยายามทำ มันอยู่ที่ด้านล่าง
ฉันจะไปข้างหน้าและยืนยันว่าไม่มี Powershell Friendly (tm)วิธีการทำมันในปัจจุบัน แต่แน่นอนคุณยังสามารถใช้ Powershell เพื่อสร้างแบบสอบถาม LDAP ที่จำเป็นเพื่อดูตัวเลือกเหล่านี้หากคุณต้องการ ตรวจสอบoptions
คุณสมบัติของNTDS Settings
วัตถุของแต่ละเซิร์ฟเวอร์ที่เชื่อมโยงกับเว็บไซต์โฆษณา:

นั่นคือแอตทริบิวต์ที่แน่นอนซึ่งเป็น bitmask ซึ่ง repadmin.exe ทำงาน Repadmin.exe ประกอบด้วยตัวแปล bitmask ที่เป็นมิตรในรหัส ADSIEdit MMC เช่นเดียวกับสแนปอิน อย่างไรก็ตามคุณจะต้องสร้างตัวแปล bitmask ขึ้นใหม่ใน Powershell
ตัวอย่างเช่นRepadmin /options <DC> [{+|-} IS_GC]
เป็นคำสั่งที่ถูกต้องและตอนนี้เรารู้ว่าบิตที่มันทำงาน
นี่คือเอกสาร MSDN ที่ค่อนข้างเส็งเคร็งบนoptions
แอตทริบิวต์
เอกสาร MSDN ที่ดีขึ้นเกี่ยวกับoptions
คุณสมบัติ
คุณสมบัติตัวเลือก
บิตฟิลด์ซึ่งความหมายของบิตแตกต่างจาก objectClass ถึง objectClass สามารถเกิดขึ้นได้บน Inter-Site-Transport, การเชื่อมต่อ NTDS, NTDS-DSA, การตั้งค่าไซต์ NTDS และไซต์ลิงก์วัตถุ
และนี่คือตัวอย่างของการค้นหาตัวเลือกโดยใช้โอเปอเรเตอร์กฎการจับคู่แบบเก่า:
(&(objectCategory=nTDSDSA)(options:1.2.840.113556.1.4.803:=1))
ตัวกรองนี้ใช้ตัวดำเนินการกฎการจับคู่ LDAP_MATCHING_RULE_BIT_AND (1.2.840.113556.1.4.803) เพื่อค้นหาวัตถุ nTDSDSA ที่มีชุดบิตต่ำใน bitmask ของแอตทริบิวต์ตัวเลือก บิตลำดับต่ำซึ่งสอดคล้องกับค่าคงที่ NTDSDSA_OPT_IS_GC ที่กำหนดใน Ntdsapi.h ระบุวัตถุ nTDSDSA ของเซิร์ฟเวอร์แค็ตตาล็อกส่วนกลาง สำหรับข้อมูลเพิ่มเติมเกี่ยวกับกฎการจับคู่ดูไวยากรณ์ตัวกรองการค้นหา
โอ้ววเสียงนั่นสนุก!
ค่าอื่น ๆ สำหรับ bitmask:

ดังนั้นโดยที่คุณควรมีข้อมูลมากพอที่จะม้วนGet-ADSiteOptions
Cmdlet ของคุณเอง... ถ้าคุณต้องการให้ฉันเขียนหนึ่งสำหรับคุณฉันจะมีค่าใช้จ่ายที่เจียมเนื้อเจียมตัวมาก ... ;)
แก้ไข:นี่คือลิงก์ 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)}
}
}
}
}
และที่นี่มันมีการใช้งาน:
