如何使用 PowerShell 查找 AD 站点选项(如+IS_INTER_SITE_AUTO_TOPOLOGY_DISABLED
在 PowerShell 中一样)?我一直在尝试以下命令,但无法让它输出任何有用的信息。
Get-ADObject -Filter 'objectClass -eq "site"' -Searchbase (Get-ADRootDSE).ConfigurationNamingContext` -Properties options
答案1
编辑#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 属性
位字段,其中位的含义因对象类而异。可出现在 Inter-Site-Transport、NTDS-Connection、NTDS-DSA、NTDS-Site-Settings 和 Site-Link 对象上。
以下是一个例子使用老式匹配规则运算符搜索选项:
(&(objectCategory=nTDSDSA)(options:1.2.840.113556.1.4.803:=1))
此筛选器使用 LDAP_MATCHING_RULE_BIT_AND 匹配规则运算符 (1.2.840.113556.1.4.803) 来查找选项属性的位掩码中设置了低位的 nTDSDSA 对象。低位对应于 Ntdsapi.h 中定义的 NTDSDSA_OPT_IS_GC 常量,用于标识全局编录服务器的 nTDSDSA 对象。有关匹配规则的详细信息,请参阅搜索筛选器语法。
噢,这听起来很有趣!
位掩码的一些其他值:
因此,您应该有足够的信息来推出您自己的Get-ADSiteOptions
Cmdlet...如果您想让我为您编写一个,我会的,但需要收取非常少的费用... ;)
编辑:这是微软的链接,Repadmin 专家版options
,其中详细说明了 repadmin 的和子命令之间的区别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 将不会返回它们。您可能可以稍微简化上述代码,但这是使用您开始使用的措辞。经过太多的搜索,我终于找到了文档站点选项位掩码:
因此,对于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. [email protected].
#>
[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)}
}
}
}
}
实际运行如下:
答案2
这文档提及瑞安省略了支持所有组合所需的 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
答案3
仅供大家参考,现在任何人遇到这个问题,它都在 Windows Server 2012 及更高版本的 PowerShell Active Directory 模块中。
Get-ADReplicationSite -属性 * | 选择 *