回答:
編集#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ドキュメントです。
オプション属性
ビットフィールド。ビットの意味は、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は次のとおりです。options
siteoptions
siteoptionsサブコマンドを使用すると、NTDSサイト設定オブジェクトに格納されているオプション属性を変更できます。
そのビットマップは?文書化されていますか?わからない。 MDMarra、あなたはそのような誇示です。;)FORCE_KCC_WHISTLER_BEHAVIOR
面接の意味を教えていただければ、その場でお伺いします。
つまり、要約すると、各ドメインコントローラのオブジェクトの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スニペットを実行することから:
編集#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)}
}
}
}
}
そしてここでそれは動作しています:
FORCE_KCC_WHISTLER_BEHAVIOR
は、KCCの新しいバージョンが2003年のオプションとアルゴリズムのみを使用するように強制することを想定しています。残りの投稿についてはそう思いました。確認していただきありがとうございます。
文書で言及したライアンすべての組み合わせをサポートするために必要な省い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