Archive

Abonnieren

Countdown

    Keine Ereignisse vorhanden

Exchange 2007: Datenbank-Informationen per Powershell

Als Administrator einer Exchange 2007 Umgebung hat man den Wunsch, einige Informationen über die verwendeten Datenbanken im Auge zu behalten. Dazu gehören:

  • Datenbankgröße
  • Anzahl der Postfächer
  • Zeitpunkt des letzten Full Backups
  • Zeitpunkt des letzten inkrementellen Backups
  • Mount Status
  • Quotas
  • Aufbewahrungszeit für gelöschte Postfächer
  • Freier Platz auf der jeweiligen Datenbankpartition

Das folgende Powershell Script liefert diese Informationen für alle Exchange Server in der Organisation als E-Mail im HTML-Format. Zusätzlich werden die gewonnen Informationen als CSV-Export in einer Textdatei abgelegt, die ebenfalls per E-Mail verschickt wird. Im Original hatte ich das Script in einem Forum der Powershell Community gefunden (http://powershellcommunity.org). Allerdings enthielt das Original Script folgenden Bug: Die Variable $mailboxpath wird aus dem Dateinamen der Datenbankdatei gebildet, was nicht immer den tatsächlichen Gegebenheiten entsprechen muss.

Im Script müssen folgende Variablen angepasst werden:

  • $smtpClient.Host = Server für den Mailversand
  • $mailmessage.from = Absender der E-Mail
  • $mailmessage.To.add = Empfänger der E-Mail

Nachfolgend das Script als Funktion get-dbinfo:

function get-dbinfo {
$AllServers = @()
$db = Get-MailboxDatabase -Status
## $pfdb = Get-PublicFolderDatabase  -Status
## $db = $mbdb + $pfdb
foreach ($objItem in $db)
{
$server=$objItem.ServerName
$dbname=$objItem.Name
$edbfilepath = $objItem.edbfilepath
$path = "`\`\" + $objItem.ServerName + "`\" + $objItem.EdbFilePath.DriveName.Remove(1).ToString() + "$"+ $objItem.EdbFilePath.PathName.Remove(0,2)
$dbsize = Get-ChildItem $path
$DiskObj = get-WmiObject Win32_LogicalDisk -computerName $objItem.ServerName | Where-Object { $_.DeviceID -ieq $objItem.EdbFilePath.DriveName }
$FreeOnStorage = [int]($DiskObj.freespace / 1024KB)
$FreeOnStorageProc = [float](($DiskObj.freespace /1024KB) / ($DiskObj.size / 1024KB))
$start = $path.LastIndexOf('\')
$dbpath = $path.Substring($start +1).remove($path.Substring($start +1).length -4)
##$mailboxpath = "$server\$dbpath"
$mailboxpath = "$server\$dbname"
##if($objItem.ObjectClass -ilike '*msExchPrivateMD*') { $mailboxcount = Get-MailboxStatistics -database "$mailboxpath" |measure-object } else { $mailboxcount = 0 }
$mailboxcount = Get-MailboxStatistics -database "$mailboxpath" |measure-object
$ReturnedObj = New-Object PSObject
$ReturnedObj | Add-Member NoteProperty -Name "DatabaseIdentity" -Value $objItem.Identity
$ReturnedObj | Add-Member NoteProperty -Name "SizeMB" -Value ("{0}" -f ($dbsize.Length/1024KB))
$ReturnedObj | Add-Member NoteProperty -Name "MailboxCount" -Value $mailboxcount.count
$ReturnedObj | Add-Member NoteProperty -Name "LastFullBackup" -Value $objItem.LastFullBackup
$ReturnedObj | Add-Member NoteProperty -Name "LastIncrementalBackup" -Value $objItem.LastIncrementalBackup
$ReturnedObj | Add-Member NoteProperty -Name "BackupInProgess" -Value $objItem.BackupInProgess
$ReturnedObj | Add-Member NoteProperty -Name "Mounted" -Value $objItem.Mounted
$ReturnedObj | Add-Member NoteProperty -Name "IssueWarningQuota" -Value $objItem.IssueWarningQuota
$ReturnedObj | Add-Member NoteProperty -Name "ProhibitSendQuota" -Value $objItem.ProhibitSendQuota
$ReturnedObj | Add-Member NoteProperty -Name "ProhibitSendReceiveQuota" -Value $objItem.ProhibitSendReceiveQuota
$ReturnedObj | Add-Member NoteProperty -Name "MailboxRetention" -Value $objItem.MailboxRetention
$ReturnedObj | Add-Member NoteProperty -Name "FreeOnStorage" -Value $FreeOnStorage
$ReturnedObj | Add-Member NoteProperty -Name "FreeOnStorageProc" -Value $FreeOnStorageProc
$AllServers += $ReturnedObj
}
$ALLServers |Export-Csv c:\test4.txt -NoTypeInformation -force
 
function sendmail($body)
{
$filename = "c:\dbinfo.txt"
$SmtpClient = new-object system.net.mail.smtpClient
$MailMessage = New-Object system.net.mail.mailmessage
$att = new-object Net.Mail.Attachment($filename)
$SmtpClient.Host = "Name des Mailservers"
$mailmessage.from = "Absenderadresse"
$mailmessage.To.add("Empfängeradresse")
$mailmessage.Subject = “Exchange 2007 Database Sizes”
$MailMessage.IsBodyHtml = $true
$mailmessage.Body = $body
$mailmessage.Attachments.Add($att)
$smtpclient.Send($mailmessage)
}
 
$body = $allservers |sort-object "Server\StorageGroup\Database" |convertto-html
sendmail $body
}

Verwandte Artikel

Leave a Reply

 

 

 

You can use these HTML tags

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="" escaped="">

Comment Spam Protection by WP-SpamFree