This content was extracted from a separate upcoming Exchange 2013 schema post to maintain focus on viewing the Exchange schema attributes.
Exchange 2013 admins should assume that a Cumulative Update (CU) will have AD schema updates. The release notes and release blog post will discuss this in detail for each CU. This is very similar to the Exchange 2007/2010 service packs of old.
Table Of Exchange 2013 Schema Versions
TechNet documents the expected values for the various Exchange 2013 objects in AD.
Exchange Version |
msExchProductId |
rangeUpper |
MESO objectVersion |
Organisation objectVersion |
| Exchange 2013 RTM | 15.00.0516.032 | 15137 | 13236 | 15449 |
| Exchange 2013 CU1 | 15.00.0620.029 | 15254 | 13236 | 15614 |
| Exchange 2013 CU2 | 15.00.0712.024 | 15281 | 13236 | 15688 |
| Exchange 2013 CU3 | 15.00.0775.038 | 15283 | 13236 | 15763 |
| Exchange 2013 SP1 | 15.00.0847.032 | 15292 | 13236 | 15844 |
| Exchange 2013 CU5 | 15.00.0913.022 | 15300 | 13236 | 15870 |
| Exchange 2013 CU6 | 15.00.0995.029 | 15303 | 13236 | 15965 |
| Exchange 2013 CU7 | 15.00.1044.025 | 15312 | 13236 | 15965 |
| Exchange 2013 CU8 | 15.00.1076.009 | 15312 | 13236 | 15965 |
| Exchange 2013 CU9 | 15.00.1104.005 | 15312 | 13236 | 15965 |
| Exchange 2013 CU10 | 15.00.1130.007 | 15312 | 13236 | 16130 |
| Exchange 2013 CU11 | 15.00.1156.006 | 15312 | 13236 | 16130 |
| Exchange 2013 CU12 | 15.00.1178.004 | 15312 | 13236 | 16130 |
| Exchange 2013 CU13 | 15.00.1210.003 | 15312 | 13236 | 16130 |
| Exchange 2013 CU14 | 15.00.1236.003 | 15312 | 13236 | 16130 |
| Exchange 2013 CU15 | 15.00.1263.005 | 15312 | 13236 | 16130 |
| Exchange 2013 CU16 | 15.00.1293.002 | 15312 | 13236 | 16130 |
| Exchange 2013 CU17 | 15.00.1320.004 | 15312 | 13236 | 16130 |
| Exchange 2013 CU18 | 15.00.1347.002 | 15312 | 13236 | 16130 |
| Exchange 2013 CU19 | 15.00.1365.001 | 15312 | 13236 | 16130 |
| Exchange 2013 CU20 | 15.00.1367.003 | 15312 | 13236 | 16130 |
For Exchange 2007 and 2010 Schema details please review this article.
Methods To Check Schema And AD Object Values
We can check the Exchange values stored in the AD schema version in a few ways. For example we could use
- DSQuery
- LDP.exe
- ADSIEdit
Examples to check the ms-Exch-Schema-Version-Pt are shown below.
DSQuery
Can execute DSQuery commands to quickly get the required attribute data. For example this queries the ms-Exch-Schema-Version-PT schema object and retrieves the rangeUpper data.
dsquery * CN=ms-Exch-Schema-Version-Pt,cn=schema,cn=configuration,dc=contoso,dc=com -scope base -attr rangeUpper
LDP.exe
- In Ldp, click Bind on the Connection menu.
- In the Bind type area, click Bind as currently logged on user, and then click OK.
- On the View menu, click Tree.
- In the Tree View dialog box, select CN=Schema,CN=Configuration,DC=contoso,DC=comin the BaseDN list, and then click OK.
- Expand the schema node in the navigation pane, and then click ms-Exch-Schema-Version-Pt.
- If the ms-Exch-Schema-Version-Pt schema attribute is not listed, click General on the Options menu, increase the value of the Max children buffer size, click OK, and then repeat the previous step. This should be 1,000 by default.
- In the right pane, scroll down to the bottom and locate the rangeUpper attribute
ADSI Edit
- In the ADSI Edit console, right-click ADSI Edit in the navigation pane, and then click Connect to.
- In the Connection Settings dialog box, select Schema in the Select a well known Naming Context list, and then click OK.
- Expand the schema node in the navigation pane, and then click CN=Schema,CN=Configuration,DC=contoso,DC=com.
- Right-click CN=ms-Exch-Schema-Version-Pt, and then click Properties.
- On the property page, locate rangeUpper in the Attribute list
Command Line Example Using DSQuery
In this post let's use the DSQuery method since it is easy to script and then screenshot since we will be checking the attributes multiple times. We also want to take a look at multiple objects. Bhargav blogged about this previously. We will also look at the msExchangeproductId attribute that is listed in the verification steps in TechNet. The full location of the four attributes we will look at are:
rangeUpper attribute of ms-Exch-Schema-Version-Pt object in Schema Naming Context
objectVersion attribute of Organization container in Configuration Naming Context
msExchProductId attribute of Organization container in Configuration Naming Context
objectVersion attribute on Microsoft Exchange System Objects container in Domain Naming Context
To do so, we can use the following queries in the Contoso.com lab:
DSQUERY.exe * "CN=ms-Exch-Schema-Version-Pt,CN=schema,CN=configuration,DC=Contoso,DC=com" -Scope base -Attr rangeUpper
DSQUERY.exe * "CN=Contoso,CN=Microsoft Exchange,CN=Services,CN=Configuration,DC=Contoso,DC=com" -Scope base -Attr objectVersion
DSQUERY.exe * "CN=Contoso,CN=Microsoft Exchange,CN=Services,CN=Configuration,DC=Contoso,DC=com" -Scope base -Attr msExchProductId
DSQUERY.exe * "CN=Microsoft Exchange System Objects,DC=Contoso,DC=com" -Scope base -Attr objectVersion
Or as a separate example, the Wingtiptoys.ca lab.
DSQUERY.exe * "CN=ms-Exch-Schema-Version-Pt,CN=schema,CN=configuration,DC=Wingtiptoys,DC=ca" -Scope base -Attr rangeUpper
DSQUERY.exe * "CN=Microsoft Exchange System Objects,DC=Wingtiptoys,DC=ca" -Scope base -Attr objectVersion
DSQUERY.exe * "CN=Wingtiptoys,CN=Microsoft Exchange,CN=Services,CN=Configuration,DC=Wingtiptoys,DC=ca" -Scope base -Attr msExchProductId
DSQUERY.exe * "CN=Wingtiptoys,CN=Microsoft Exchange,CN=Services,CN=Configuration,DC=Wingtiptoys,DC=ca" -Scope base -Attr objectVersion
Adjust the commands to suit, unless you do happen to work for Contoso or Wingtiptoys……
Cheers,
Rhoderick
Exchange 2013 CU9 has been released to the Microsoft download centre! Exchange 2013 has a different servicing
After upgrading an Exchange 2013 CU8 lab to CU9, the Set-Mailbox cmdlet did not present the expected
CU8 Build number should be 15.00.1076.009
CU9 Build number should be 15.00.1104.005
Thanks Pelin – updated table!
Cheers,
Rhoderick
Is this the canonical source for these build and schema version numbers? Or is there a kb-article on this somewhere?
Exchange 2013 CU10 has been released to the Microsoft download centre! Exchange 2013 has a different
Can you please update to show CU10? Thanks Ed
there are 3 weeks after the CU10 release , do you not think that it is time to put the CU10 in the Table Of Exchange 2013 Schema Versions ?
Yes, but you do realise that this is not my main job and in effect is all on my personal time Vladimir?
Cheers,
Rhoderick
Hi Luke, there is a link to TechNet just above the table.
Is that what you are looking for?
Cheers,
Rhoderick
From Exchange Management Shell, command:
Get-ExchangeServer | Format-List Name, Edition, AdminDisplayVersion
Result: AdminDisplayVersion : Version 15.0 (Build 1104.5) which corresponds to CU9
However, when I run DSQUERY command:
DSQUERY.exe * "CN=COMPANY,CN=Microsoft Exchange,CN=Services,CN=Configuration,DC=corp,DC=company,DC=com" -Scope base -Attr msExchProductId
Result: 15.00.1076.009 which corresponds to CU8
CU9 was successfully applied, so is there an explanation for this discrepancy?
Just adding a note:
rangeUpper, MESO objectVersion, and Organization objectVersion match values for CU9 (which are identical to CU8)
I believe I’ve found the answer. I did not run the /PrepareAD as I had understood there was no change to the schema. I thought this was further confirmed here (http://goo.gl/wZ1lfb) as I was able to set the MessageCopyForSentAsEnabled
cmdlet parameters to $True.
Nevertheless, I ran:
Setup.exe /prepareAD /IAcceptExchangeServerLicenseTerms
from my CU9 directory and then re-ran the DSQUERY:
DSQUERY.exe * "CN=COMPANY,CN=Microsoft Exchange,CN=Services,CN=Configuration,DC=corp,DC=company,DC=com" -Scope base -Attr msExchProductId
and my result was: 15.00.1104.005
Now, do I have to re-run the CU9 setup again like this?
Setup.exe /mode:upgrade /IAcceptExchangeServerLicenseTerms
…or was the /PrepareAD command sufficient?
I apologize if it seems that I have a less than adequate grasp…
Hi Andy – what CU were you upgrading from?
Cheers,
Rhoderick
Exchange 2013 CU11 has been released to the Microsoft download centre! Exchange 2013 has a different
needs updating for cu11
Thanks Rhoderick for taking the time to detailing how to check Exchange 2013 schema. You saved me a lot of time.
@Turbomcp
I don’t believe CU11 does any Schema/AD updates over CU10. My versions came out the same as CU10 when running CU11 – 15312 and 16130.
Thanks folks – updated for CU11.
Andrew – yes the values match.
Cheers,
Rhoderick
Hi Rhoderick,
Is there a way to verify RBAC change regarding as CU10?
Thanks
Ken
CU13 has been released. Could you please update the table?
Believe CU13 is msExchProductId 15.00.1210.003. Excellent article.
Hi Steve,
Ran this in a CU13 lab – do you have different?
C:\Scripts>Check-Exchange-Schema.bat
C:\Scripts>DSQUERY.exe * “CN=Wingtiptoys,CN=Microsoft Exchange,CN=Services,CN=Configuration,DC=Wingtiptoys,DC=ca” -Scope base -Attr msExchPr
oductId
msExchProductId
15.00.1178.004
C:\Scripts>DSQUERY.exe * “CN=ms-Exch-Schema-Version-Pt,CN=schema,CN=configuration,DC=Wingtiptoys,DC=ca” -Scope base -Attr rangeUpper
rangeUpper
15312
C:\Scripts>DSQUERY.exe * “CN=Microsoft Exchange System Objects,DC=Wingtiptoys,DC=ca” -Scope base -Attr objectVersion
objectVersion
13236
C:\Scripts>DSQUERY.exe * “CN=Wingtiptoys,CN=Microsoft Exchange,CN=Services,CN=Configuration,DC=Wingtiptoys,DC=ca” -Scope base -Attr objectVe
rsion
objectVersion
16130
C:\Scripts>
Rhoderick,
The correct msExchProductId after upgrading to CU13 is 15.00.1210.003
Please correct it in the table.
Thanks folks – that does indeed need edited.
Something went awry, and I have a suspicion, but let me confirm please.
Cheers,
Rhoderick
After running CU13 schema updates, we also get 15.00.1210.003 for the product ID.
Hi,
Could you please add the version numbers for Exchange 2013 CU14.
Thank you
Exchange 2013 CU14 msExchProductId : 15.00.1236.003 rangeupper : 15312 meso objectversion : 13236 organisation objectversion : 16130
Where can I find the CU15 Schema update information?
Updated table with both CU15 and CU16 information Al.
I will also publish a post next week that deals with the unexpected values issue, as the setup steps are not always being triggered in all cases.
Cheers,
Rhoderick
To make my life easier I wrote a function to find the schema version info. Hopefully this helps someone. just replace “DC=contoso,DC=local” and “mysubdomain,DC=contoso,DC=local” with the actual name of your domain. (I am not a programmer and my code is not pretty, but it always gets the job done.)
function get-exchangeprereq
{
$msExchProductId = (DSQUERY.exe * “CN=Exchange,CN=Microsoft Exchange,CN=Services,CN=Configuration,DC=contoso,DC=local” -Scope base -Attr msExchProductId)[1].trim()
$RangeUpper = (DSQUERY.exe * “CN=ms-Exch-Schema-Version-Pt,CN=Schema,CN=Configuration,DC=contoso,DC=local” -Scope base -Attr rangeUpper)[1].trim()
$MESOobjectVersion = (DSQUERY.exe * “CN=Microsoft Exchange System Objects,DC=mysubdomain,DC=contoso,DC=local” -Scope base -Attr objectVersion)[1].trim()
$OrganizationobjectVersion = (DSQUERY.exe * “CN=Exchange,CN=Microsoft Exchange,CN=Services,CN=Configuration,DC=contoso,DC=local” -Scope base -Attr objectVersion)[1].trim()
CLS
write-host “[msExchProductId]`t`t$($msExchProductId)”
write-host “[RangeUpper]`t`t`t$($RangeUpper)”
write-host “[MESOobjectVersion]`t`t$($MESOobjectVersion)”
write-host “[OrganizationobjectVersion]`t$($OrganizationobjectVersion)”
write-host “”
}
get-exchangeprereq
NICE 🙂
I have the commands from the post saved as a batch file. Does the same thing, runs DSQUERY.
For bonus marks, pull that direct from AD without using legacy cmdline tools 🙂
Cheers,
Rhoderick
Challenge accepted. Made it a little more professional, got rid of the “Write-host”, got rid of “dsquery”, queried info from AD, and put all the information into an object in case you wanted to work with the output. Thanks for the feedback 🙂 . Should work for anyone that is using exchange 2013.
function Get-ExchSchemaAndObjectValues
{
# Author: Keith Smith
# Email: Keith.J.Smith@outlook.com
# Date: 03.27.2017
# Import Active Directory Module for users with older versions of PowerShell
Import-Module ActiveDirectory
# Pull Exchange Info from AD and put it into an object
$obj = New-Object PSObject
Add-Member -InputObject $obj -MemberType NoteProperty -Name msExchProductId -Value “$($(Get-ADObject “CN=Exchange,CN=Microsoft Exchange,CN=Services,$((Get-ADRootDSE).configurationNamingContext)” -Property msExchProductId).msExchProductId)”
Add-Member -InputObject $obj -MemberType NoteProperty -Name RangeUpper -Value “$($(Get-ADObject “CN=ms-Exch-Schema-Version-Pt,$((Get-ADRootDSE).schemaNamingContext)” -Property Rangeupper).RangeUpper)”
Add-Member -InputObject $obj -MemberType NoteProperty -Name objectVersion -Value “$($(Get-ADObject “CN=Microsoft Exchange System Objects,$((Get-ADRootDSE).defaultNamingContext)” -Property objectVersion).objectVersion)”
Add-Member -InputObject $obj -MemberType NoteProperty -Name OrganisationobjectVersion -Value “$($(Get-ADObject “CN=Exchange,CN=Microsoft Exchange,CN=Services,CN=Configuration,DC=corp,DC=prod” -Property objectVersion).ObjectVersion)”
#$obj
# Output information to screen after clearing it
CLS
Write-output “”
Write-output “Compare the below results to Rhoderick Milne’s Table Of Exchange 2013 Schema Versions”
Write-output “https://blogs.technet.microsoft.com/rmilne/2015/03/17/how-to-check-exchange-schema-and-object-values-in-ad/”
Write-output “”
$obj
}
Get-ExchSchemaAndObjectValues
Excellent – love it 🙂
Cheers,
Rhoderick
Once correction on the function, you have the last command setup with hard coded values instead of doing the lookup like you did with the others.
Also use Single-Quotes where its just plain text. While Double-Quotes for text that has variables that need processed.
Is this being updated for the latest cumulative releases? I don’t see cu17 or cu18 which just came out. The CU documents point to this document for schema info
Exchange 2013 CU 19 has been released any updates for this ?