iOS 6.1.2 is out – Fixes Exchange calendaring bug

I’ve updated my iPhone 5 already, but never had the issue in the 1st place on my server so can’t confirm it is resolved. Here’s the text of the update message:

Fixes and Exchange calendar bug that could results in increased network activity and reduced battery life.

http://support.apple.com/kb/DL1639

See Tony Redmond’s post for more details: http://thoughtsofanidlemind.wordpress.com/2013/02/19/ios6-1-2-appears/

For more info on the issue my post here: https://blog.jasonsherry.net/2013/02/10/ios-6-1-causing-very-high-log-generation-on-exchange/

Posted in Apple, Exchange, Microsoft, Technical | Tagged , , , | Leave a comment

Speaking at Colorado Unified Communications User Group 2/28

I will be speaking at the COUCUG (Colorado Unified Communications User Group) 2/28/2013 on the following two topics.

  • Migrating Exchange 2010 to another Active Directory Forest (without 3rd Party tools)
  • Update on Exchange 2013 (What’s new & different, co-existence w/ 2007 & 2010, Cumulative Updates, etc).

I will be reusing most of my content from last year’s MEC (Microsoft Exchange Conference   for the 1st session, see this blog post for info on the two sessions I gave at MEC. The PPTs, and related Word Doc for the cross forest migration session, can be downloaded from this SkyDrive folder: http://sdrv.ms/RdpXrD. I will be create a new PPT for the Exchange 2013 update session this week and will also post it on SkyDrive when it’s ready.

The meeting will be held at the Polycom office’s in WestminsterPlease RSVP early so we can ensure we have enough seats.

The meeting is from 4-6pm. We will try to end the formal talks by 5:30pm in order to allow for people to network and ask questions on any aspect of Microsoft Unified Communications.

RSVP Today!

The meeting will take place at Polycom’s office, which is located at:
1765 W 121st Ave, Ste 100
Westminster, CO

About COUCUG http://www.coucug.org/

COUCUG is run by an independent group of technologists who focus on Microsoft Unified Communications products and solutions. Each month, COUCUG will host a meeting in the Denver area which is open to anyone who is interested in learning more about Microsoft Lync Server 2010 and related unified communications topics. The topics for each meeting will be technical and architectural in nature designed for IT administrators, consultants, and management that want to learn more about Microsoft Unified Communications and do some networking at the same time.

Posted in Exchange, Microsoft, Technical | Tagged , | Leave a comment

Exchange 2010 SP3 is out! (Also 2007 SP3 UR10)

Updates 2/12: I made multiple updates to this post today. Added Exchange 2007 SP3 UR10 info, full set of links at the bottom, and links to some other people’s articles on these updates.

Exchange 2010 SP3 adds support for Exchange 2013 CU1. So 1st you need to wait until Exchange 2013 CU1, schedule for Q1 2013,  to come out to install 2013 into an existing 2007/2010 organization. While you wait for that, you can upgrade all of your 2010 servers to SP3 and 2007 servers to SP3 UR10.

This is probally a good thing given the current state of Exchange 2013 RTM. For more on this topic see what Tony Redmond has to say on it here: Is Exchange 2013 ready for the datacenter?.

For an update on the new update model\process, or “CUs” aka Cumulative Updates, with Exchange 2013 see this EHLO blog post: Servicing Exchange 2013. We, Exchange MVPs and Admins, are really hoping this new model fixes the quality issues we have seen with the Exchange 2010 updates. For thoughts on this see Paul Robichaux post.

For what’s new in 2010 SP3 see this TechNet article: What’s New in Exchange 2010 SP3 or the EHLO post: Released: Update Rollup 6 for Exchange Server 2010 SP2 and Exchange 2007 SP3 RU10. The big items are Exchange 2013 co-existence  and Windows Server 2012 support.

Exchange 2010 SP2 RU6 was also released yesterday, download it from here: http://www.microsoft.com/en-us/download/details.aspx?id=36716

Posted in Exchange, Microsoft, Technical | Tagged , | 6 Comments

iOS 6.1 causing very high log generation on Exchange

5/30 Update: Exchange 2010 SP3 RU1 is out, which also fixes this issue.

2/19 Update:
iOS 6.1.2 is out: https://blog.jasonsherry.net/2013/02/19/ios-6-1-2-is-out/. Here’s the text of the update message:

Fixes and Exchange calendar bug that could results in increased network activity and reduced battery life.

http://support.apple.com/kb/DL1639

2/16 Update: Per several blogs 6.1.2 should be coming out 2/20 and will fix this Exchange bug, in addition to a lock screen security issue and other items. Bit more info here: http://www.redmondpie.com/ios-6.1.2-releasing-early-next-week-to-fix-exchange-and-lock-screen-passcode-bugs/

2/13 Update: Apple’s KB on this issue: http://support.apple.com/kb/TS4532
It just says to turn Calendar syncing off and back on currently.

2/12 Update: Offical MS KB now out : KB2814847
Rapid growth in transaction logs, CPU use, and memory consumption in Exchange Server 2010 when a user syncs a mailbox by using an iOS 6.1-based device

This KB  includes a notes for Office 365 users on what they may see on their device when blocked. Office 365 and Exchange 2010+ both include client throttling code, misbehaving Office 365 clients are blocked or throttled much more quickly than Exchange 2010/2013 clients. This KB includes instructions on how to setup throttling policies and find misbehaving iOS clients.

2/11 Update #2: Tony Redmond now has a more detailed post on this issue here now: http://thoughtsofanidlemind.wordpress.com/2013/02/11/ios6-activesync/.

Apple has released 6.1.1, for iPhone 4S only currently, but it looks like this was rushed out mainlyto fix some cellar/3G communication issues . So it may not fix the code that is causing the logging issue on Exchange.

Paul Cunningham also created this post today: How to Block iOS 6.1 ActiveSync Devices from Exchange Server 2010. However, this could be a career limiting move if you block your CxOs and VIPs.

2/11 Update: I’ve also heard that deleting the ActiveSync partnership will cause the device to stop retyring the bad calendar command. This will be a better method, politically, than blocking all iOS 6.1.

Orginal 2/10 post:
I’ve heard this from several sources and now it’s on ZDNet: http://www.zdnet.com/ios-6-1-banned-from-corporate-servers-due-to-exchange-snafu-7000011064/. This ZDNet article refers to this TechNet forums post: http://social.technet.microsoft.com/Forums/en-US/exchangesvradminlegacy/thread/d7f4b534-2eac-4291-9564-97a9875056ee.

Tony Redmon has also covered it here: http://www.windowsitpro.com/blog/tony-redmonds-exchange-unwashed-50/exchange-server/apple-ios-61-upgrade-excessive-transaction-log-growth-145223

Per feedback, I haven’t seen this issue 1st hand yet, this is due to iOS sending an incorrectly formatted response to a meeting invite or update. Exchange returns an error and the iOS devices keeps retrying the request, over and over again. This in turn generates IIS and transaction logs on the Exchange servers.

This is yet another issue in the long list of poorly written iOS code issues in relation to Exchange. As of 2/10/13 this issue hasn’t made the official list of 3rd party device ActiveSync issues

KB256324: Current issues with Microsoft Exchange ActiveSync and third-party devices
KB2768774: Meeting in Attendee’s Calendar Loses Track of the Meeting Organizer. This KB also list several fixes included in iOS6.

Here’s a previous blog post on iOS 6.0 issue: https://blog.jasonsherry.net/2012/10/16/another-iphone-ios6-0-issue-with-exchange/

If you think you might be experiencing this issue use Exchange Server User Monitor to identify users causing an excessive load on your Exchange server. You can then block\quarantine the user(s) device or use ActiveSync policies to block all iOS 6.1 devices. See this EHLO blog post on how to do this: Controlling Exchange ActiveSync device access using the Allow/Block/Quarantine list

Or you can tell your users to not respond to meeting invites or updates from their iOS devices and trust them to do this (yeah right…).

Posted in Apple, Exchange, Microsoft, Technical | Tagged , , | 5 Comments

Script: Backup-DBs.p1 – Using Windows Backup for Exchange 2010

I was working with a client on a recent project and they have a Dell EqualLogic SAN and the ASM/ME (Auto Snapshot Manger/Microsoft Exchange) software. After we set it up we quickly realized that the transaction logs weren’t being truncated. We did some research and couldn’t find anything about log truncation in documentation. Upon further research I found out that “ASM/ME was not designed for backups” per this thread. So not only does it not tell Exchange to truncate transaction logs it also doesn’t update the backup dates, available when doing [Get-MailboxDatabases –Status].

So we have good snapshot and recovery support but no solution to truncate transaction logs, unless we want to enable continuous replication circular logging (CRCL) (more on that here). But, if we enabled CRCL we lose support for point-in-time recovery. The other snapshot based solutions I’ve worked with all took snapshots of the database, transaction logs from the last snapshot, and then told Exchange to truncate the logs. So we decided to use Windows Backup to do a weekly backup, which should then trigger truncation of logs.

Well this turned out to not be as easy as I expected due to the fact that each server in the DAG host passive copies of other database and Windows Backup requires you disable the VSS Writer. Furthermore, if we disabled the VSS Writer then ASM/ME, as do other solutions per my research, snapshots fail.

If you don’t have the VSS Writer disabled you will get the following error when you try to use wbadmin.exe

Retrieving volume information…
This will back up volume DB-C(I:) to \\COSRVBK01\backups\COSRVEX01\Users-C.
The backup operation to \\ COSRVBK01\backups\COSRVEX01\Users-C is starting.
Creating a shadow copy of the volumes specified for backup…
The consistency check failed for the component 738edacb-bdec-4735-85c8-a6fd22105ba1 (Microsoft Exchange Server\Microsoft Information Store\COSRVEX01\738edacb-bde
c-4735-85c8-a6fd22105ba1).
The backup of the application Exchange failed.
Detailed error: The parameter is incorrect.

Changing HKLM:\Software\Microsoft\ExchangeServer\v14\Replay\Parameters\EnableVSSWriter=0 then restarting the Exchange Replication service fixes this issue. Given the need to check for this value and change it back, so ASM/ME still works, and to make sure the database are active locally I ended up writing the script below.


Param(
[String] $Server = $env:computerName)

$BackupShare = "\\COSRVBK01\backups\COSRVEX01\" #Including trailing backslash
$Databases = @("Users-A","Users-B","Users-C")

$RequireLocal = $False # Script will skip any DBs that aren't active locally

# HKEY_LOCAL_MACHINE\Software\Microsoft\ExchangeServer\v14\Replay\Parameters\EnableVSSWriter = 0
# If the Exchange server host any passive copies this key must be set to 0 or Windows Backup will fail
# Setting this to 0 disables hardware based VSS snapshots, which will break most storage based snapshot solutions
$ResetRegKey = $True # If set to $True the script will set the value to 1 after the Windows Backup is done

$RegParameters = "HKLM:\Software\Microsoft\ExchangeServer\v14\Replay\Parameters"

$EnableVSSWriter = (Get-ItemProperty $RegParameters).EnableVSSWriter

$Date = Get-Date

If ($EnableVSSWriter -ne 0) {
 Write-Host "Setting EnableVSSWriter=0"
Set-ItemProperty -path $RegParameters -Name "EnableVSSWriter" -value 0 -Type "DWord"
 Write-Host "Restarting the Exchange Replication Service"
Restart-Service "MSExchangeRepl"
}

ForEach ($Database in $Databases) {
$CurrentDB = Get-MailboxDatabase $Database
$DBDrive = $CurrentDB.EdbFilePath.DriveName
$CurrentServer = $CurrentDB.Server.Name
If ($CurrentServer -ne $Server -and $RequireLocal) {
Write-Host "`nBackup aborted, $Database is active on $CurrentServer, which is not the same as the current server: $Server." -ForegroundColor Yellow
 }
 Else {
Write-Host "Starting backup of database: $Database on drive: $DBDrive" -ForegroundColor Green
If ($DBDrive -eq $Null) {Exit}
$BackupPath = $BackupShare + $Database
$CMDLine = "START BACKUP -backupTarget:" + $BackupPath + " -include:" + $DBDrive +" -vssFull -quiet"
# Write-Host "Running: `n wbadmin.exe $CMDLine "

$pinfo = New-Object System.Diagnostics.ProcessStartInfo
 $pinfo.FileName = "wbadmin.exe"
 $pinfo.RedirectStandardError = $True
 $pinfo.RedirectStandardOutput = $True
 $pinfo.UseShellExecute = $false
 $pinfo.Arguments = $CMDLine
 $Process = New-Object System.Diagnostics.Process
 $Process.StartInfo = $pinfo
 $Process.Start() | Out-Null
 $Process.WaitForExit()

$output = $Process.StandardOutput.ReadToEnd()
 "Backup started: $Date" | Out-File "Backup.log" -Append
 $output | Out-File "Backup.log" -Append

$ExitCode = $Process.ExitCode
If ($ExitCode -ne 0) {
Write-Host "`nBackup may have not been successful, ExitCode: $ExitCode was returned`n`n" -ForegroundColor Red
 Write-Host $output
 }
 Else {
Write-Host "Backup of database: $Database finished with no errors" -ForegroundColor Green
 }
 }
}

If ($ResetRegKey) {
 Write-Host "Setting EnableVSSWriter=1"
Set-ItemProperty -path $RegParameters -Name "EnableVSSWriter" -value 1 -Type "DWord"
 Write-Host "Restarting the Exchange Replication Service"
Restart-Service "MSExchangeRepl"
}

For more information on this issue, using Windows Backup, and backing up Exchange in general read the following articles.
EHLO Blog: Backup issues and limitations with Exchange 2010 and DAG

TechNet: Using Windows Server Backup to Back Up and Restore Exchange Data

EHLO Blog: Everything You Need to Know About Exchange Backups

NOT the issue, but will come up when trying to search for VSSWriter issue:
KB2616952: Windows Server Backup May fail the Exchange Consistency Check

Posted in Exchange, Microsoft, Script | Tagged , , , | Leave a comment

Returning my Windows 8 Phone

I got a HTC Windows Phone 8X just before Christmas, I’ve been wanting to switch back to a Microsoft phone since I got my iPhone 4 over two years ago. I got my iPhone in Sept 2011 and at that time Verizon only had one fairly low end Windows Phone (WP) 7 model and the mobile OS was just too new and had two few apps.

It’s now two years later and the WP8 is a great OS and I like it and the HTX 8X A LOT more than iOS, BUT the app selection is still too limited. I’ve basically come to use my phone more as a small tablet and the apps are the second most important feature, behind cellular coverage. So the OS is in third place, while this area is much better on WP8 than iOS it’s not enough to keep me. So I’ll be returning my phone before the 1/15, when all “Christmas” returns expire with Verizon, and getting an iPhone 5 for myself and Rose, whose contract is also up and has an iPhone 4. When the contract is up on Elizabeth’s phone (Rose’s 10 year old) I’ll reevaluate the Windows Phone again then.

So here’s a quick review after 14 days with my new Windows Phone 8 and maybe some of my WP8 users can provide some feedback before I go back to an iPhone. Oh and before anyone comments, iPhone and WP8 OS are much better than Android and I refuse to use any Google products. There is no privacy or ownership of your data stored on Google’s servers!

Positives

  • Interface is great
  • UI is really slick and very quick – Phone is MUCH faster than my 2+ year old iPhone 4, but that’s to be expected give how old the iPhone 4 is in technology terms
  • Tiles make getting information and contacting people or opening apps much quicker
  • Word predictions is great – Android has had this since day one I think
  • Voice to text is good, but limited to only a few apps – Android and iPhone 5 have this too
  • Jump to app\person\etc by initial is a much needed feature
  • “Local scout” – Sort of like FourSquare, Yelp, and other “what nearby” type apps
  • Microsoft OneNote is much better – I use this app all the time to take and sync notes across my phone, Rose’s, my PA’s, and desktop. But I can live without the extra formatting the WP version provides
  • “Free” MiFi mode – Nice feature, on the iPhone this was extra to activate

Negatives

  • No memory expansion support on the 8X – I thought all WP had micro SD slots and didn’t realize this till I got home, the 8X has 16GB of RAM but I was using 70% of this same space on my iPhone for music caching from Spotify so was looking forward to putting in a 32 or 64GB card to cache more music offline
  • Lack of apps – I have around 100 on my iPhone, these are just the ones on my 1st page that I use at least every week and are the reason I’m going back to an iPhone:
    • Spotify – What I use for music 90% of       the time, should have WP version out soon
    • Facebook apps sucks, I’ve been using the mobile site mostly
      • iPhone version is so much better!
      • Auto-refresh jumps you to top of Newsfeed in new posts – This is VERY annoying!
      • No management of list, can’t set which list people are on or if their post        shows in the newsfeed
      • Can’t change Newsfeed sort order
      • Can’t unlike pages
      • Can’t tag people in comments or in pictures, just in initial posts
      • Can’t check into events
    • No  Waze – Awesome free GPS app with community updating of traffic and events, they have no plans for WP support (I contacted them)
      • I tried several GPS apps, but wasn’t willing to pay more than a few        dollars and they all pale in comparison to Waze
    • SirrusXM – What I use for music the other 5% of the time
    • Remote control apps
      • Remoteless – Remote for Spotify PC player, which is what I use 95% of the time to listen to music at home
      • Remote – Remote for Media Monkey (also for iTunes, but I don’t use iTunes)
    • Music\band tracking apps: SongKick, BandMate, JamBass, Live Nation – ShowSeek was recommended as an alternative
    • Others
      • Entertainment: Flixter – Oops, this is on WP
      • Travel: Taxi Magic, Uber, B-Cycle, Orbitz
      • News  & Info apps: Pulse, Wired, Denver Post, Westword, First Aid, WebMD,       Dayta
      • Social: Voxer, GroupMe, WordPress, TweetCaster,
      • Outdoors: MotionX-GPS, Ski Tracks, Ski & Snow, iTrailMaps
  • Interface issues
  • Can’t lock screen rotation – VERY annoying when using your phone in bed!
  • Can’t view other’s calendars – They show up in the list, but don’t show on the calendar, maybe a bug
  • No pop-up notifications, like the subject of an email just received
  • No nesting of app tiles, so you have scroll over to a long list of apps
  • No jump to top function
  • No “Reader” mode in default (IE) browser – I’ve installed another browser that has this and rotation lock
  • Can’t change default browser
  • Unable to removing music playing info from vol pop-up
  • Time not shown in most apps
  • No Cut & Paste, only copy (minor I know, but it’s annoying)
Posted in Technical | Tagged , | 3 Comments

Script: Get-PFInfo.ps1, Fix-PFSchedule.ps1 & some PF replication troubleshooting info

I’m currently working on a Exchange 2007 to 2010 migrations and the client has about 32K and 600 GB of Public Folders. Getting these to replicate has been a big issue, mainly due to issues with replication not happening as expected. I’ve added the target server as a replica, but folders still didn’t fully replicate.

One of the first things required was a script to get the item and size info for each folder from each server so I could check if items were replicated. After running the script below, which started out just as a long cmdlet, I found many folders didn’t replicate.

After removing, re-adding replicas, doing Update-PublicFolder, and other things they still didn’t replicate. I was finally able to get them to replicate after resetting the UseDatabaseReplicationSchedule AND ReplicationSchedule attributes on the problematic folders using a cmdlet like this:
Get-PublicFolder “\Bad Folder” -ResultSize Unlimited -Recurse | set-publicfolder -UseDatabaseReplicationSchedule $False -ReplicationSchedule “Friday.4:00 PM-Monday.4:00 AM”

I looked into the settings on the Public Folders and most, but not all, were using the default replication scheduled but also had the ReplicationSchedule attribute set. The ones that did have a schedule set should have allowed the folders to replicate. All of the PFs that weren’t replicating were only on once server before the new 2010 ones were added, so replication issues hadn’t come up before.

After doing this the folders finally did replicate, so I suspect the attributes were messed up\corrupted in some way that was preventing Exchange from replicating them. Now that the public folders were adjusted, and probably some others too, to have a custom replication schedule that wasn’t needed anymore I needed to clear out these values. So I wrote Fix-PFSchedule.ps1 to do this, plus a few other things.

The Get-PFInfo.ps1 script is the one I used to get Public Folder data, which writes it to the console and to a CSV file.

Get-PFInfo.ps1

# This script will get item count and item size from every Public Folder the folder specified 
# 
# Created by Jason Sherry | http://jasonsherry.org
# Created: 12/31/2012 | Last Updated: 1/1/2013
# Source: http://izzy.org/scripts/Exchange/Admin/Get-PFInfo.ps1

#Exchange 2010 version, will not work on 2007
param(
	[Parameter(Mandatory = $true)]
	[String] $PublicFolder
)

$computerName = $env:computerName

Function FixFileName ($FileName) {
	$FileName = $FileName.Replace('/', '_')
	$FileName = $FileName.Replace('\', '-')
	$FileName = $FileName.Replace(':', '_')
	$FileName = $FileName.Replace('*', '_')
	$FileName = $FileName.Replace('?', '_')
	$FileName = $FileName.Replace('"', '_')
	$FileName = $FileName.Replace('<', '_')
	$FileName = $FileName.Replace('>', '_')
	$FileName = $FileName.Replace('|', '_')
	Return $FileName
}

$OutputFile = FixFileName($PublicFolder)
$OutputFile = ".\" + $computerName + "-PF-Info " + $OutputFile + ".csv"
Write-Host "Getting all Public Folders under [$PublicFolder], saving data to [$OutputFile]" -ForegroundColor Cyan
$PFs = get-publicfolder $PublicFolder -ResultSize Unlimited -Recurse
Write-Host "`tFound " $PFs.Count -ForegroundColor Blue
Write-Host "Item `t MBs `t Path"
$TotalSize = 0
$TotalItemCount = 0
$PFs | ForEach {
	$PFStats = Get-PublicFolderStatistics $_.Identity
	$FolderSize = $PFStats.TotalItemSize.Value.ToMB()
	$FolderItemCount = $PFStats.ItemCount
	$TotalSize = $TotalSize  + $FolderSize
	$TotalItemCount = $TotalItemCount + $FolderItemCount
	Write-Host $PFStats.ItemCount `t $PFStats.TotalItemSize.Value.ToMB() `t $PFStats.FolderPath
	$PFStats | Select FolderPath, ItemCount, @{Expression={$_.TotalItemSize.Value.ToKB()};Label="Size (KB)"}, LastModificationTime
}| export-csv -NoTypeInformation $OutPutFile -Encoding unicode
Write-Host "Total Item Count: $TotalItemCount | Total Size: $TotalSize (MB)" -ForegroundColor Cyan

Fix-PFSchedule.ps1

# This script will set the ReplicationSchedule for Public Folders, in an attempt to get Public Folders to replicate
# It is assumed that the Replicas have already been setup, but the folders aren't replicating

# Created by Jason Sherry | http://jasonsherry.org
# Created: 11/24/2012 | Last Updated: 1/1/2013
# Source: http://izzy.org/scripts/Exchange/Admin/Fix-PFSchedule.ps1

param(
	[Parameter(Mandatory = $true)]
	[String] $PublicFolder
)

$GetStats = $False
$Update = $False
$Server = "IZSRVEX01"
$LogFile = "Fix-PF.log"

$Text =  "Getting Public Folder: [$PublicFolder] and its children"
Write-Host $Text ; Add-Content $LogFile $Text

$PublicFolders = Get-PublicFolder $PublicFolder -ResultSize Unlimited -Recurse
$Text =  "Folder Count: " + $PublicFolders.Count
Write-Host $Text ; Add-Content $LogFile $Text
ForEach ($Pf in $PublicFolders) {
	$Text = "Processing " + $Pf.Identity
	Write-Host $Text ; Add-Content $LogFile $Text
	If ($PF.UseDatabaseReplicationSchedule -eq $False) {
		Set-PublicFolder $PF -UseDatabaseReplicationSchedule $False -ReplicationSchedule Always
		Set-PublicFolder $PF -UseDatabaseReplicationSchedule $True
		Write-Host "`t Schedule reset to default"
	}
	If ($Update) { 
		Update-PublicFolder $PF -Server $Server
	}
	If ($GetStats) {
	$PFStats = Get-PublicFolderStatistics $PF
		$Text =  "`tItems: " + $PFStats.ItemCount + " Size: " + $PFStats.TotalItemSize.Value.ToKB()
		Write-Host $Text -ForegroundColor "Blue"; Add-Content $LogFile $Text

		$Text =  "`tReplicas:" + $PF.Replicas + "`tUse Default:" + $PF.UseDatabaseReplicationSchedule + "`n`tSchedule:" + $PF.ReplicationSchedule
		Write-Host $Text ; Add-Content $LogFile $Text
		$Date = Get-Date
		Write-Host "Time: " $Date.ToShortDateString() " " $Date.ToShortTimeString()
		Write-Host
	}
}
Posted in Exchange, Script, Technical | Tagged , , , | 1 Comment

Script: Get Exchange 2007, 2010, & 2013 roles, version, and update rollup info

I first came across this code on Jeff Guillet’s blog here, which the source came from Paul Falherty’s blog initially, back in 2009 for Exchange 2007. Mark E. Smith also had code with a slight modification for Exchange 2010 posted here.

Today I decided to merge these to work with Exchange 2007, 2010, and 2013 into one script.

The change was pretty minor, just had to change the registry path used. Exchange 2010 and 2013 use the same registry path to store updates, but 2007 uses a different one.

# This script will get the Exchange 2007+ version and Update Rollup numbers
# Source: http://izzy.org/scripts/Exchange/Admin/Get-ExchangeVer.ps1

# Created by Paul Flaherty, v 1.2 source from Jeff Guillet 9/17/2009
# Orginal source: http://www.expta.com/2009/05/powershell-script-to-get-exchange.html

# Modifed by Jason Sherry | Last Updated: 10/22/2012 | Version 1.2
# 	05/15/2011 1.1 - Added logging to a file
# 	12/27/2022 2.0 - Changed code to match latest 1.2 code from Jeff Guillet and added support for Exchange 2010 and 2013

#Get a list of Exchange Server in the Org excluding Edge servers
$MsxServers = Get-ExchangeServer | where {$_.ServerRole -ne "Edge"} | sort Name
$filename = "MBServerVer-Info.txt"

 #Loop through each Exchange server that is found
 ForEach ($MsxServer in $MsxServers)
 {
  #Get Exchange server version
  $MsxVersion = $MsxServer.ExchangeVersion
  #Create "header" string for output
  # Servername [Role] [Edition] Version Number
  $txt1 = $MsxServer.Name + " [" + $MsxServer.ServerRole + "] [" + $MsxServer.Edition + "] " + $MsxServer.AdminDisplayVersion #$MsxVersion.ExchangeBuild.toString()
  $txt1 | Out-File -FilePath $FileName -Append
  write-host $txt1

  $Version= $MsxServer.AdminDisplayVersion
	If ($Version -Like "Version 8*") {
	  $key = "SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-18\Products\461C2B4266EDEF444B864AD6D9E5B613\Patches\"
		$Version = 2007}
	If ($Version -Like "Version 14*") {
	  $key = "SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-18\Products\AE1D439464EB1B8488741FFA028E291C\Patches\"
		$Version = 2010}
	If ($Version -Like "Version 15*") {
	  $key = "SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-18\Products\AE1D439464EB1B8488741FFA028E291C\Patches\"
		$Version = 2013}

  #Connect to the Server's remote registry and enumerate all subkeys listed under "Patches"
  $Srv = $MsxServer.Name
  $type = [Microsoft.Win32.RegistryHive]::LocalMachine
  $regKey = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey($type, $Srv)
  $regKey = $regKey.OpenSubKey($key)
  #Loop each of the subkeys (Patches) and gather the Installed date and Displayname of the Exchange patch
  $ErrorActionPreference = "SilentlyContinue"
  ForEach($sub in $regKey.GetSubKeyNames())
  {
   $SUBkey = $key + $Sub
   $SUBregKey = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey($type, $Srv)
   $SUBregKey = $SUBregKey.OpenSubKey($SUBkey)
   ForEach($SubX in $SUBRegkey.GetValueNames())
   {
    # Display Installed date and Displayname of the Exchange 2007 patch
    $Installed = ""
		IF ($Subx -eq "Installed")   {
     $Installed = $SUBRegkey.GetValue($SubX)
     $Installed = $Installed.substring(4,2) + "/" + $Installed.substring(6,2) + "/" + $Installed.substring(0,4)
    }
		$DisplayName = ""
    IF ($Subx -eq "DisplayName") {
			$DisplayName = $SUBRegkey.GetValue($SubX) }
	If ($Installed -ne "" -And $DisplayName -ne "") {
		Write-Host "`t$Installed : $DisplayName"
		"`t$Installed : $DisplayName" | Out-File -FilePath $FileName -Append }
   }
  }
   write-host ""
 }
Posted in Exchange | Tagged , , | 8 Comments

30 Short questions and tips for Outlook 2013

Just came across this article when trying to figure out how to make “Pop out” the default in Outlook 2013. There were a few other things I ended up change too. So if you are running Outlook 2013 check out this list.

http://www.howto-outlook.com/faq/outlook2013newandchanged.htm

Posted in Outlook, Technical | Tagged | Leave a comment

Do NOT install KB2506146 or KB2506143 (WMF 3.0) on your Exchange 2007/10 & SBS servers

12/19 Update: Microsoft has removed these updates from Windows Update
As of 1/16 these updates are still marked “expired” on Windows Update and do not show up
Also do not install these updates on Microsoft Small Business Server (SBS) 2008 or 2011, see Susan Bradley blog post on this topic for more details.

These udpates also break other features in SBS besides Exchange, cause issues with System Center 2010, and I expect other PowerShell based applications.

12/14 Update: EHLO Blog post:
Windows Management Framework 3.0 on Exchange 2007 and Exchange 2010
These updates install PowerShell 3.0 and they will break installation of Exchange updates and maybe other things. They will not supported until Exchange 2010 SP3 is released, sometime in 1st qtr 2013 probably.

As of 12/11/2012 these updates are showing up on Windows Update as optional updates.

For more info see my friend’s blog post here: http://theessentialexchange.com/blogs/michael/archive/2012/12/13/windows-management-framework-3-0-powershell-3-0-and-exchange.aspx

Also Exchange 2010 SP2 RU5v2 has been re-released.
http://support.microsoft.com/?kbid=2785908 http://blogs.technet.com/b/rmilne/archive/2012/12/11/exchange-2010-sp2-ru5v2-released.aspx

Note: I have not tested this rollup in production yet since my servers are running Exchange 2010 SP3 beta or Exchange 2013 now.

Posted in Exchange, Technical | Tagged , , | 1 Comment