使用 PowerShell 检测 AD 站点选项

使用 PowerShell 检测 AD 站点选项

如何使用 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]是一个有效命令,现在我们确切地知道它对哪个位进行操作。

这是有关该属性的相对糟糕的 MSDN 文档options

有关该属性的更好的 MSDN 文档options

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-ADSiteOptionsCmdlet...如果您想让我为您编写一个,我会的,但需要收取非常少的费用... ;)

编辑:这是微软的链接,Repadmin 专家版options,其中详细说明了 repadmin 的和子命令之间的区别siteoptions

通过使用 siteoptions 子命令,我们可以更改存储在 NTDS 站点设置对象上的选项属性。

至于那个位图?它有文档记录吗?不确定。如果你能FORCE_KCC_WHISTLER_BEHAVIOR在面试中告诉我这意味着什么,我会当场雇用你。 你真是个爱炫耀的人,MDMarra。;)

总而言之,每个域控制器的对象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您给出的示例,您将寻找0x00000010options属性的值。

在此处输入图片描述

并运行 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. [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)}
            }
        }
    }
}

实际运行如下:

获取 ADSiteOptions

答案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 -属性 * | 选择 *

相关内容