Thống kê mailbox trong Exchange 2007

Neil Hobson

Yêu cầu về việc có được một danh sách mailbox cùng với các kích thước của chúng được xếp vào loại yêu cầu khá cao trong danh sách câu hỏi từ các quản trị viên Exchange. Trong Exchange 2000 và Exchange 2003, bạn hoàn toàn có thể xem các thông tin này bên trong Exchange System Manager snap-in. Bên cạnh đó còn có thể export các thông tin đã được trình bày bên trong Exchange System Manager vào một định dạng văn bản và sau đó import thông tin này vào các ứng dụng như Excel. Các thành viên khác của cộng đồng Exchange đã công bố VBScripts để sử dụng Windows Management Instrumentation (WMI) hay Messaging Application Programming Interface (MAPI) cũng nhằm thực hiện nhiều thứ tương tự. Rõ ràng, đối với một số quản trị viên, các kịch bản đó đôi khi rất khó hiểu hoặc khó thay đổi. Tuy nhiên Exchange 2007 có cung cấp cho bạn một tiện ích Exchange Management Shell để có thể quản lý Exchange 2007 từ cửa sổ lệnh và một trong các lệnh hay cmdlets mà chúng ta đã biết, cho phép quản trị viên đơn giản hơn trong việc thu được các thống kê về mailbox.

Những cơ bản về Get-MailboxStatistics

Cmdlet cơ bản nhất của Exchange Management Shell để sử dụng là Get-MailboxStatistics trên chính bản thân nó. Hình 1 bên dưới thể hiện một mẫu đầu ra của quá trình chạy cmdlet này mà không có các tham số nào được gắn thêm. Quá trình này chạy dựa vào máy chủ mailbox cục bộ.


Hình 1: Kết quả mặc định của Get-MailboxStatistics

Như những gì bạn thấy, mặc định quá trình này cho biết bốn mẩu thông tin cho mỗi mailbox trên máy chủ cục bộ, cụ thể như tên hiển thị của mailbox, số mục trong mailbox, trạng thái giới hạn lưu trữ và thời gian đăng nhập lần gần nhất. Kích thước thực sự của mailbox không được hiển thị một cách mặc định nên nhiệm vụ đầu tiên là phân biệt tên của thuộc tính lưu giá trị đó. Có một cách để chỉ ra các thuộc tính có sẵn có thể gọi ra được là quan sát các kết quả của cmdlet trong cmdlet Format-List, hoặc viết tắt là fl. Ví dụ, cmdlet của chúng ta lúc này là:

Get-MailboxStatistics | fl

Hình 2 thể hiện các kết quả trong việc thực hiện lệnh này, các thuộc tính của mailbox của User2 được hiển thị.


Hình 2: Kết quả của lệnh Get-MailboxStatistics | fl

Lúc này bạn có thể thấy những phần thông tin quan trọng khác như thuộc tính TotalItemSize có giá trị là 1584504B, xấp xỉ 1,5MB. Rõ ràng User2 không phải là một người dùng lớn của Exchange 2007. Khi đã biết được thuộc tính cần quan tâm TotalItemSize, chúng ta có thể thay đổi cmdlet ban đầu để có thể lấy được các thông tin cùng với tên mailbox và số lượng mục của nó. Cmdlet để sử dụng được thể hiện bên dưới. Lưu ý rằng thời điểm này, chúng ta đã sử dụng lệnh Format-Table, hoặc viết tắt của nó là ft, để tạo đầu ra theo định dạng bảng:

Get-MailboxStatistics | ft DisplayName,TotalItemSize,ItemCount

Kết quả của quá trình này được hiển thị trong hình 3.


Hình 3: Get-MailboxStatistics với kích thước của mailbox.

Bây giờ chúng ta sẽ tiếp tục khảo sát tiếp vì đây là đầu ra khá súc tích trong khi đó lại cho nhiều thứ mà chúng ta cần. Tuy vậy, có một chút trở ngại đối với đầu ra này. Đầu tiên, nó không tăng hoặc giảm theo thứ tự, chính vì vậy rất khó khăn để có thể xem một cách nhanh chóng mailbox nào là lớn nhất. Thêm vào đó, cột TotalItemSize được mặc định hiển thị theo byte làm cho chúng ta cũng không dễ dàng gì trong việc đọc.

Định dạng Get-MailboxStatistics bổ sung

Chúng ta hãy quan tâm trước tiên về thứ tự của đầu ra. Việc phân loại các đối tượng bằng PowerShell thực sự dễ dàng thông qua lệnh Sort-Object. Tất cả những gì bạn cần làm cho bài thực hành này là thực hiện thống kê mailbox và sau đó quan sát các kết quả theo lệnh Sort-Object, trước lệnh Format-Table. Với cmdlet Sort-Object, bạn cần quyết định cột nào muốn phân loại và hướng phân loại cho nó là gì. Tham số đầu tiên cần thêm vào Sort-Object là tên cột để phân loại, trong ví dụ của chúng ta là TotalItemSize. Sau đó thêm –Descending (giảm dần) hoặc –Ascending (tăng dần) để cho biết hướng phân loạt là gì. Hãy xắp xếp các mailbox lớn nhất trên đầu, đây là điển hình mà các quản trị viên cần biết. Cmdlet lúc này trở thành:

Get-MailboxStatistics | Sort-Object TotalItemSize –Descending | ft DisplayName,TotalItemSize,ItemCount

Kết quả của cmdlet được thể hiện trong hình 4.


Hình 4: Get-MailboxStatistics với các kích thước của mailbox theo thứ tự kích thước giảm dần

Tiếp theo chúng ta cần phải chuyển đổi các kích thước mailbox từ kiểu byte sang kiểu nào đó tiện sử dụng hơn, ví dụ MB chẳng hạn, sẽ dễ dàng hơn cho việc sử dụng. Mặc dù vậy, do trong bài test này chỉ có các kích thước mailbox cỡ nhỏ, nên chúng tôi sẽ hiển thị kích thước của chúng theo KB. Để thực hiện điều đó, chúng ta cần phải thay thế tham số TotalItemSize trong cmdlet:

@{ expression={$_.TotalItemSize.Value.ToKB()}}

Chính vì vậy cmdlet mới sẽ là:

Get-MailboxStatistics | Sort-Object TotalItemSize –Descending | ft DisplayName,@{ expression={$_.TotalItemSize.Value.ToKB()}},ItemCount

Kết quả của cmdlet này được thể hiện trong hình 5 bên dưới. Nếu bạn muốn hiển thị các kích thước mailbox theo MB thì hãy sử dụng TotalItemSize.Value.ToMB trong cmdlet ở trên. Hoặc bạn có thể sử dụng TotalItemSize.Value.ToGB.


Hình 5: Get-MailboxStatistics với kích thước mailbox theo KB

Giờ thì kết quả trông đã dễ nhìn hơn rồi. Tuy nhiên hãy quan sát các tên cột lúc này. Chúng ta có thể thấy rằng cột đã được gọi từ trước là TotalItemSize thì lúc này lại được trích dẫn trong một biểu mẫu cồng kềnh hơn là $_.TotalItemSize.Value.ToKB(). Chúng ta có thể giải quyết điều này một cách rất dễ dàng bằng cách bổ sung thêm một nhãn mới cho cmdlet. Thực tế, tất cả những gì bạn cần thực hiện là thay đổi cmdlet để đặt lại nhãn cho cột một cách thích hợp. Cmdlet mới được đưa ra bên dưới:

Get-MailboxStatistics | Sort-Object TotalItemSize -Descending | ft DisplayName,@{label="TotalItemSize(KB)";expression={$_.TotalItemSize.Value.ToKB()}},ItemCount

Kết quả của lệnh này được hiển thị trong hình 6:


Hình 6: Get-MailboxStatistics với các tên cột đã được gán nhãn

Cuối cùng, chúng ta có một đầu ra theo đúng mục đích và được định dạng khá dễ chịu; chúng ta có thể sử dụng để nhận ra mailbox nào có kích thước lớn nhất. Những gì bạn không muốn thực hiện là sẽ chạy kịch bản đó một cách thủ công hàng ngày, hay hàng tuần hoặc hàng tháng chẳng hạn. Rõ ràng các ứng dụng như System Center Operations Manager (SCOM) 2007 có thể mang các thông tin này về cho bạn thông qua giao diện quản lý, vậy chúng ta có thể thực hiện tương tự với Exchange Management Shell như thế nào? Phương pháp hiển nhiên nhất là gửi thông tin thông qua một email.

Email các kết quả

Hình 7 bên dưới thể hiện một kịch bản PowerShell có tên gọi là sendstats.ps1, đây là kịch bản được sử dụng trước tiên để tạo các thống kê mailbox thông qua cmdlet đã được xây dựng trong bài này, sau đó gửi mail các kết quả của cmdlet này đến quản trị viên. Thứ đầu tiên cần lưu ý với kịch bản là các kết quả của cmdlet Get-MailboxStatistics đã được hướng trực tiếp đến một file có tên mailboxes.txt. File này được tạo trong thư mục mà kịch bản được chạy. Các dòng khác của kịch bản tạo và gửi email, bổ sung thêm file mailboxes.txt như một file đính kèm. Một thứ quan trọng cần lưu ý nữa là dòng $SendingServer tham chiếu đến FQDN của máy chủ mail, máy chủ chịu trách nhiệm cho việc gửi thư. Rõ ràng nó sẽ là một yêu cầu để bảo đảm rằng máy chủ này có thể chuyển tiếp thông báo.

###Send mailbox statistics script
###First, the administrator must change the mail message values in this section
$FromAddress = "MailboxReport@ngh.net"
$ToAddress = "administrator@ngh.net"
$MessageSubject = "Mailbox Size Report"
$MessageBody = "Attached is the current list of mailbox sizes."
$SendingServer = "e2k7.ngh.net"
###Now get the stats and store in a text file
Get-MailboxStatistics | Sort-Object TotalItemSize -Descending | ft
DisplayName,@{label="TotalItemSize(KB)";expression={$_.TotalItemSize.Value.ToKB()}},
ItemCount > mailboxes.txt
###Create the mail message and add the statistics text file as an attachment
$SMTPMessage = New-Object System.Net.Mail.MailMessage $FromAddress, $ToAddress,
$MessageSubject, $MessageBody
$Attachment = New-Object Net.Mail.Attachment("./mailboxes.txt")
$SMTPMessage.Attachments.Add($Attachment)
###Send the message
$SMTPClient = New-Object System.Net.Mail.SMTPClient $SendingServer
$SMTPClient.Send($SMTPMessage)

Hình 7: Kịch bản SendStats.PS1

Khi được thực thi, kịch bản sẽ gửi email như những gì bạn có thể thấy trong hình 8 bên dưới. Việc mở file đính kèm sẽ cho thấy đầu ra của kịch bản Get-MailboxStatistics như trong hình 9.


Hình 8: Báo cáo đã gửi mail


Hình 9: Nội dung đính kèm

Mặc dù rằng chúng ta có được một email với dữ liệu có liên quan bên trong nhưng không có hề có gì trong kịch bản liên quan đến vấn đề lên lịch trình gửi. Để thực hiện điều đó, chúng ta phải lợi dụng dịch vụ lên lịch trình của Windows và thực thi kịch bản theo những cơ sở thông thường. Để thực hiện như vậy, chúng ta cần chạy Exchange Management Shell và chỉ định kịch bản. Điều này có thể được thực hiện bằng lệnh dưới đây:

PowerShell.exe -PSConsoleFile "C:\Program Files\Microsoft\Exchange Server\Bin\ExShell.psc1" -Command "./sendstats.ps1"

Ở đây bạn có thể thấy PowerShell chạy và nạp file điều kiển của Exchange, file này đã tìm được trên ổ C: trong ví dụ này. Rõ ràng bạn cần thay đổi, điều này phụ thuộc vào ổ nào mà Exchange 2007 được cài đặt trên đó. Tham số –Command được sử dụng để phân biệt kịch bản rằng chúng ta muốn chạy, một file cụ thể như trong ví dụ là sendstats.ps1.

Kết luận

Trong bài này, chúng tôi đã giới thiệu những vấn đề rất hay được các quản trị viên Exchange quan tâm, cụ thể là khả năng tạo danh sách các mailbox và kích thước của chúng. Mặc dù các công cụ như SCOM 2007 có thể thực hiện được công việc này, nhưng bạn có thể đơn giản thực hiện bằng sử dụng cmdlet Get-MailboxStatistics của Exchange Management Shell. PowerShell có thể là chặng đường đầu trong cả một chặng đường dài đầy khó khăn, tuy nhiên nó cũng đáng với những gì mà những người quan tâm mong muốn.

Thứ Hai, 17/03/2008 11:10
51 👨 1.811
0 Bình luận
Sắp xếp theo