資訊無涯,回頭已不見岸

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

aska_ADHealthCheck01

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

去年在 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/ )

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

12 則留言

  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

發佈回覆給「AskaSu」的留言 取消回覆

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

© 2024 蘇老碎碎唸

Theme by Anders NorenUp ↑