六月 08 2016

Exchange系統報表及中文化修改

分類:Servers

aska_exrptps

聲明:報表原始碼來自英國 Exchange MVP - Steve Goodman 所撰寫的 Generate Exchange Environment Reports using Powershell非常感謝他公開於個人部落格及 TechNet Script Center,提供給所有 IT 人員使用。

原始版:Generate Exchange Environment Reports using Powershell ( 原版範例頁面 )
中文化版:按此下載 ( 解壓密碼: www.askasu.idv.tw )( 2018.03.30 更新 )
MD5 檢查碼:c1e9131046c3440ae9a8caed893d29fb
中文化版範例頁面:
Exchange 2007, Exchange 2010
Exchange 2013, Exchange 2016

原作者提供指令使用方式:
1. 直接產生 HTML 報表

.\Get-ExchangeEnvironmentReport -HTMLReport 完整名稱或路徑含完整名稱.html

2. 產生報表且用郵件寄送

.\Get-ExchangeEnvironmentReport -HTMLReport 完整名稱或路徑含完整名稱.html -SendMail:$true -MailFrom:寄件者郵件地址 -MailTo:收件者郵件地址 -MailServer:smtp.example.com

中文化版說明:
1. 修改版面配置,如欄位及資訊置中、微軟正黑體字型優先、大小等
2. 於 Header 及 footer 位置增加作者連結及版本宣告
3. 對調運作伺服器與資料庫的欄位
因觀察此部份的原始顯示,應該是以資料庫的角度呈現。尤其在 DAG 架構下,若信箱資料庫都搬到同一台 MBX 主機上運作,則不會有出現顯示另一台 MBX 伺服器資訊,詳情可參考下圖原版及中文化版本比較。
aska_exrptps03

4. 修改部分無法讀取到值的資訊欄位以中文顯示為「未知」
5. Server 2012 R2 因無 Service Pack 強制以中文顯示為「無」
6. 修改未設定循環記錄以中文顯示為「未啟用」
[2016.06.09] 增加
7. 強制 HTML 及設定郵件寄送編碼方式為 UTF8,並針對 Server 2008 的執行狀況設編碼變數以符合舊版 PowerShell 環境執行
[2018.03.30] 修改
8. 感謝 Lanworld 網友回報 因中文化過程,誤刪除到 754 行其中一個括號,導致標題位置錯誤,已修正問題

以下說明為 Lab 測試過程,發現原程式碼執行後的錯誤狀況所作的修改:
1. 修復 CAS Arrary 名稱無法顯示問題
起因於 Exchange 2010 Lab 測試時,發現 CAS Arrary 名稱沒有顯示。經檢查程式碼,應該是在讀取 CAS Array 名稱時,較晚讀取到 Exchange Server 恰巧是 MBX 角色,其 CAS Array 資訊為空值,後讀取的空值資訊蓋掉先前的有值資訊,造成無法正確顯示 (可參考原版中文化版範例頁面比較 )。感謝集英信誠系統開發團隊的 Mike 提供判斷式修改建議。
aska_exrptps01

2. 修復在特定狀況,如 Exchange 2007 版本不執行顯示內部域名及外部域名,或 Exchange 2010 之後版本若無設定外部域名,進而造成讀取到的資訊為空值,程式碼執行過程會產生錯誤訊息。
aska_exrptps04

3. 修正及標準化 Server 2008 作業系統的名稱顯示,詳情可參考上圖。
4. 修復 Exchange 2010 之後的版本,無法在純 PowerShell 模式直接執行程式碼的問題。
aska_exrptps02

5. 修復其在 Exchange 2016 未指定欲讀取的產品版本機碼而產生的錯誤,訊息可參考上圖提到的 364 行。

注意事項:
1. 請修改 Powerhell 預設限制,避免無法執行。詳情可參考先前的 AD 運作狀態檢查及郵件寄送一文。
2. Exchange 2007 的範例與原版執行結果相同,真的沒有資料庫資訊,所以不要問我那 A 安勒?


後記(其實就是碎念啦 /xd/ ):
去年在嘗試中文化 Active Directory Health Check 時,其實大約同一時間也做了這支 Exchange 系統報表的中文化,本想跟著 Active Directory Health Check 修改版的文章於前陣子一同發佈,但查看原版發佈點才發現,版本已經從當時的 1.5.8 更新至 1.6.1,想想還是找時間重新對較新的版本做中文化。

