【Entra Connect】同期スケジュールがズレる原因とPowerShell管理術
※本記事には広告を含みます。
はじめに
オンプレミスのActive Directory(AD)で新入社員のアカウントを作成したり、部署異動に伴う属性変更を行ったりした際、「毎時00分と30分にEntra IDへ同期されるはずなのに、なぜか今日は12分と42分に同期が走っている」と疑問に思ったことはないでしょうか。
私も過去に、夜間バッチでADの属性を一括更新した直後にEntra Connectの同期が走るよう「02:00」に合わせて設計したものの、数週間後には同期タイミングがズレてバッチ処理と競合し、属性反映漏れが起きて冷や汗をかいた経験があります。
Microsoft Entra Connect(旧Azure AD Connect)の標準スケジューラには、固定時刻ではなく「前回完了時からのインターバル」で次回実行を決める独特の仕様があり、これが同期時刻のズレ(ドリフト現象)を引き起こします。
この記事では、Entra Connectの同期スケジュールが少しずつ後ろ倒しになる技術的な原因と、PowerShell(ADSync モジュール)を使ったスケジュール確認・手動同期の実践手順を解説します。
読み終えるころには、同期タイミングを正確に把握し、緊急のアカウント反映やバッチ連携のトラブルを迷わず制御できるようになります。
この記事の要点
- Entra Connectの既定スケジュール(30分周期)は「前回の同期完了時刻+30分」で計算されるため、同期処理にかかった時間分だけ毎回後ろへズレる(ドリフトする)
- 現在のスケジュール設定や次回の正確な実行予定時刻(UTC)は
Get-ADSyncSchedulerコマンドで即座に確認できる - 緊急のアカウント反映には
Start-ADSyncSyncCycle -PolicyType Deltaを使い、時刻を厳密に固定したい場合は内蔵スケジューラを停止してタスクスケジューラで制御する
| 項目 | 動作確認・検証環境 |
|---|---|
| 検証年月 | 2026年9月 |
| 対象OS | Windows Server 2022 Standard |
| 対象ツール | Microsoft Entra Connect Sync v2.4.x / Windows PowerShell 5.1 |
| 必要権限 | Entra Connectサーバーのローカル管理者権限(またはADSyncAdmins) |
結論:Entra Connectの同期時刻がズレる(ドリフトする)理由
結論からお伝えすると、Entra Connectの同期スケジュールが少しずつズレていくのは異常ではなく、「前回の同期サイクルが完了した時点から30分後」に次回実行時刻を再セットする仕様(完了起点インターバル方式) だからです。
多くの管理者は「30分間隔=毎時00分と30分に固定で起動する(Cronやタスクスケジューラのような開始起点方式)」と誤解しがちですが、Entra Connectの内蔵スケジューラは異なる動きをします。
1. 「完了時刻+30分」で積み重なるドリフトの仕組み
例えば、10:00:00に同期が開始され、インポートやエクスポートの処理に「2分15秒」かかったとします。
- 1回目開始:
10:00:00 - 1回目完了:
10:02:15(所要時間:2分15秒) - 2回目予定時刻の算出: 完了時刻
10:02:15+ 30分 =10:32:15 - 2回目完了:
10:34:40(所要時間:2分25秒) - 3回目予定時刻の算出: 完了時刻
10:34:40+ 30分 =11:04:40
このように、1回の同期に2分かかれば、1日で約96分(2分×48回)も実行タイミングが後ろ倒しになります。オブジェクト数が多い環境や、大量の属性変更が発生した日は同期処理自体が長引くため、ズレ幅はさらに大きくなります。
2. 内蔵スケジューラとタスクスケジューラの挙動比較
標準の内蔵スケジューラと、一般的なOSタスクスケジューラの挙動の違いを以下の表にまとめました。
| 比較項目 | Entra Connect 内蔵スケジューラ(既定) | Windows タスクスケジューラ連携(カスタム) |
|---|---|---|
| 周期の計算基準 | 前回の同期完了時刻 + 30分 | 指定した開始時刻 から30分ごと(固定) |
| 時刻のズレ(ドリフト) | 発生する(処理時間の分だけ毎回後ろ倒し) | 発生しない(毎時00分・30分等に固定可能) |
| 重複実行の防止 | 自動制御(完了後にカウント開始するため重複しない) | タスク側の多重起動防止設定とエラーハンドリングが必要 |
| 最小設定間隔 | 30分(30分未満の設定はシステム上不可) | 任意(ただしMicrosoftサポート要件上、30分以上を推奨) |
| 推奨される用途 | 一般的なハイブリッドID運用(標準推奨) | AD更新バッチ等と分単位で実行時刻を合わせる必要がある環境 |
この表の通り、通常の運用であれば内蔵スケジューラのままで問題ありません。無理に毎時00分に固定しなくても、約30分おきに同期されるサイクル自体は維持されるためです。
PowerShellで現在の同期スケジュールと次回実行時刻を確認する手順
「次の自動同期があと何分後に走るのか」を正確に調べたい場合は、Entra Connectが稼働しているサーバー上でPowerShellを管理者として起動し、ADSync モジュールのコマンドレットを実行します。
1. Get-ADSyncScheduler の実行と出力の読み解き方
以下のコマンドを実行すると、現在のスケジューラ設定と次回予定時刻が一覧表示されます。
# ADSyncモジュールの読み込み(自動ロードされない場合)
Import-Module ADSync
# スケジューラの現在の状態を取得
Get-ADSyncScheduler
実行すると、以下のような出力が返ってきます。
AllowedSyncCycleInterval : 00:30:00
CurrentlyEffectiveSyncCycleInterval : 00:30:00
CustomizedSyncCycleInterval :
NextSyncCyclePolicyType : Delta
NextSyncCycleStartTimeInUTC : 2026/09/15 06:18:42
PurgeRunHistoryInterval : 7.00:00:00
SyncCycleEnabled : True
MaintenanceEnabled : True
StagingModeEnabled : False
SchedulerSuspended : False
ここで確認すべき重要なプロパティは以下の4つです。
CurrentlyEffectiveSyncCycleInterval: 現在有効な同期間隔(既定は00:30:00=30分)。NextSyncCyclePolicyType: 次回実行される同期の種類(通常は差分同期のDelta、7日に1回等の割合で完全同期のInitialになります)。NextSyncCycleStartTimeInUTC: 次回の同期が開始される予定時刻です。世界協定時(UTC)で表示されるため、日本時間(JST)に直すには「+9時間」して読む必要があります(上記例では日本時間の15:18:42)。SyncCycleEnabled: 内蔵スケジューラによる自動同期が有効(True)か無効(False)かを示します。
2. 次回同期時刻を日本時間(JST)に変換してワンライナー表示する
毎回頭の中で9時間足すのは計算ミスのもとになるため、現場では以下のワンライナーを使って日本時間と残り時間を即座に算出するのが便利です。
# 次回同期予定時刻を日本時間(JST)と残り分数で表示するスクリプト
$sched = Get-ADSyncScheduler
$nextJst = ([datetime]$sched.NextSyncCycleStartTimeInUTC).ToLocalTime()
$remain = New-TimeSpan -Start (Get-Date) -End $nextJst
[PSCustomObject]@{
"スケジューラ有効" = $sched.SyncCycleEnabled
"次回同期種別" = $sched.NextSyncCyclePolicyType
"次回予定(JST)" = $nextJst.ToString("yyyy/MM/dd HH:mm:ss")
"残り時間(分)" = [math]::Round($remain.TotalMinutes, 1)
}
このコマンドを叩けば、「あと何分で次の自動同期が始まるか」が一目でわかり、ユーザーからの「いつ反映されますか?」という問い合わせにも秒単位で回答できます。
緊急時の手動同期コマンドと同期間隔のカスタマイズ
退職者のアカウント即時停止や、急ぎのライセンス付与など、次の30分周期を待てないケースではPowerShellから手動で同期サイクルを起動できます。
1. 差分同期(Delta)と完全同期(Initial)の手動実行
手動で同期を走らせる場合は、Start-ADSyncSyncCycle コマンドレットを使用します。
# 【通常はこちら】変更差分のみを素早く同期する(デルタ同期:所要時間1〜3分程度)
Start-ADSyncSyncCycle -PolicyType Delta
# 【設定変更時のみ】全オブジェクトを再評価して同期する(フル同期:所要時間大)
Start-ADSyncSyncCycle -PolicyType Initial
-PolicyType Delta(デルタ同期): 前回同期以降にAD側で変更されたオブジェクトのみを処理します。日常のアカウント追加・パスワードや属性変更の即時反映には必ずこちらを使用します。-PolicyType Initial(フル同期): 同期ルール(Synchronization Rules)を変更した場合や、フィルタリング対象OUを追加した場合にのみ実行します。数万オブジェクトある環境では数時間かかることもあるため、業務時間中の安易な実行は厳禁です。
なお、手動で Start-ADSyncSyncCycle を実行した場合も、その手動同期が完了した時刻から30分後に次回の自動同期スケジュールが再セットされます。
2. 同期間隔を変更する方法(Set-ADSyncScheduler)
夜間バッチとの兼ね合いや回線帯域の都合で、同期間隔を30分より長く(例:1時間や2時間おきに)変更したい場合は、Set-ADSyncScheduler を使用します。
# 同期間隔を1時間(01:00:00)に変更する例
Set-ADSyncScheduler -CustomizedSyncCycleInterval 01:00:00
# 既定の30分間隔に戻す場合
Set-ADSyncScheduler -CustomizedSyncCycleInterval $null
現場でハマる「Entra Connect同期管理」3つの落とし穴
Entra Connectのスケジュール運用で、インフラエンジニアが実際にハマりやすい3つの罠と回避策を解説します。
落とし穴1:30分未満(例:5分や15分間隔)に設定しても無視される
「もっとリアルタイムに同期させたいから5分間隔にしよう」と考えて、Set-ADSyncScheduler -CustomizedSyncCycleInterval 00:05:00 を実行しても、同期間隔は短くなりません。
Entra Connectにはシステム保護およびクラウド側のスロットリング制限として AllowedSyncCycleInterval : 00:30:00(最小30分) というハードリミットが設けられています。30分未満の値を指定しても、CurrentlyEffectiveSyncCycleInterval は30分のまま据え置かれます。よりリアルタイムな同期が必要な場合は、Entra Cloud Sync(クラウド同期)やプロビジョニングAPIの併用を検討してください。
落とし穴2:Synchronization Service Manager(GUI)を開きっぱなしにする罠
同期状況を確認するために、GUIツールの「Synchronization Service Manager(miisclient.exe)」をサーバー上で起動し、そのまま閉じずに放置するケースがよくあります。
実はこのGUIツールを開きっぱなしにしておくと、画面描画用の履歴キャッシュをメモリ上に保持し続け、数日後にメモリリークやDBロックを引き起こしてスケジュール同期が異常停止する原因になります。また、GUIの「Connectors」タブでプロパティ画面を開いている間は、バックグラウンドの定期同期がブロック(スキップ)されます。確認が終わったら必ずGUIを閉じる運用を徹底してください。
落とし穴3:時刻固定のためにタスクスケジューラ化する際の二重起動エラー
バッチ連携の都合上、どうしても「毎時00分と30分」に同期時刻を固定したい場合、以下の手順で内蔵スケジューラを無効化し、Windowsのタスクスケジューラから Start-ADSyncSyncCycle -PolicyType Delta を呼び出す構成を組むことができます。
# 内蔵スケジューラによる自動同期を停止する(手動実行は引き続き可能)
Set-ADSyncScheduler -SyncCycleEnabled $false
ただし、この構成にする際は「前回の同期が30分以上長引いた場合」の考慮が必須です。すでに同期が走っている最中にタスクスケジューラが次の Start-ADSyncSyncCycle を叩くと、以下の例外エラーが発生して失敗します。
Start-ADSyncSyncCycle : System.InvalidOperationException: Connector: <ドメイン名> is busy.
タスクスケジューラで定期実行スクリプトを組む場合は、事前に Get-ADSyncConnectorRunStatus を実行し、戻り値が $null(実行中のコネクタが存在しない状態)であることを確認してから同期を開始するガード処理を入れてください。
# 安全なタスクスケジューラ実行用ラッパースクリプト例
Import-Module ADSync
if ($null -eq (Get-ADSyncConnectorRunStatus)) {
Start-ADSyncSyncCycle -PolicyType Delta
} else {
Write-Warning "前回の同期サイクルが実行中のため、今回の起動をスキップしました。"
}
よくある質問(FAQ)
Q: 同期スケジュールの基準時刻(例:毎時00分付近)を一度リセットしたい場合はどうすればいいですか?
A: 基準にしたい時刻(例:12:00ちょうど)に、手動で Start-ADSyncSyncCycle -PolicyType Delta を1回実行してください。手動実行が完了した時刻(例:12:01)から30分後(12:31)に次回スケジュールが再計算されるため、一時的に希望のタイムラインへ引き戻すことができます。ただし、その後の同期ごとに再び少しずつドリフトしていきます。
Q: メンテナンス作業中に一時的にEntra Connectの自動同期を止めるにはどうすればいいですか?
A: PowerShellで Set-ADSyncScheduler -SyncCycleEnabled $false を実行してください。これにより定期同期のみが安全に停止します。メンテナンス完了後は必ず Set-ADSyncScheduler -SyncCycleEnabled $true を実行して自動同期を再開し、Get-ADSyncScheduler で SyncCycleEnabled が True に戻っていることを確認してください。
Q: ステージングモード(待機系)のサーバーでも同期スケジュールは動いていますか?
A: はい、ステージングモード(StagingModeEnabled : True)のサーバーでも、内蔵スケジューラによるインポートと同期(Import / Synchronization)は30分周期で通常通り動作します。ただし、Entra IDやADへ変更を書き出す「エクスポート(Export)」処理だけが抑制される仕組みになっています。
まとめ
Microsoft Entra Connectの同期スケジュール管理における重要ポイントは以下の通りです。
- 同期時刻が少しずつズレるのは、「前回の同期完了時刻+30分」 で次回予定が組まれる標準仕様(ドリフト現象)によるもの
- 次回の正確な同期タイミングは
Get-ADSyncSchedulerのNextSyncCycleStartTimeInUTC(UTC表記のため+9時間)で確認する - 急ぎのアカウント変更を即時反映させたいときは
Start-ADSyncSyncCycle -PolicyType Deltaを実行する - バッチ連携等で時刻を厳密に固定したい場合は、内蔵スケジューラを無効化したうえで
Get-ADSyncConnectorRunStatusの排他チェック付きスクリプト をタスクスケジューラに登録する
同期の仕組みとPowerShellコマンドを押さえておけば、ハイブリッドID環境でのアカウント反映トラブルやメンテナンス作業に落ち着いて対処できます。
関連記事
この記事で提供される情報は、一般的なガイダンスを目的としており、すべての環境やシステムでの動作を保証するものではありません。
OSのバージョンやリリースによっては、記載されている事が実行できない、または異なる結果をもたらす可能性があります。
また、会社所有のパソコン、スマホ、タブレットなどでは、ポリシーや権限によって実行できない場合があります。
この記事の情報を使用することによって生じる問題や結果について、筆者およびサイト管理者は責任を負いません。
すべての操作は自己責任で行ってください。
またお会いしましょう!
著者のおすすめ教材 & note実践記事
PowerShell実務スクリプト50選
AD・Windows運用・障害対応をコマンド一発で自動化する現役SEの実務スクリプト集。
ググっても出ない実務テク20選
社内SE現場の地味で細かすぎる面倒作業を一撃で解消する実践テクニック集。