Windowsシステム管理者にとって最も一般的な問題の一つは、信頼されたActive Directoryコンピューターがドメインから外れることです。悪名高い「このワークステーションとプライマリドメイン間の信頼関係が失敗しました」というエラーメッセージは非常によく見られます。
このガイドでは、私が20年以上にわたりActive Directoryを管理してきた経験から得たあらゆるトリックと、それをPowerShellで自動化する方法を学ぶことができます。
「このワークステーションとプライマリドメイン間の信頼関係が失敗しました」というエラーメッセージ
ADドメインがコンピューターを信頼しなくなるのは、おそらくローカルコンピューターのパスワードがActive Directoryに保存されているパスワードと一致しないためです。

ADがコンピューターを信頼するためには、2つのパスワードが同期している必要があります。同期していない場合、悪名高いエラーメッセージ「このワークステーションとプライマリドメイン間の信頼関係が失敗しました」が表示されます。
残念ながら、私や他のシス管が100%の確実性を持って解決策を見つけたことはありません。それがこのガイドを書いた理由です。
このガイドは、この問題を一度解決し、さらにPowerShellでプロセスを自動化するための唯一の情報源となることを目指しています。
Active Directoryコンピューターアカウントのパスワード
新しいコンピュータがActive Directoryに追加されると、パスワード付きのコンピュータアカウントが作成されます。デフォルトでは、そのパスワードは30日間有効です。30日後に自動的に変更されます。もし変更されたのにクライアントのパスワードが変更されていない場合、”このワークステーションとプライマリドメイン間の信頼関係が失敗しました”というエラーメッセージが表示されます。
既存のポリシーの表示
ドメイン全体のポリシーは、グループポリシー管理コンソール(GPMC)を開いて表示することができます。GPMC内で、デフォルトドメインポリシーをクリックし、コンピュータの構成 –> Windowsの設定 –> セキュリティ設定 > ローカルポリシー > セキュリティオプションに移動します。
セキュリティオプションに入ったら、以下に示すように、ドメインメンバー: 最大マシンアカウントパスワード寿命ポリシーを探します。

ADに参加しているコンピュータでは、regeditを開き、HKLM\SYSTEM\CurrentControlSet\Services\Netlogon\Parametersレジストリキーに移動し、以下に示すようにMaximumPasswordAge値を見つけます。

