資訊無涯,回頭已不見岸

AD運作狀態檢查及郵件寄送

aska_ADHealthCheck01

聲明:AD 複寫檢查程式原始碼來自 TechNet Script Center (Retired ) 作者為 MVP Sukhija Vikas 撰寫的 Active Directory Health Check,非常感謝他公開並提供給所有 IT 人員使用。
(2026.06.27 更新)

去年在 TechNet Script Center 上尋找一些與 AD 複寫檢查相關的指令碼範本,希望能幫助 IT 人員降低爆肝機會定期檢測及早發現異常。多方選擇及測試後,決定以 Sukhija Vikas 寫的 Active Directory Health Check 為基底進行修改。

原版:Active Directory Health Check ( 原版範例頁面 )
修改版:按此下載 ( 解壓密碼: www.askasu.idv.tw )
修改版範例:單一網域 Demo父子網域 Demo


修改版說明:

1. 以 Sukhija Vikas 於 2015/5/25 釋出的版本進行修改
2. 增加繁體中文環境的支援
3. 版面配色及配置修改
4. 報表底部增加版本及作者等相關說明
5. 新增收集下面指令的執行結果,以提早瞭解及分析問題

Repadmin /showrepl
Repadmin /replsummary
Repadmin /queue

6. 執行過程,會新增以執行日期為名的資料夾,並將產生的 HTML 報表檔與上述收集結果置放其中
主要是希望用工作排程,設定為每日檢查,同時作為記錄留存。
7. 郵件寄送主旨增加執行日期

 

注意事項:
1. 目前我僅在 Windows Server 2012 / 2012 R2 英文及繁中版實際測試
原作者測試指令碼可在 Server 208 R2 以上的版本中執行,即便 AD 網域中有其他低於此版本的 DC,應仍可檢查複寫狀況,頂多相關系統服務無法正確讀出狀態。
2. 如果在非 DC 的主機執行此指令碼,請確認具備以下事項:
a. 具權限的帳號及密碼
b. 已安裝 AD DS 遠端管理工具及 PowerShell 模組
3. 指令碼支援報告以郵件寄送。
可在 ps1 檔上按滑鼠右鍵選「編輯」,用內建的 PowerShell ISE 進行修改第 23 - 27 行填入對應資訊;如果有多名收件者,請務必同步增修變數及第 438 行起的 $msg.To.Add 指令。
4. 指令碼的連接郵件伺服器為匿名方式。
5. 如不希望寄送報告郵件,$smtphost變數值填入失效位置即可 ( 雖然是廢話,但可能還是有人問... )
6. 可決定是否將 Repadmin 執行結果 Log,在郵件寄送過程以附件寄出
於指令碼第 445 - 447 及 451 - 453 行設定。
7. 報表無全中文化 ( 因嘗試全中文化後感覺很怪,有志者歡迎自行修改 )

 

狀況排除:
1. 下載解開的指令碼,若執行時發生如下圖的錯誤

請執行下面指令修改 Powerhell 預設限制或,再用內建編輯器開啟指令碼後修改及儲存 ( 20160426 Update: 感謝某社工程師 Bruce 針對指令的資安建議,已修改指令 );或參考這篇文章 – 15 Ways to Bypass the PowerShell Execution Policy,試著避開系統預設限制,就能正常執行指令碼。

Set-ExecutionPolicy RemoteSigned

2. 假使檢查報表在 AD 複寫這段出現紅通通一片,很有可能你把指令碼拿到不支援的語言環境了
話說,下圖就是讓我想做修改版的最大原因....  /=.=/
aska_ADHealthCheck02


3.
若希望將此指令碼放入工作排程,請在放置指令碼檔案的位置新增一 bat 檔,並貼入下面指令,最後於精靈設定過程帶入此 bat 檔執行

powershell -File "C:\路徑\ADHealthCheck_Aska_zhTW.ps1"

注意!設定工作過程請務必填入開始位置,否則會造成指令碼執行後,檔案存放位置與預期不同。
可參考下圖設定。
aska_ADHealthCheck05


4.
在非網域控制站的主機執行,可能會在執行位置產生如下圖的資料夾路徑及檔案,此現象為正常。
請參考微軟網站說明:ADSI and User Account Control