本來以為有舊版的中文化,再對新版做中文化應該很快...沒想到,因為不小心栽進去想寫自己要的進階版,仔細測才發現作者撰寫的程式,其實是有一些狀況的(在此也感謝某社工程師及幾位好友願意協助做前期小白鼠測試)。但我認為這不能怪原作者,畢竟這個 PowerShell 跨了多個 Exchange 產品版本,而且各個版本又可做不同架構。由於我也不喜歡在執行時看到錯誤訊息 ,所以決定盡可能在中文化及進階版本中修好,也導致整個中文化的時間比預期久。

如未來發現中文化版執行錯誤,或擷取的資訊不正確,建議先嘗試用原版測試。測試後,原版也發生同樣狀況,則應該是原程式碼就有問題,建議反映給原作者;但也歡迎讓我知道 ( Exchange 2007 以前的版本就真的不用了 /8-)/ ),我會嘗試進行修改,但因不一定有時間及建置相同 Exchange 架構環境,請恕不保證能做好做滿。

目前有 8 個回應 , 標籤:


目前有 8 個回應

  1. XexeX 說道:

    請問有沒有方法放到Schedule Task上執行?我在網上找到一些資料,但作者也不認為可以在Schedule Task上執行。
    http://24x7itconnection.com/2015/10/22/it-snippits-schedule-exchange-2013-powershell-script-with-task-scheduler/

    謝謝。

    • AskaSu 說道:

      謝謝您的回應,
      我會盡快測試這部分,
      因為我也很想確認 /:)/

    • AskaSu 說道:

      目前是在 Server 2008 R2 加 Exchange 2010 的環境下測試排程成功,
      參考下面的指令碼,填入到工作排程的「程式碼或指令碼」欄位

      C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -command "& {"路徑\Get-ExchangeEnvironmentReport_161_Aska_zhTW.ps1" -HTMLReport 路徑含完整名稱.html -SendMail:$true -MailFrom:寄件者郵件地址 -MailTo:收件者郵件地址 -MailServer:smtp.example.com}" 

      另外,如果 -HTMLReport 的參數沒有提供路徑,
      則建議在設定排程時的「開始位置」,輸入欲存放的目錄路徑,
      避免執行指令所產生的檔案都被丟入 C:\Windows\System32

      理論上,Server 2012/2012 R2 應該也適用,
      但我還是會找時間進一步確認

      • Lanworld 說道:

        回報

        環境windows server 2012 R2+Exchange 2013

        工作排程建立基本工作->無論登入是否都執行[選取]->最高權限執行[選取]

        動作->啟動程式

        程式或指令碼 :powershell

        新增引數:
        -command "D:\Get-ExchangeEnvironmentReport.ps1" -HTMLReport 完整名稱或路徑含完整名稱.html -SendMail:$true -MailFrom:寄件者郵件地址 -MailTo:收件者郵件地址 -MailServer:smtp.example.com

        排程工作可正常執行!

  2. 楊小姐 說道:

    您好~
    不知是否可請教您其他問題
    我的jpg檔案打開會顯示下述錯誤(相片檢視器):
    windows相片檢視器無法開啟此圖片,因為檔案似乎已損壞、已損毀或太大

    神奇的是
    只有AI 與 PS 存 CMYK的JPG會有這樣的問題
    如果存RGB 的JPG則可以打開

    有問題的JPG檔案 可用其他軟體顯示
    例如 : 小畫家 或 AI 與 PS 本身 放進 WORD 也可以顯示
    傳給其他人 則不會有上述的問題 ( 可正常用相片檢視器開啟 )

    對於所發生的問題覺得很詭異
    PS 一開始以為相片檢視器有問題 但他可以開啟其他圖片...

    如有解決的方法
    非常謝謝~

  3. Ryan 說道:

    Exchange 2013 的CU 已經更新到CU23,
    第952行要改
    for ($i = 1; $i -le 20; $i++) <---- 20要改23

    不然Exchange 版本會無法顯示變成空值。

    • AskaSu 說道:

      謝謝您的回覆,如果有空我會重新檢視目前的程式碼,
      或者放上 Github

發表迴響

*