Powershell sangat membantu kita IT-Pro untuk memonitor kesehatan server yang berada di jaringan kita. Dalam artikel ini saya akan menunjukan bagaimana menggunakan powershell untuk memonitor status dari Exchange server 2003.
Tujuan script ini adalah untuk mengautomasikan tugas2 rutin exchange administrator, antara lain:
- Memeriksa jumlah freespace di setiap disk
- Menghitung jumlah mailbox yang tersebar di masing-masing database
- Memeriksa ukuran dari file database exchange (edb dan stm).
- Selain itu, script ini akan menyimpan hasilnya dalam sebuah file dan mengirimkannya melalui email.
Berikut adalah tampilan hasil jika tidak dikirimkan melalui email
Ok, berikut adalah script yang saya buat.
remove-item -path c:\powershellscript\exreport.txt
$computers = "server1”,”server2","server3","server4"
foreach ($computer in $computers)
{
echo $computer >> c:\powershellscript\exreport.txt
Get-Wmiobject -namespace root\MicrosoftExchangeV2 -class Exchange_Mailbox -computer $computer | group-object -property StorageGroupName,StoreName |ft -autosize >> c:\powershellscript\exreport.txt
Get-WMIObject Win32_LogicalDisk -filter “DriveType=3" -computer $computer | Select SystemName,DeviceID,VolumeName,@{Name=”size(GB)”;Expression={”{0:N1}” -f($_.size/1gb)}},@{Name=”freespace(GB)”;Expression={”{0:N1}” -f($_.freespace/1gb)}} |ft -autosize >> c:\powershellscript\exreport.txt
get-wmiobject -query "select * from cim_datafile where extension ='edb' or extension ='stm'" -computername $computer|ft -property name,@{label="Size (GB)";expression={[math]::truncate($_.filesize/1GB)}} -autosize >> c:\powershellscript\exreport.txt
}
#subroutine untuk mengirimkan email
$msg = new-object Net.Mail.MailMessage
$smtpServer = “mail”
$smtp = new-object Net.Mail.SmtpClient($smtpServer)
$att = new-object Net.Mail.Attachment("c:\powershellscript\exreport.txt")
$msg.Attachments.Add($att)
$msg.From = “automatic-report@gulver.com”
$msg.To.Add(”faisal_susanto@gulver.com")
$msg.Subject = “Exchange Mailbox Server Report"
$msg.Body = “This is the data of exchange mailboxes”
$smtp.Send($msg)
exit
Sekarang mari kita telaah script diatas.
remove-item -path c:\powershellscript\exreport.txt
Command diatas akan menghapus file exreport.txt, hal ini perlu dilakukan karena script ini dijalankan dengan metode append ke file report sehingga jika tidak dihapus file report akan berisi data2 lama dan diappend terus setiap kali script dijalankan.
$computers = "server1”,”server2","server3","server4"
Baris ini mengisi variable $computers dengan array yang berisi nama server.
foreach ($computer in $computers)
{
Baris diatas melakukan pengulangan (looping) untuk setiap member dari array $computers, pengulangan dilakukan mulai dari tanda { sampai tanda } yang ada di akhir looping.
echo $computer >> c:\powershellscript\exreport.txt
baris ini sebetulnya hanya memunculkan variable $computer, selanjutnya hasil perintah ini diredirect ke file c:\powershellscript\exreport.txt, dimana disini berguna sebagai pembatas antara hasil report dari server pertama dengan server kedua dan selanjutnya.
Get-Wmiobject -namespace root\MicrosoftExchangeV2 -class Exchange_Mailbox -computer $computer | group-object -property StorageGroupName,StoreName |ft -autosize >> c:\powershellscript\exreport.txt
Baris ini menggunakan command get-wmiobject untuk mengambil nilai dari namespace dan class yang disebutkan (yaitu microsoftExchangeV2 dan class Exchange_mailbox). Kita membatasi query dengan variable –computer dan diisi dengan $computer.
Setelah mendapat hasilnya, selanjutnya kita melakukan summary dari jumlah mailbox yang ada di masing-masing storagegroup dengan perintah | group-object -property StorageGroupName,StoreName
Selanjutnya kita memformat output dari perintah diatas dan juga meredirectnya ke file report dengan perintah |ft -autosize >> c:\powershellscript\exreport.txt. Perintah ft adalah singkatan dari format-table, sedangkan parameter –autosize adalah agar lebar kolum disesuaikan dengan isi variablenya.
get-wmiobject -query "select * from cim_datafile where extension ='edb' or extension ='stm'" -computername $computer|ft -property name,@{label="Size (GB)";expression={[math]::truncate($_.filesize/1GB)}} -autosize >> c:\powershellscript\exreport.txt
Langkah selanjutnya kita menggunakan get-wmiobject juga tetapi namespace yang berbeda yaitu cim_datafile. Jika dijalankan tanpa batasan, maka command ini akan mengembalikan seluruh file yang ada di computer tujuan, karena itu kita membatasi dengan menggunakan kalimat where extension =edb or extension =stm, dimana extension tersebut adalah exchange database.
Selanjutnya kita memformat output dengan melakukan piping ke command format-table seperti dibawah ini
|ft -property name,@{label="Size (GB)";expression={[math]::truncate($_.filesize/1GB)}} -autosize>> c:\powershellscript\exreport.txt
Disini kita batasi tampilan dengan memilih property yang relevan yaitu name. Selain itu kita menggunakan calculated field yaitu kita menampilkan variable filesize ke dalam ukuran 1 GB.
Selanjutnya kita tutup looping dengan tanda }.
Setelah kita selesai membuat laporan, langkah selanjutnya adalah mengirimkannya melalui email. Berikut adalah script yang digunakan
$msg = new-object Net.Mail.MailMessage
$smtpServer = “mail”
$smtp = new-object Net.Mail.SmtpClient($smtpServer)
$att = new-object Net.Mail.Attachment("c:\powershellscript\exreport.txt")
$msg.Attachments.Add($att)
$msg.From = “automatic-report@gulver.com”
$msg.To.Add(”faisal_susanto@gulver.com")
$msg.Subject = “Exchange Mailbox Server Report"
$msg.Body = “This is the uncompiled data of exchange mailboxes”
$smtp.Send($msg)
exit
Subroutine diatas sangat mudah dibaca, dimana kita mendefinisikan variable $msg sebagai sebuah object dari Net.Mail.MailMessage (ini sebetulnya adalah class dari .Net, tapi kalau saya pakai istilah ini, saya benar2 tersedot ke dark side nanti).
$smtpServer = “mail”
$smtp = new-object Net.Mail.SmtpClient($smtpServer)
Selanjutnya kita mendefinisikan variable $smtpserver dimana disini kita isikan alamat email server kita. (pastikan bahwa email server yang digunakan tidak diblok).
Baris kedua kita juga mendefinisikan variable $smtp sebagai object dari class Net.Mail.smtpclient
Untuk baris-baris selanjutnya saya kira cukup jelas, jadi tidak perlu saya uraikan lebih lanjut.
Kita save script diatas sebagai file dengan extension .ps1 misalnya script1.ps1, setelah kita buat sebuah file berextension .bat (batch file) dan memasukkan command dibawah ini:
powershell.exe c:\powershellscript\script1.ps1 -noprofile –noninteractive
langkah terakhir yang perlu dilakukan adalah membuat sebuah scheduled task di server/workstation dimana powershell diinstal dan memanggil file .bat yang kita buat tadi
Setelah melakukan langkah diatas, maka kita tinggal menunggu laporan yang akan dikirimkan oleh script yang kita buat.
Kesimpulan
Dari artikel ini kita dapat menarik kesimpulan antara lain bahwa ternyata dengan powershell kita dapat melakukan monitoring tidak hanya ke exchange server 2007 tetapi juga ke exchange server 2003.