%LOCALAPPDATA%\Microsoft\Windows\SchCache\domain_name.sch

aska_ADHealthCheck06

5. 若檢查報表出現如下圖的錯誤,有可能是以子網域的管理者身分執行或無權限,導致無法檢測父網域 DC 的服務狀態。
aska_ADHealthCheck03

 

其實,微軟過去釋出的 AD Replication Status Tool 比這支指令碼更強大,只差在不能做排程檢查及郵件寄送。可惜現在微軟已完全放生該工具,要求使用者改用 Operations Management Suite (OMS),儘管國外 IT Pro 罵翻天但仍不見起死回生的跡象,衷心希望該工具能有復活的一天啊~~ 微軟在參閱了網友的 Feedback 回饋,已於 2o16/04/20 更新釋出可正常執行的 AD Replication Status Tool。 ( 是有沒有那麼剛好啦,發了這篇文章的隔天就釋出 /xd/ )

[2026.06.27 更新] 微軟官方的 AD Replication Status Tool 已無法取得,非官方支援及延伸開發的版本可到 GitHub 查看: ryanries/ADReplStatus: AD Replication Status Tool

若對指令碼有任何疑問,歡迎留言及討論,也請恕無法直接提供複寫異常的技術支援,感謝 /:)/

14 則留言

  1. KB

    請問程式碼有沒有辦法改為:只有檢測出異常時才發郵件呢?

    • AskaSu

      作者是用PowerShell撰寫一定有辦法改,
      可惜的是,我沒時間協助修改

  2. KAMAN

    不好意思借串發問><
    蘇大還有 WINDOWS server 2003 STD VLK的安裝檔嗎?
    我也是碰到OEM版轉VM無法進入桌面的問題,
    希望能提供這塊上古化石,感恩
    認識的都問不到這安裝檔了0..0

    • AskaSu

      如果您們過去有購買微軟大量授權,可以嘗試到微軟大量授權網站下載,或者用合約資訊進行註冊,應該就能從該網站取得 Server 2003 大量授權版的 ISO

      若無法註冊或無法取得,或許可以嘗試聯繫您們熟識的微軟授權經銷商請他們協助 :)

      • KAMAN

        經銷商的研華只賣授權,完全沒售後服務,聽業務說公司都是直接提供品牌電腦給業主,所以也是QQ了,好家在沒接這案子,這不是我本科呀XD,算逃過一劫了

  3. Reco

    KAMAN
    Try psexec

  4. Alvin

    請問蘇老,我下載執行測試,發現 無法用ssl認證的方式發mail,請問有什麼辦法解決?

    • AskaSu

      預設的程式碼用比較單純的匿名連接發送,
      如果要改成帶帳密及SSL/TLS方式連接,
      應該可以參考這篇文章對原程式碼增加修改
      How to configure Workflow to send SMTP email with SSL/TLS

      • Alvin

        蘇老 謝謝你提供的資訊。
        小弟怎麼改了改 就是寫不出來 嗚~功力不足

        • AskaSu

          是想利用 Google SMTP 寄送郵件嗎?
          建議先找 Sample Code 測試一般 SSL/TLS 發送是正常的,
          測試後再回過頭改寫這個 AD 狀態檢查指令碼

  5. mike

    你好,請問一下,我的AD Server 是2019版本,執行程式後NetlogonsTest ReplicationTest ServicesTest AdvertisingTest FSMOCheckTest,這五項都出現Fail部分,請問是哪裡我設定錯誤?我該如何怎麼解決呢??麻煩蘇老大大替我解惑
    謝謝

    • AskaSu

      有試過指令碼在DC上,並且用有權限的帳號執行嗎?
      或者覺得DC複寫及運作有問題的話,
      先用內建的檢測指令做確認
      repadmin /showrepl
      repadmin /replsum

  6. jerry

    請教
    我們是四台2019,只要是發起檢查那台的NTDSService就會變紅匡但無字是正常的嗎?

    • AskaSu

      紅框一般是因為跳脫判斷正常的條件,
      如果加上沒有顯示內容,代表沒取得資料

      試試看在那台主機執行下面指令,看能否正常取得資訊及內容值
      Get-Service -Name NTDS

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

© 2026 蘇老碎碎唸

Theme by Anders NorenUp ↑