#IAMMEC
So if you want to find out the version of Exchange you are running you can always run:
Get-ExchangeServer | Select Name, ServerRole, Edition, AdminDisplayVersion
Now this is cool, but it only shows the major version and not the CU.
You can find exchange build information from two main places:
- http://social.technet.microsoft.com/wiki/contents/articles/240.exchange-server-and-update-rollups-build-numbers.aspx
- http://technet.microsoft.com/library/hh135098.aspx
I have dropped the information into a CSV file [ExchangeBuilds]. I found that updating a CSV file with new builds was easier than editing code all the time.
Now code below to create a summary matrix. Enjoy
#Import the csv and covert to a hash table $ExchangeBuilds = import-csv .\ExchangeBuilds.csv $BuildMatrix = @{} ForEach($Item in $ExchangeBuilds){ $BuildMatrix.Add($item.Build, $item.version) } #Get exchange servers Get-ExchangeServer | Select Name, ServerRole, Edition, AdminDisplayVersion #Loop the servers to create the matrix $matrix =@() $ExchangeServers = Get-ExchangeServer | Sort Name ForEach($Item in $ExchangeServers){ $tmpServer = $item.Name + "." + $item.domain Write-Host $tmpServer $tmpMatrix = "" | Select Name, Roles, Edition, FileVersion,UpdateRollup $tmpMatrix.Name = $tmpServer $tmpMatrix.Roles = $Item.ServerRole $tmpMatrix.Edition = $Item.Edition Switch($item.AdminDisplayVersion.Major){ 6 {$key="SOFTWARE\Microsoft\Exchange\Setup"} 8 {$key="SOFTWARE\Microsoft\Exchange\Setup"} 14 {$Key="SOFTWARE\Microsoft\ExchangeServer\v14\Setup"} } #Find the exchange binary path $type = [Microsoft.Win32.RegistryHive]::LocalMachine $regKey = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey($type, $tmpServer ) $regKey = $regKey.OpenSubKey($key) #work out the file we need to use Switch($item.AdminDisplayVersion.Major){ 6 {$tmpPath = $regKey.GetValue("Services"); $tmpFile = "mad.exe"; $tmpPath += "\bin\"} Default {$tmpPath = $regKey.GetValue("MsiInstallPath");$tmpFile = "ExSetup.exe";$tmpPath += "bin\"} } #Get the file verision of mad.exe or exsetup.exe $tmpPath = $tmpPath.replace(":", "$") $tmpunc = "\\" + $tmpServer + "\" + $tmpPath + $tmpFile IF (test-path $tmpunc){ $tmpVer = (dir "$tmpunc").VersionInfo.FileVersion $tmpMatrix.FileVersion = $tmpVer $tmpMatrix.UpdateRollup = $BuildMatrix.$tmpver } $Matrix += $tmpMatrix } $Matrix