Windows Server 2008 でコマンドを Adprep /rodcprep 実行するときにエラーが発生しました:パーティション DC=DomainDnsZones、DC=Contoso、DC=com のレプリカに Adprep が接続できませんでした

この記事では、1 つ以上の Adprep /rodcprep Active Directory NDNC のインフラストラクチャ マスターに到達できないため、コマンドが正常に完了しないという問題を解決します。

適用対象: Windows Server 2012 R2
元の 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) レプリケーションに必要なアクセス許可 Read-Only 設定します。 Adprep /rodcprep次のいずれかの条件が true の場合、コマンドは失敗します。

  • エラー メッセージで参照されているパーティションまたはパーティションが存在しなくなりました。
  • 参照されるパーティションまたはパーティションのインフラストラクチャ マスターが強制的に降格されているか、オフラインです。

解決方法

パーティションが存在しなくなった場合にこの問題を解決するには、Dsmgmt ツールの "remove nc" パラメーターを使用して、孤立したパーティションのメタデータ クリーンアップを実行します。 詳細については、次のマイクロソフト 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 パーティションのインフラストラクチャ マスターを決定します。

これらのクエリを実行するには、LDP ツール、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 ファイルに返します。

注:

フォレストに害を与えずに Adprep /rodcprep コマンドを複数回実行できます。 rodcprep コマンドの以前の実行で完了した操作は繰り返されません。

分離された環境でコマンドを rodcprep 実行しようとすると、操作を成功させるには、環境内で各ドメインと各アプリケーション ディレクトリ パーティションのインフラストラクチャ マスターを使用できる必要があります。