Phát hiện các tùy chọn Trang web AD bằng PowerShell


9

Làm cách nào tôi có thể sử dụng PowerShell để tìm các tùy chọn trang AD như +IS_INTER_SITE_AUTO_TOPOLOGY_DISABLEDtrong PowerShell? Tôi đã chơi xung quanh với lệnh sau, nhưng không thể lấy nó để nhổ bất cứ thứ gì hữu ích.

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

Câu trả lời:


17

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 optionsthuộ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:

nhập mô tả hình ảnh ở đây

Đó 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ề optionsthuộc tính.

Tài liệu MSDN tốt hơn về optionsthuộ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:

nhập mô tả hình ảnh ở đây

Vì vậy, với điều đó bạn nên có đủ thông tin để cuộn Get-ADSiteOptionsCmdlet 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 optionsvà các siteoptionstiể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, optionsthuộ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 optionsthuộ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 :

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ị 0x00000010cho optionsthuộc tính.

nhập mô tả hình ảnh ở đây

Và từ việc chạy đoạn trích Powershell:

Tùy chọn trang web với 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:

Nhận-ADSiteOptions


Một bài viết tuyệt vời!
Simon Catlin

1
Whistler là tên mã cho kỷ nguyên XP / 2003 của các hệ điều hành. Tôi giả định FORCE_KCC_WHISTLER_BEHAVIORsẽ buộc các phiên bản sau của KCC chỉ sử dụng các tùy chọn và thuật toán của thời đại 2003. Đối với phần còn lại của bài viết của bạn, tôi nghĩ như vậy. Cảm ơn về lời xác nhận.
MDMarra

4
Re: chỉnh sửa # 2 - Bạn sẽ cưới tôi chứ?
MDMarra

Đó là một ngôi sao băng qua sao.
Ryan Ries

3

Các tài liệu được đề cập bởi Ryan bỏ qua 2 NTDSettings Tùy chọn cần thiết để hỗ trợ tất cả các kết hợp. Vui lòng tìm bên dưới những giá trị được tìm thấy trong 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)

có thể được đơn giản hóa bởi

SiteOptions=[nTDSSiteSettingsFlags]$SiteSettings.Options

Cảm ơn bạn đã thông tin thêm. Tôi đã kết hợp nó vào kịch bản của mình.
Ryan Ries
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.