PowerShell을 사용하여 AD 사이트 옵션 감지


9

PowerShell을 사용하여 PowerShell과 같은 AD 사이트 옵션을 찾으려면 어떻게 +IS_INTER_SITE_AUTO_TOPOLOGY_DISABLED해야합니까? 나는 다음 명령으로 놀고 있었지만 유용한 것을 뱉을 수는 없다.

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

답변:


17

편집 # 3 : 참조 문서 업데이트

편집 # 2 : PS로 무언가를 작성했기 때문에 편집하려고 한 번 더 편집 하십시오 . 바닥에 있습니다.

계속해서 현재 Powershell Friendly (tm) 방식이 없다고 주장 하겠습니다. 물론 Powershell을 사용하여 원하는 경우 이러한 옵션을 보는 데 필요한 LDAP 쿼리를 만들 수 있습니다. AD 사이트와 연결된 각 서버 optionsNTDS Settings개체 특성을 확인하십시오 .

여기에 이미지 설명을 입력하십시오

이것이 repadmin.exe가 작동하는 정확한 속성 인 비트 마스크입니다. Repadmin.exe에는 코드에 친숙한 비트 마스크 번역기가 포함되어 있습니다. ADSIEdit MMC 스냅인도 마찬가지입니다. 그러나 Powershell에서 해당 비트 마스크 변환기를 다시 작성해야합니다.

예를 들어, Repadmin /options <DC> [{+|-} IS_GC]유효한 명령이므로 이제 어떤 비트가 작동하는지 정확히 알고 있습니다.

다음은 options속성 에 대한 비교적 까다로운 MSDN 설명서입니다 .

options속성 에 대한 더 나은 MSDN 설명서 .

옵션 속성

비트의 의미. 비트의 의미는 objectClass마다 다릅니다. 사이트 간 전송, 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)를 사용하여 options 속성의 비트 마스크에 하위 비트가 설정된 nTDSDSA 객체를 찾습니다. Ntdsapi.h에 정의 된 NTDSDSA_OPT_IS_GC 상수에 해당하는 하위 비트는 글로벌 카탈로그 서버의 nTDSDSA 객체를 식별합니다. 일치하는 규칙에 대한 자세한 내용은 검색 필터 구문을 참조하십시오.

오, 그 소리 재미 있어요!

비트 마스크에 대한 다른 값들 :

여기에 이미지 설명을 입력하십시오

그래서 당신은 당신 자신의 Get-ADSiteOptionsCmdlet 을 굴릴 수있는 충분한 정보를 가지고 있어야합니다 ... 당신이 내가 당신을 위해 하나를 쓰길 원한다면, 아주 저렴한 비용으로 ...;)

편집 : 다음은 repadmin의 하위 명령 과 하위 명령의 차이점을 자세히 설명 하는 Microsoft 링크 Repadmin for Experts 입니다.optionssiteoptions

siteoptions 부속 명령을 사용하여 NTDS 사이트 설정 오브젝트에 저장된 옵션 속성을 변경할 수 있습니다.

그 비트 맵은? 심지어 문서화되어 있습니까? 확실하지 않다. FORCE_KCC_WHISTLER_BEHAVIOR면접의 의미가 무엇인지 말해 주시면 바로 고용해 드리겠습니다. 당신은 그런 대결입니다, MDMarra. ;)

요약하자면, 각 도메인 컨트롤러 options에 대한 CN=NTDS Settings개체 의 속성 은 DC 특정 옵션에 해당합니다 . 즉, 각 사이트 아래 에있는 개체 repadmin <DC> /optionsoptions속성은에 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 스 니펫을 실행하여 :

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)}
            }
        }
    }
}

그리고 여기에 작동합니다 :

Get-ADSiteOptions


환상적인 포스트!
Simon Catlin

1
휘슬러는 XP / 2003 시대 운영 체제의 코드 명이었습니다. 나는 가정 FORCE_KCC_WHISTLER_BEHAVIOR에만 2003 시대 옵션과 알고리즘을 사용하는 KCC의 최신 버전을 강제로. 나머지 게시물은 그렇게 생각했습니다. 확인해 주셔서 감사합니다.
MDMarra

4
다시 : 편집 # 2-결혼 해 줄래?
MDMarra

별이 교차하는 동요입니다.
Ryan Ries

3

문서 에서 언급 한 라이언 모든 조합을 지원하는 데 필요한 생략합니다 2 NTDSettings 옵션을 선택합니다. 아래의 값을 찾으십시오 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)

에 의해 단순화 될 수있다

SiteOptions=[nTDSSiteSettingsFlags]$SiteSettings.Options

추가 정보를 주셔서 감사합니다. 스크립트에 포함 시켰습니다.
Ryan Ries
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.