Chỉnh sửa # 3: Cập nhật tài liệu tham khảo.
Chỉnh sửa # 2: Chỉnh sửa một lần nữa vì tôi đã viết một cái gì đó trong PS để làm chính xác những gì bạn đang cố gắng làm. Nó ở dưới cùng.
Tôi sẽ tiếp tục và khẳng định rằng hiện tại không có cách nào thân thiện với Powershell (tm) . Nhưng tất nhiên bạn vẫn có thể sử dụng Powershell để đặt truy vấn LDAP cần thiết để xem các tùy chọn này nếu bạn thực sự muốn. Kiểm tra options
thuộc tính của NTDS Settings
đối tượng của mỗi máy chủ được liên kết với một trang web AD:
Đó là thuộc tính chính xác, là một bitmask, repadmin.exe hoạt động trên. Repadmin.exe chứa một trình dịch bitmask thân thiện trong mã của nó. Cũng như snap-in MMC ADSIEdit. Tuy nhiên, bạn sẽ cần phải tạo lại trình dịch bitmask trong Powershell.
Ví dụ, Repadmin /options <DC> [{+|-} IS_GC]
là một lệnh hợp lệ và bây giờ chúng ta biết chính xác bit nào mà nó hoạt động.
Dưới đây là tài liệu MSDN tương đối nhảm nhí về options
thuộc tính.
Tài liệu MSDN tốt hơn về options
thuộc tính.
Tùy chọn Thuộc tính
Một bitfield, trong đó ý nghĩa của các bit thay đổi từ objectClass sang objectClass. Có thể xảy ra trên các đối tượng Inter-Site-Transport, NTDS-Connection, NTDS-DSA, NTDS-Site-Settings và Site-Link.
Và đây là một ví dụ về tìm kiếm các tùy chọn bằng cách sử dụng các toán tử quy tắc khớp trường cũ:
(&(objectCategory=nTDSDSA)(options:1.2.840.113556.1.4.803:=1))
Bộ lọc này sử dụng toán tử quy tắc khớp LDAP_MATCHING_RULE_BIT_AND (1.2.840.113556.1.4.803) để tìm các đối tượng nTDSDSA có bit thứ tự thấp được đặt trong bitmask của thuộc tính tùy chọn. Bit thứ tự thấp, tương ứng với hằng số NTDSDSA_OPT_IS_GC được xác định trong Ntdsapi.h, xác định đối tượng nTDSDSA của máy chủ Danh mục chung. Để biết thêm thông tin về quy tắc khớp, hãy xem Cú pháp bộ lọc tìm kiếm.
Oh boy làm điều đó nghe có vẻ vui!
Một số giá trị khác cho bitmask:
Vì vậy, với điều đó bạn nên có đủ thông tin để cuộn Get-ADSiteOptions
Cmdlet của riêng bạn ... nếu bạn muốn tôi viết một cái cho bạn, tôi sẽ, với một khoản phí rất khiêm tốn ...;)
Chỉnh sửa: Đây là liên kết Microsoft, Repadmin for Experts , chi tiết về sự khác biệt giữa options
và các siteoptions
tiểu ban của repadmin:
Bằng cách sử dụng tiểu ban trang web, chúng tôi có thể thay đổi thuộc tính tùy chọn được lưu trữ trên Đối tượng Cài đặt Trang web của NTDS.
Đối với bitmap đó? Nó thậm chí còn được ghi nhận? Không chắc. Nếu bạn có thể cho tôi biết FORCE_KCC_WHISTLER_BEHAVIOR
ý nghĩa của một cuộc phỏng vấn, tôi sẽ thuê bạn ngay tại chỗ. Bạn thật là phô trương, MDMarra. ;)
Vì vậy, chỉ cần tóm tắt, options
thuộc tính trên CN=NTDS Settings
đối tượng cho mỗi bộ điều khiển miền tương ứng với các tùy chọn dành riêng cho DC, nghĩa là repadmin <DC> /options
, trong khi options
thuộc tính trên CN=NTDS Site Settings
đối tượng dưới mỗi trang web tương ứng repadmin /siteoptions
.
Vì vậy, để cuối cùng trả lời câu hỏi của bạn. Nhận các tùy chọn trang web cụ thể, không phải tùy chọn DC:
ForEach($Site In (Get-ADObject -Filter 'objectClass -eq "site"' -Searchbase (Get-ADRootDSE).ConfigurationNamingContext))
{
Get-ADObject "CN=NTDS Site Settings,$($Site.DistinguishedName)" -Properties Options
}
Nếu không có tùy chọn trang nào được đặt, Powershell sẽ không trả lại chúng. Bạn có thể đơn giản hóa mã trên một chút nhưng đó là cách sử dụng cách nói mà bạn đã bắt đầu. Sau khi tìm kiếm quá nhiều, cuối cùng tôi đã tìm thấy tài liệu về các tùy chọn trang web bitmask :
Vì vậy, đối với IS_INTER_SITE_AUTO_TOPOLOGY_DISABLED
điều đó bạn đã đưa ra làm ví dụ, bạn sẽ tìm kiếm một giá trị 0x00000010
cho options
thuộc tính.
Và từ việc chạy đoạn trích Powershell:
Chỉnh sửa # 2: Tôi đã viết cho bạn một cái gì đó ngày hôm nay:
#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)}
}
}
}
}
Và đây là hành động: