PowerShellを使用したADサイトオプションの検出


9

PowerShellを使用して+IS_INTER_SITE_AUTO_TOPOLOGY_DISABLED、PowerShellのようにADサイトオプションを見つけるにはどうすればよいですか?私は次のコマンドをいじってみましたが、何か役に立つものを吐き出すことができません。

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

回答:


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ごとに異なります。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コマンドレットをロールバックするのに十分な情報が必要です...もし私があなたのためにそれを書いてほしければ、私はとても控えめな料金で...;)

編集: repadminのサブコマンドとの違いの詳細を説明するMicrosoftリンクRepadmin for Expertsは次のとおりです。optionssiteoptions

siteoptionsサブコマンドを使用すると、NTDSサイト設定オブジェクトに格納されているオプション属性を変更できます。

そのビットマップは?文書化されていますか?わからない。FORCE_KCC_WHISTLER_BEHAVIOR面接の意味を教えていただければ、その場でお伺いします。 MDMarra、あなたはそのような誇示です。;)

つまり、要約すると、各ドメインコントローラのオブジェクトのoptions属性CN=NTDS SettingsはDC固有のオプションに対応します。つまり、各サイトのオブジェクトrepadmin <DC> /optionsoptions属性はに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. 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


素晴らしい投稿!
Simon Catlin 2013年

1
ウィスラーは、オペレーティングシステムのXP / 2003時代のコードネームでした。私FORCE_KCC_WHISTLER_BEHAVIORは、KCCの新しいバージョンが2003年のオプションとアルゴリズムのみを使用するように強制することを想定しています。残りの投稿についてはそう思いました。確認していただきありがとうございます。
MDMarra 2013年

4
Re:編集#2-結婚してくれませんか?
MDMarra 2013年

スタークロスブロマンスです。
Ryan Ries 2013年

3

文書で言及したライアンすべての組み合わせをサポートするために必要な省い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

追加情報ありがとうございます。それをスクリプトに組み込んだ。
Ryan Ries
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.