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 }




Kommentare