Exchange Unified Messaging Speech Service will not start.. Event 26191

During my deployment of Exchange 2007 SP2 and also in the past when attempting to install the unified messaging role on server 2008, I encountered an issue
in that the UM services would not start. In event viewer, you will be presented with the following error in the application log.

Event Source: Microsoft Exchange Speech Engine
Event ID: 26191

Description: The main service was unable to start. Please check that it is configured correctly. Details: ‘Invalid class ‘.

Fun! After scouring the internet again for a resolution to this error and not finding anything I started to dig into the service and dependencies. The speech engine
service relies on both the RPC and WMI services to be running to start successfully. I check both and they were in fact running. After taking a step back to think
about the requirements for Exchange and many other Microsoft products I landed on the .Net Framework. Then it clicked, DISABLE ROLLBACK.

Without realizing, I made two changes at the same time so I am not sure which resolved the issue but, after changing the disable rollback registry setting and disabling
antivirus on the server, I was able to successfully run the SP2 install and start both services. The disable rollback registry key is located at,

HKEY_LOCAL_MACHINESoftwarePoliciesMicrosoftWindowsInstallerDisableRollback

HKEY_CURRENT_USERSoftwarePoliciesMicrosoftWindowsInstallerDisableRollback

http://support.microsoft.com/kb/312499

Modify the setting from a 1 to a 0 and rerun setup. I can only assume that this was my problem as I did NOT have to unload antivirus on any other server role that was
upgraded to Exchange 2007 SP2. Hopefully this will help a frustrated Exchange admin…

Chris

The IBM XIV (Part 1)…. Background, delivery and setup

Introduction and background

I’d like to share my experiences with anyone that may land on this page about a migration to the the IBM XIV storage array. Before I dive into the the delivery and setup of the array, I would like to provide a little background on the current storage environment, services that will be utilizing the new and old array, and also the configuration of the IBM XIV that was purchased.

The existing environment consists of an Hitachi AMS1000 array. In the HDS array there is 27 raw TB of a mixture between FC / SATA disk. Disks and
20 raid groups range from 146GB FC to 300GB FC and 500GB SATA disk. After raid group configuration for I/O requirements there ended up being a total usable
storage size of 22.5TB. After allocating storage for five services that will be explained in a seperate blog post for each migration, the total storage allocated
came to 19 TB. Total data set in use across the five services which will need to be migrated to the XIV came to 11.5 TB.

One thing that I want to point out in the above configuration and storage array is that to provide the required I/O for services accessing the box, 19TB of disk space was allocated for 11.5TB of data.

Delivery and Setup

The array was delivered a day early which was not a problem was we were able to accomodate the rack coming into our building. Our shipment was sent out in pieces, although I have heard that some units will ship in a fully assembled rack. We received the rack and a three palettes of hardware. Within an hour, our IBM CE was onsite with a team of three people to install and configure the unit.

Two hours later the rack was in place and all modules were installed and running. The rack is prewired in the back making setup and installation into our existing fabric very simple. All phsyical setup was completed within three hours of the unit arriving in our datacenter. After the latest code upgrade and some network configuration we were ready to introduce the unit into our fabric.

Our XIV configuration is a partial frame consisting of nine modules. Nine modules in an XIV frame gave us 43TB of space to allocate.

In part 2, I will comment on the hardware in the unit itself and getting it setup in our fabric.

Exchange powershell script to collect free space from event 1221 and dump to csv if greater and 1GB

#Script will poll all exchange servers and pull out data from event 1221 and place in a .csv file if greater than 1GB

#Check to see if csv exists and if so remove it
If (Test-Path “FreeSpaceGreaterThan1GB.csv”)
{
Remove-Item “FreeSpaceGreaterThan1GB.csv”
}
Else
{
}

#Set the columns for the csv file
$rows = “Servername,” + “Mailbox Store,” + “Free Space (MB),”
Add-Content FreeSpaceGreaterThan1GB.csv $rows

$ExchServer = ServerHostName,’ServerHostName’
foreach ($Server in $ExchServer){

#Get the time 1 day ago in the right format for WMI query
$WmidtQueryDT = [System.Management.ManagementDateTimeConverter]::ToDmtfDateTime([DateTime]::Now.AddDays(-1))
#Perform WMI query of Event 1221 in Application log in the last day
$1221 = Get-WmiObject -computer $ExchServer -query (“Select * from Win32_NTLogEvent Where Logfile=’Application’ and Eventcode = ’1221′ and TimeWritten >=’” + $WmidtQueryDT + “‘”)

foreach ($event in $1221){

#Get the name of the Mailbox Store
$MBXStoreLocationStart = $event.Message.IndexOf(“Storage Group”) + 10
$MBXStoreLocationFinish = $event.Message.IndexOf(“has”) – 2
$MBXStoreLocation = $event.Message.SubString($MBXStoreLocationStart, $MBXStoreLocationFinish – $MBXStoreLocationStart)

#Get the free space figure and convert it to an integer
$MBLocationStart = $event.Message.IndexOf(“has”) + 4
$MBLocationFinish = $event.Message.IndexOf(“megabytes”) – 1
$MBLocation = $event.Message.SubString($MBLocationStart, $MBLocationFinish – $MBLocationStart)
$result = [int]$MBLocation

$ComputerName = $event.ComputerName

#If free space > 1GB, add the details to the csv file
if ($result -ge 3072){

$rowline = “$ComputerName,” + “$MBXStoreLocation,” + “$MBLocation,”
Add-Content FreeSpaceGreaterThan1GB.csv $rowline
}
else
{
}
}
}

Exchange 2007 Source MSExchangeSA EventID 9144

Today I came across a very odd issue in that an exchange mailbox server started throwing up events in the application log refering to Active Directory GC information. This started at a random time and no AD changes had recently been made. This also was occuring on only one of two mailbox servers in the same site. The events that were most frequent were the following:

Source: MSExchangeADTopology EventID: 2070
Source: MSExchangeSA EventID: 9144

Along with the above events, my software method of using ESE and copying the transction logs with a third part product was failing at every attempt.
Some of the warnings during this process logged the following events:

Source: ESE EventID: 222
Source: ESE EventID: 215

End user experience was that of Outlook clients loosing connectivity to the server intermittently.

We spent hours trying to track down the problem without rebooting the mailbox server and never determining the root cause. We also knew that nothing had changed in Active Directory that would cause one of two mailbox servers to complain about every GC in the local site.

All symptoms pointed to a networking related issue on the mailbox server. After disabling TCPchinmey which is part of the Scalable Network Pack in Server 2003 SP2 and enabled by default, the warnings stopped and all was well again. Contrary to what I thought, the server did NOT have to be restarted after disabling it via the registry. In case anyone needs it, the location of the key is;

HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesTcpipParameters

Change the value in the EnableTCPChimney key from 1 to 0.

Exchange Powershell script for mailbox statistics via email

The below powershell script will get the size and item count of each Exchange mailbox and send a .txt file via email to the configured recipient.

###Send mailbox statistics script

###Now get the stats and store in a text file
Get-Mailbox -Resultsize Unlimited | Get-MailboxStatistics | Sort-Object TotalItemSize -Descending | ft DisplayName,@{label=”TotalItemSize(MB)”;expression={$_.TotalItemSize.Value.ToMB()}},ItemCount | Out-File -FilePath c:mailboxes.txt

function sendmail($body)
{
$SmtpClient = new-object system.net.mail.smtpClient
$MailMessage = New-Object system.net.mail.mailmessage
$SmtpClient.Host = “IP Address of SMTP server”
$mailmessage.from = “fromaddress@domain.com”
$mailmessage.To.add(“toaddress@domain.com”)
$mailmessage.Subject = “Exchange 2007 Mailbox Sizes”
$MailMessage.IsBodyHtml = $false
$mailmessage.Attachments.Add(“C:mailboxes.txt”)
$smtpclient.Send($mailmessage)

}
sendmail