답변:
편집 # 3 : 참조 문서 업데이트
편집 # 2 : PS로 무언가를 작성했기 때문에 편집하려고 한 번 더 편집 하십시오 . 바닥에 있습니다.
계속해서 현재 Powershell Friendly (tm) 방식이 없다고 주장 하겠습니다. 물론 Powershell을 사용하여 원하는 경우 이러한 옵션을 보는 데 필요한 LDAP 쿼리를 만들 수 있습니다. AD 사이트와 연결된 각 서버 options
의 NTDS 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-ADSiteOptions
Cmdlet 을 굴릴 수있는 충분한 정보를 가지고 있어야합니다 ... 당신이 내가 당신을 위해 하나를 쓰길 원한다면, 아주 저렴한 비용으로 ...;)
편집 : 다음은 repadmin의 하위 명령 과 하위 명령의 차이점을 자세히 설명 하는 Microsoft 링크 Repadmin for Experts 입니다.options
siteoptions
siteoptions 부속 명령을 사용하여 NTDS 사이트 설정 오브젝트에 저장된 옵션 속성을 변경할 수 있습니다.
그 비트 맵은? 심지어 문서화되어 있습니까? 확실하지 않다. 당신은 그런 대결입니다, MDMarra. ;)FORCE_KCC_WHISTLER_BEHAVIOR
면접의 의미가 무엇인지 말해 주시면 바로 고용해 드리겠습니다.
요약하자면, 각 도메인 컨트롤러 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)}
}
}
}
}
그리고 여기에 작동합니다 :
FORCE_KCC_WHISTLER_BEHAVIOR
에만 2003 시대 옵션과 알고리즘을 사용하는 KCC의 최신 버전을 강제로. 나머지 게시물은 그렇게 생각했습니다. 확인해 주셔서 감사합니다.
문서 에서 언급 한 라이언 모든 조합을 지원하는 데 필요한 생략합니다 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