AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 543143
Accepted
MDMarra
MDMarra
Asked: 2013-10-02 18:09:10 +0800 CST2013-10-02 18:09:10 +0800 CST 2013-10-02 18:09:10 +0800 CST

使用 PowerShell 检测 AD 站点选项

  • 772

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

Get-ADObject -Filter 'objectClass -eq "site"' -Searchbase (Get-ADRootDSE).ConfigurationNamingContext` -Properties options
active-directory
  • 2 2 个回答
  • 4500 Views

2 个回答

  • Voted
  1. Best Answer
    Ryan Ries
    2013-10-02T20:11:03+08:002013-10-02T20:11:03+08:00

    编辑#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属性的相对蹩脚的 MSDN 文档。

    options关于属性的更好的 MSDN 文档。

    选项属性

    位域,其中位的含义因对象类而异。可能发生在站点间传输、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) 来查找在选项属性的位掩码中设置了低位的 nTDSDSA 对象。对应于 Ntdsapi.h 中定义的 NTDSDSA_OPT_IS_GC 常量的低位位标识全局编录服务器的 nTDSDSA 对象。有关匹配规则的更多信息,请参阅搜索过滤器语法。

    哦,男孩,这听起来很有趣!

    位掩码的其他一些值:

    在此处输入图像描述

    因此,您应该有足够的信息来推出您自己的Get-ADSiteOptionsCmdlet ...

    编辑:这是 Microsoft 链接Repadmin for Experts ,其中详细说明了repadminoptions和子命令之间的区别: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对于您给出的示例,您将寻找属性的0x00000010值options。

    在此处输入图像描述

    通过运行 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

    • 17
  2. Axel Limousin
    2014-05-29T07:25:51+08:002014-05-29T07:25:51+08:00

    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
    
    • 3

相关问题

  • 如果以域用户身份远程登录,PC 速度极慢

  • 如何在 Windows 2003 的 ou 级别应用策略

  • 允许用户更改其 Active Directory 密码的 Web 界面

  • MOSS 2007 无法使用 ActiveDirectoryMembershipProvider 配置表单身份验证

  • 通过 VPN 更改 Active Directory 密码

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve