Windows Server 2008 で Adprep /rodcprep
コマンドを実行するときにエラーが発生しました:パーティション DC=DomainDnsZones、DC=Contoso、DC=com のレプリカに Adprep が接続できませんでした
この記事では、1 つ以上の Active Directory NDNC のインフラストラクチャ マスターに到達できないため、 Adprep /rodcprep
コマンドが正常に完了しないという問題を解決します。
元の KB 番号: 949257
現象
Windows Server 2008 で Adprep /rodcprep
コマンドを実行すると、次のエラー メッセージが表示されます。
パーティション DC=DomainDnsZones、DC=Contoso、DC=com のレプリカに Adprep が接続できませんでした
Adprep は、パーティション DC=DomainDnsZones、DC=Contoso、DC=com での操作が失敗し、次のパーティションにスキップされました。
パーティション DC=ForestDnsZones、DC=Contoso、DC=com のレプリカに Adprep が接続できませんでした
Adprep で LDAP エラーが発生しました。 エラー コード: 0x0。 サーバー拡張エラー コード: 0x0、サーバー エラー メッセージ: (null)。
Adprep は、パーティション DC=ForestDnsZones、DC=Contoso、DC=com での操作が失敗し、次のパーティションにスキップしました。
Adprep がエラーで完了しました。 すべてのパーティションが更新されるわけではありません。
原因
この問題は、 Adprep /rodcprep
コマンドがフォレスト内の各アプリケーション パーティションのインフラストラクチャ マスターに接続しようとしたときに発生します。 このコマンドを実行して、読み取り専用ドメイン コントローラー (RODC) レプリケーションに必要なアクセス許可を設定します。 次のいずれかの条件に該当する場合、 Adprep /rodcprep
コマンドは失敗します。
- エラー メッセージで参照されているパーティションまたはパーティションは存在しなくなりました。
- 参照されるパーティションまたはパーティションのインフラストラクチャ マスターが強制的に降格されたか、オフラインになっています。
解決方法
パーティションが存在しなくなった場合にこの問題を解決するには、Dsmgmt ツールの "remove nc" パラメーターを使用して、孤立したパーティションのメタデータ クリーンアップを実行します。 詳細については、次の Microsoft Web サイトを参照してください。
指定したパーティションが存在する場合は、そのパーティションに対してオンラインになっているインフラストラクチャ ロール所有者を指定します。 これを行うには、「詳細情報」セクションの説明に従って、オブジェクトの fSMORoleOwner 属性を手動で変更します。
詳細
次のスクリプト サンプルでは、指定したドメイン以外の名前付けコンテキスト (NDNC) のインフラストラクチャ オブジェクトの fSMORoleOwner 属性をアクティブな、または接続可能なサーバーに変更します。 このサンプルの NDNC は、 DomainDnsZones,DC=contoso,DC=com NDNC 名前付けコンテキストです。 このスクリプトでは、次のコマンドを使用します。
cscript fixfsmo.vbs DC=DomainDnsZones,DC=contoso,DC=com
'-------fixfsmo.vbs------------------
const ADS_NAME_INITTYPE_GC = 3
const ADS_NAME_TYPE_1779 = 1
const ADS_NAME_TYPE_CANONICAL = 2
set inArgs = WScript.Arguments
if (inArgs.Count = 1) then
' Assume the command line argument is the NDNC (in DN form) to use.
NdncDN = inArgs(0)
Else
Wscript.StdOut.Write "usage: cscript fixfsmo.vbs NdncDN"
End if
if (NdncDN <> "") then
' Convert the DN form of the NDNC into DNS dotted form.
Set objTranslator = CreateObject("NameTranslate")
objTranslator.Init ADS_NAME_INITTYPE_GC, ""
objTranslator.Set ADS_NAME_TYPE_1779, NdncDN
strDomainDNS = objTranslator.Get(ADS_NAME_TYPE_CANONICAL)
strDomainDNS = Left(strDomainDNS, len(strDomainDNS)-1)
Wscript.Echo "DNS name: " & strDomainDNS
' Find a domain controller that hosts this NDNC and that is online.
set objRootDSE = GetObject("LDAP://" & strDomainDNS & "/RootDSE")
strDnsHostName = objRootDSE.Get("dnsHostName")
strDsServiceName = objRootDSE.Get("dsServiceName")
Wscript.Echo "Using DC " & strDnsHostName
' Get the current infrastructure fsmo.
strInfraDN = "CN=Infrastructure," & NdncDN
set objInfra = GetObject("LDAP://" & strInfraDN)
Wscript.Echo "infra fsmo is " & objInfra.fsmoroleowner
' If the current fsmo holder is deleted, set the fsmo holder to this domain controller.
if (InStr(objInfra.fsmoroleowner, "\0ADEL:") > 0) then
' Set the fsmo holder to this domain controller.
objInfra.Put "fSMORoleOwner", strDsServiceName
objInfra.SetInfo
' Read the fsmo holder back.
set objInfra = GetObject("LDAP://" & strInfraDN)
Wscript.Echo "infra fsmo changed to:" & objInfra.fsmoroleowner
End if
End if
パーティションのインフラストラクチャ マスターを特定するには、対象の名前付けコンテキスト ルートの下にあるインフラストラクチャ オブジェクトの fSMORoleOwner 属性に対してクエリを実行します。 たとえば、CN=Infrastructure,DC=DomainDnsZones,DC=contoso,DC=com 名前付けコンテキスト ルートの fSMORoleOwner 属性を照会して、DC=DomainDnsZones,DC=contoso,DC=com パーティションのインフラストラクチャ マスターを決定します。 同様に、CN=Infrastructure,DC=ForestDnsZones,DC=contoso,DC=com 名前付けコンテキスト ルートの fSMORoleOwner 属性を照会して、DC=ForestDnsZones,DC=contoso,DC=com パーティションのインフラストラクチャ マスターを決定します。
これらのクエリを実行するには、アクセス ツール、ACTIVE Directory サービス インターフェイス (ADSI) 編集ツール、ldifde ツールなどのツールを使用できます。 たとえば、次のクエリでは Idifde ツールを使用します。
ldifde -f Infra_DomainDNSZones.ldf -d "CN=Infrastructure,DC=DomainDnsZones,DC=contoso,DC=com" -l fSMORoleOwner
このクエリは、 DC=DomainDnsZones,DC=contoso,DC=com パーティションのインフラストラクチャ マスター ロール所有者を Infra_DomainDNSZones.ldf ファイルに返します。
Note
フォレストに損害を与えることなく、 Adprep /rodcprep
コマンドを複数回実行できます。 rodcprep コマンドの以前の実行で完了した操作は繰り返されません。
分離された環境で rodcprep
コマンドを実行する場合、操作を成功させるには、環境内で各ドメインと各アプリケーション ディレクトリ パーティションのインフラストラクチャ マスターを使用できる必要があります。