使用PowerShell检测AD网站选项


9

如何使用PowerShell在PowerShell中查找AD站点选项+IS_INTER_SITE_AUTO_TOPOLOGY_DISABLED?我一直在使用以下命令,但是无法吐出任何有用的东西。

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

Answers:


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 ...如果您希望我为您编写一个Cmdlet,我将以非常适度的费用...;)

编辑:这是Microsoft链接Repadmin for Experts,它详细说明了repadmin optionssiteoptions子命令之间的区别:

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

至于那个位图?甚至有记录吗?不确定。如果您能FORCE_KCC_WHISTLER_BEHAVIOR在面试中告诉我什么意思,我会当场雇用您。 你真是个炫耀,MDMarra。;)

综上所述,每个域控制器optionsCN=NTDS Settings对象上的属性对应于DC特定的选项,即repadmin <DC> /options,而每个站点下optionsCN=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以您给出的示例为例,您将在寻找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. 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


精彩的帖子!
西蒙·卡特林

1
惠斯勒是XP / 2003时代的代号。我认为FORCE_KCC_WHISTLER_BEHAVIOR将迫使KCC的更高版本仅使用2003年以前的选项和算法。至于您的其余帖子,我也是这么认为的。感谢您的确认。
MDMarra 2013年

4
回复:编辑#2-你愿意嫁给我吗?
MDMarra 2013年

这是星际穿越的壮丽。
瑞安·里斯

3

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

感谢您提供其他信息。我已将其合并到脚本中。
瑞安·里斯
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.