聲明: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 複寫這段出現紅通通一片,很有可能你把指令碼拿到不支援的語言環境了
話說,下圖就是讓我想做修改版的最大原因....
3. 若希望將此指令碼放入工作排程,請在放置指令碼檔案的位置新增一 bat 檔,並貼入下面指令,最後於精靈設定過程帶入此 bat 檔執行
powershell -File "C:\路徑\ADHealthCheck_Aska_zhTW.ps1"
注意!設定工作過程請務必填入開始位置,否則會造成指令碼執行後,檔案存放位置與預期不同。
可參考下圖設定。
4. 在非網域控制站的主機執行,可能會在執行位置產生如下圖的資料夾路徑及檔案,此現象為正常。
請參考微軟網站說明:ADSI and User Account Control
%LOCALAPPDATA%\Microsoft\Windows\SchCache\domain_name.sch
5. 若檢查報表出現如下圖的錯誤,有可能是以子網域的管理者身分執行或無權限,導致無法檢測父網域 DC 的服務狀態。
其實,微軟過去釋出的 AD Replication Status Tool 比這支指令碼更強大,只差在不能做排程檢查及郵件寄送。可惜現在微軟已完全放生該工具,要求使用者改用 Operations Management Suite (OMS),儘管國外 IT Pro 罵翻天但仍不見起死回生的跡象,衷心希望該工具能有復活的一天啊~~ 微軟在參閱了網友的 Feedback 回饋,已於 2o16/04/20 更新釋出可正常執行的 AD Replication Status Tool。 ( 是有沒有那麼剛好啦,發了這篇文章的隔天就釋出 )
若對指令碼有任何疑問,歡迎留言及討論,也請恕無法直接提供複寫異常的技術支援,感謝
請問程式碼有沒有辦法改為:只有檢測出異常時才發郵件呢?
作者是用PowerShell撰寫一定有辦法改,
可惜的是,我沒時間協助修改
不好意思借串發問><
蘇大還有 WINDOWS server 2003 STD VLK的安裝檔嗎?
我也是碰到OEM版轉VM無法進入桌面的問題,
希望能提供這塊上古化石,感恩
認識的都問不到這安裝檔了0..0
如果您們過去有購買微軟大量授權,可以嘗試到微軟大量授權網站下載,或者用合約資訊進行註冊,應該就能從該網站取得 Server 2003 大量授權版的 ISO
若無法註冊或無法取得,或許可以嘗試聯繫您們熟識的微軟授權經銷商請他們協助
經銷商的研華只賣授權,完全沒售後服務,聽業務說公司都是直接提供品牌電腦給業主,所以也是QQ了,好家在沒接這案子,這不是我本科呀XD,算逃過一劫了
KAMAN
Try psexec
請問蘇老,我下載執行測試,發現 無法用ssl認證的方式發mail,請問有什麼辦法解決?
預設的程式碼用比較單純的匿名連接發送,
如果要改成帶帳密及SSL/TLS方式連接,
應該可以參考這篇文章對原程式碼增加修改
How to configure Workflow to send SMTP email with SSL/TLS
蘇老 謝謝你提供的資訊。
小弟怎麼改了改 就是寫不出來 嗚~功力不足
是想利用 Google SMTP 寄送郵件嗎?
建議先找 Sample Code 測試一般 SSL/TLS 發送是正常的,
測試後再回過頭改寫這個 AD 狀態檢查指令碼
你好,請問一下,我的AD Server 是2019版本,執行程式後NetlogonsTest ReplicationTest ServicesTest AdvertisingTest FSMOCheckTest,這五項都出現Fail部分,請問是哪裡我設定錯誤?我該如何怎麼解決呢??麻煩蘇老大大替我解惑
謝謝
有試過指令碼在DC上,並且用有權限的帳號執行嗎?
或者覺得DC複寫及運作有問題的話,
先用內建的檢測指令做確認
repadmin /showrepl
repadmin /replsum
請教
我們是四台2019,只要是發起檢查那台的NTDSService就會變紅匡但無字是正常的嗎?
紅框一般是因為跳脫判斷正常的條件,
如果加上沒有顯示內容,代表沒取得資料
試試看在那台主機執行下面指令,看能否正常取得資訊及內容值
Get-Service -Name NTDS