使用 PowerShell 检测 AD 站点选项

MDM*_*rra 9 powershell active-directory

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

Get-ADObject -Filter 'objectClass -eq "site"' -Searchbase (Get-ADRootDSE).ConfigurationNamingContext` -Properties options
Run Code Online (Sandbox Code Playgroud)

Rya*_*ies 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 文档。

选项属性

位域,其中位的含义因对象类而异。可能发生在站点间传输、NTDS 连接、NTDS-DSA、NTDS 站点设置和站点链接对象上。

这是使用老式匹配规则运算符搜索选项的示例

(&(objectCategory=nTDSDSA)(options:1.2.840.113556.1.4.803:=1))
Run Code Online (Sandbox Code Playgroud)

此过滤器使用 LDAP_MATCHING_RULE_BIT_AND 匹配规则运算符 (1.2.840.113556.1.4.803) 来查找在 options 属性的位掩码中设置了低位的 nTDSDSA 对象。低位对应于 Ntdsapi.h 中定义的 NTDSDSA_OPT_IS_GC 常量,标识全局目录服务器的 nTDSDSA 对象。有关匹配规则的更多信息,请参阅搜索过滤器语法。

哦,男孩听起来很有趣!

位掩码的一些其他值:

在此处输入图片说明

因此,您应该有足够的信息来推出您自己的Get-ADSiteOptionsCmdlet ......如果你想让我为你写一个,我会的,费用非常适中......;)

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

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

至于那个位图?它甚至记录在案吗?没有把握。如果你能告诉我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 
}
Run Code Online (Sandbox Code Playgroud)

如果没有设置站点选项,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. 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)}
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这是在行动:

Get-ADSiteOptions

  • 回复:编辑 #2 - 你愿意嫁给我吗? (4认同)