その際、DisablePasswordChange値を1に設定することで、ローカルコンピュータでのパスワード変更を完全に無効にすることもできます。
コンピュータアカウントが変更されると、ローカルコンピュータとADコンピュータアカウントの両方のパスワードが一緒に変更されるはずです。一時的に同期が取れなくなった場合に備えて、ADは現在のパスワードと前のパスワードを知っています。
コンピュータアカウントパスワード変更プロセス
通常、Netlogon Windowsサービスを使用している場合、コンピュータは自動的にパスワードの変更を開始します。これはコンピュータの再起動時や、コンピュータオブジェクトがADに認証する必要がある場合に行われます。
Netlogon Windowsサービスを使用すると、ローカルコンピュータがパスワードの変更シーケンスを開始します。コンピュータはまずドメインコントローラーでパスワードの変更を開始します。これが成功すると、ローカルのパスワードを一致させるために、HKLM\SECURITY\Policy\Secrets<hostname>.ACCレジストリキー内で変更を試みます。
通常、このプロセスは素晴らしく機能します。コンピュータが30日以上オフラインになっていても、ローカルコンピュータがパスワードの変更を開始するためです。
しかし、次のような問題が発生する場合があります:
- コンピュータがADコンピュータアカウントを変更するが、ローカルのパスワードを変更できない場合
- コンピュータがSysprepを実行せずに再イメージ化される場合
- OSが再インストールされ、古い有効なADコンピュータアカウントで認証を試みる場合
- …その他の場合
上記のいずれかが発生すると、「このワークステーションとプライマリ ドメイン間の信頼関係が失敗しました」というエラーメッセージが表示されます。
問題の確認
問題が存在することがわかったら、どのコンピュータに問題があるかを複製するか、少なくとも判断する方法はありますか?各コンピュータに対して対話的にログインを試みることもできますが、スケーラブルではなく、デスクから立ち上がりたくありません。できるかもしれません
ドメイン内のコンピュータのうち、この問題を根絶するために「このワークステーションとプライマリ ドメイン間の信頼関係が失敗しました」というエラーメッセージを持つものを特定するために、ローカルおよびリモートで実行できるスクリプトを作成しましょう。
まず第一に、ドメインの認証が機能していないと仮定するので、管理者グループのローカルユーザーアカウントを知る必要があります。ローカルの管理者パスワードを知っていることを願っています!
nltest(コマンドラインツール)
nltestは、コンピュータの信頼関係をテストする古いスクールのコマンドラインツールです。このツールは、RSATをインストールするときにインストールされるか、直接ドメインコントローラーで利用できます。
コンピュータにログオンしているときに、次のコマンドを実行することで信頼関係を確認できます:
警告: この方法は推奨されません。nltestは、起動されたユーザーコンテキストでのみ機能します。コンピュータの信頼関係が壊れている場合、ローカルユーザーとしてログインしている場合、ローカルユーザーの資格情報を使用してドメインに接続しようとします。これにより、アクセスが拒否されます。
netdom(コマンドラインツール)
netdomは、信頼関係を確認するための別のコマンドラインツールです。このツールは、RSATをインストールすると同時にインストールされるか、またはドメインコントローラー上で直接利用することができます。
netdom verify
を使用して、信頼関係を確認するには、以下の情報を提供します:
- 確認するコンピュータ名
- ドメインのFQDN
- リクエストを認証するユーザー名
- ユーザーアカウントのパスワード
以下は例です:
PasswordO
パラメータに*
の値を指定すると、netdomはパスワードの入力を求めます。
Test-ComputerSecureChannel (PowerShell)
「このワークステーションとプライマリドメイン間の信頼関係が失敗しました」という問題を解決する最良の方法の1つは、Test-ComputerSecureChannel
コマンドレットを使用することです。このPowerShellコマンドレットはWindows 10に付属しており、使いやすくなっています。
Test-ComputerSecureChannel
のコマンドレットは、Windows 10コンピューター上でローカルに動作します。コンピューターに対話的にログインした状態で、PowerShellコンソールを開き、パラメータなしでTest-ComputerSecureChannel
を実行します。信頼関係が有効かどうかに応じて、TrueまたはFalseが返されます。
また、Server
パラメータを使用して、パスワードが同期されているかどうかを確認するために特定のドメインコントローラーを指定することもできます。
このコマンドレットは使用方法が簡単で、Repair
オプションもありますが、修正のデモンストレーションは後で行います。
対象のコンピューターのローカル管理者パスワードを知っていて、それらのコンピューターでPowerShellリモートが有効になっている場合、Invoke-Command
コマンドレットも使用できます。Invoke-Command
コマンドレットを使用することで、一度に1台または複数のコンピューターでTest-ComputerSecureChannel
をリモートで実行できます。
一括で信頼関係をチェックする
これで、信頼関係をリモートでチェックする方法がわかったので、すべてのADコンピューターをチェックするために使用できるコードスニペットを紹介します!このスクリプトでは、まずコンピューターがオンラインであることを確認しています。オンラインでない場合はOfflineを返し、そうでない場合はTest-ComputerSecureChannel
を各コンピューターで実行し、TrueまたはFalseを返します。
問題を理解することは最初のステップですが、それを修正するにはどうすればよいのでしょうか?コンピューターアカウントをローカルコンピューターに保存されているものとADに保存されているものと同じにする必要があることをすでに知っています。
「このワークステーションとプライマリドメイン間の信頼関係が失敗しました」という問題に対するさまざまな「解決策」があります。これらの解決策はGUI、PowerShell、または古いコマンドラインツールを使用して行うことができます。
- ADでコンピューターアカウントのパスワードをリセットする
- ローカルコンピューターアカウントのパスワードをリセットする
- Windowsコンピューターを離脱し、再参加する
- コンピューターアカウントを完全に削除し、Windowsコンピューターを再参加する
たくさんのオプションがありますね! このガイドでは、この問題をPowerShellとコマンドラインツールを使用して修正する方法に焦点を当てます(完全性のために)。 まだPowerShellを使用していない場合は、使用してみる価値があります!
問題の解決:コンピューターパスワードのリセット
netdom(コマンドラインツール)
A trust can be repaired and the “the trust relationship between this workstation and the primary domain failed” error message can be eliminated by using the old-school netdom command-line tool. If you’re logged into the computer locally as an administrative user, you can run netdom resetpwd to initiate the password reset sequence as shown below.
この例では:
- DCはドメインコントローラーの名前です
- abertramはコンピューターアカウントをリセットする権限を持つActive Directoryユーザーアカウントの名前です
- *はパスワードのプロンプトが表示されるユーザーアカウントのパスワードのプレースホルダーです。
Reset-ComputerMachinePassword(PowerShell)
信頼関係を修復するための最良の方法の1つは、Reset-ComputerMachinePassword
コマンドレットを使用することです。このコマンドレットはローカルコンピューターで実行され、パスワードのリセットシーケンスを開始します。構文は非常にシンプルです。
特定のDCをリセットする場合は、Server
パラメーターを使用してオプションの資格情報とともに指定することもできます(デフォルトではローカルユーザーが使用されます)。
以下の例では、ADのユーザー名とパスワードを入力するように促され、ローカルコンピュータおよびDCドメインコントローラーのパスワードをリセットしようとします。
これは、Invoke-Command
を使用してリモートで実行することもできますが、コンピュータにPowerShellリモートが利用可能である場合に限ります。以下では、コンピュータのローカル管理者アカウントのユーザー名とパスワードを取得しています。また、このコンピュータのADアカウントパスワードをリセットする権限を持つ資格情報も取得しています。そして、$domainCredential
を$using
構文を使用してリモートセッションに渡しています。
コンピュータアカウントがActive Directoryから削除されている場合でも、これは動作します。同じ名前のコンピュータアカウントを作成し、
Reset-ComputerMachinePassword
を使用してパスワードを同期させることができます。
一括でローカルコンピュータアカウントのパスワードをリセットする
「このワークステーションとプライマリドメインの間の信頼関係が失敗しました」というエラーを一度に複数のコンピュータで解消したいですか?問題ありません。便利なforeachループを使用して、Reset-ComputerMachinePassword
を一括で実行できます。
Test-ComputerSecureChannel -Repair (PowerShell)
パスワード変更プロセスを開始する別の方法は、Test-ComputerSecureChannel
を実行し、今回はRepair
オプションを使用することです。私の理解では、このプロセスはReset-ComputerMachinePassword
を使用する場合と同じです。コンピュータのコンソールでRepair
パラメータとCredential
パラメータを使用してください。
ここでは常にCredential
パラメータを使用してください。使用しない場合、nltestユーティリティと同様にローカルアカウントを使用しようとして機能しなくなります。
一括で信頼関係を修復する
これを以前使用していた便利なforeachループに追加し、問題なく解決できます。
問題の修正:ドメインへの再参加
コンピュータアカウントのパスワードをリセットしてもうまくいかない場合、常に最後の手段があります。コンピュータをActive Directoryドメインに再参加することができます。常に必要ではありませんが、このアプローチを使用する必要がある場合もあります。
一部の報告では、再参加は必要ないという情報も聞きました。新しい参加を強制するだけで済む場合もあります。個別にご確認ください。
次のようにすることができます:
- ローカルの管理者アカウントでコンピュータにログオンする
- システムのプロパティに移動する
- 変更をクリックする
- ワークグループに設定する
- 再起動する
- ドメインに戻す
couldという言葉に注目してください。これは行わないでください。PowerShellで自動化できるため、時間の無駄です。
PowerShellを使用して、ドメインからの離脱とドメインへの参加を行う方法は2つあります。
CIMを使用する
PowerShellを使用してドメインに参加(または離脱)するには、Win32_ComputerSystem CIMクラスを使用します。このクラスには、コンピュータをドメインに参加させるUnJoinDomainOrWorkgroup()
メソッドとJoinDomainOrWorkGroup()
メソッドがあります。
CIMなので、これはローカルと同様に簡単にリモートで実行できます。デスクから快適にリモートで実行することを想定しているため、以下のコードスニペットをご覧ください。
「このワークステーションとプライマリ ドメインの信頼関係が失敗しました」というエラーが消えます!
上記のFUnjoinOptions
パラメータに注目してください。ここでは4を指定しました。これは、コンピュータを手動で離脱するときのデフォルトの動作を実行します。このオプションでは、Active Directory内のコンピュータアカウントを無効にします(アカウントが見つかる場合)。この動作を避けたい場合は、ここでオプション0を使用できます。
コンピュータが離脱したら、JoinDomainOrWorkGroup()
メソッドを使用してドメインに再参加できます。
上記のFJoinOptions
パラメーターに注意してください。ここでは3を指定しました。これにより、コンピューターを手動で参加させる場合のデフォルトの動作が行われます。このオプションはADコンピューターアカウントを作成します。JoinDomainOrWorkgroupのドキュメントには、他にも特定のOUに追加するなどのオプションがあります。
ヒント:複数のコンピューターを指定することで、このメソッドを使用して一度に複数のコンピューターを参加または再参加させることもできます。これは
Get-CimInstance
のComputerName
パラメーターで指定します。
Remove-ComputerおよびAdd-Computerコマンドレットの使用
PowerShellでは、組み込みのPowerShellコマンドレットでコンピューターをドメインに参加させたり、ドメインから離脱させたりすることもできます。Remove-Computer
およびAdd-Computer
コマンドレットを使用できます。
PowerShellを使用してコンピュータを非参加状態にするには、コンピュータのコンソールにログインし、Remove-Computer
コマンドレットを使用します。コンピュータを非参加状態にするための権限を持つドメインの資格情報を提供します。また、Restart
パラメータを指定して非参加後に再起動を強制し、Force
を指定して確認のプロンプトを表示しないようにすることもできます。
コンピュータが再起動されたら、Add-Computer
コマンドレットを使用してPowerShellでコンピュータをドメインに参加させることができます。また、Add-Computer
コマンドレットを使用してリモートでコンピュータに接続する場合は、ComputerName
パラメータを指定します。接続にはローカルユーザーの資格情報を使用し、ドメインの資格情報で認証します。
再起動後、もう「このワークステーションとプライマリドメイン間の信頼関係が失敗しました」というエラーメッセージが表示されないことを願っています。
自動ドメインの非参加と参加
このプロセスを何度も繰り返す必要があったため、すべてを自動化するPowerShellスクリプトを作成しました。コンピュータの名前を指定すれば、次のことを行います:
- コンピュータを非参加状態にする
- 再起動して再起動を待つ
- コンピュータに参加する
- 再起動して再起動を待つ
このスクリプトはGitHubで試すことができます。
概要
「ワークステーションとプライマリドメイン間の信頼関係が失敗しました」というエラーメッセージの問題と、複数の解決策について、おそらく完全に理解しているはずです。このガイドがいくつかの洞察を提供し、コンピュータがドメインから外れる問題に対する独自の解決策を見つけるのに役立てば幸いです!
さらなる情報
関連する他の投稿もチェックしてみてください!