Answers:
编辑#3:更新参考文档。
编辑#2:多编辑一次,因为我在PS中写了一些东西来完全按照您的意图去做。在底部。
我要继续说一下,目前尚没有Powershell Friendly (tm)的方法。但是当然,您仍然可以使用Powershell进行必要的LDAP查询,以查看这些选项(如果您确实希望这样做)。签出与AD站点关联的每个服务器options
的NTDS Settings
对象的属性:
这就是repadmin.exe可以使用的确切属性,即位掩码。Repadmin.exe在其代码中包含一个友好的位掩码转换器。和ADSIEdit MMC管理单元一样。但是,您将需要在Powershell中重新创建该位掩码转换器。
例如,Repadmin /options <DC> [{+|-} IS_GC]
是一个有效的命令,现在我们确切知道它在哪个位上运行。
选项属性
一个位域,其中位的含义随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 ...如果您希望我为您编写一个Cmdlet,我将以非常适度的费用...;)
编辑:这是Microsoft链接Repadmin for Experts,它详细说明了repadmin options
和siteoptions
子命令之间的区别:
通过使用siteoptions子命令,我们可以更改NTDS站点设置对象上存储的options属性。
至于那个位图?甚至有记录吗?不确定。如果您能 你真是个炫耀,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
将迫使KCC的更高版本仅使用2003年以前的选项和算法。至于您的其余帖子,我也是这么认为的。感谢您的确认。
Ryan提到的文档省略了支持所有组合所必需的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