How To Check Exchange Schema And Object Values In AD


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

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

  1. In Ldp, click Bind on the Connection menu.
  2. In the Bind type area, click Bind as currently logged on user, and then click OK.
  3. On the View menu, click Tree.
  4. In the Tree View dialog box, select CN=Schema,CN=Configuration,DC=contoso,DC=comin the BaseDN list, and then click OK.
  5. Expand the schema node in the navigation pane, and then click ms-Exch-Schema-Version-Pt.
  6. 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.
  7. In the right pane, scroll down to the bottom and locate the rangeUpper attribute

 

ADSI Edit

  1. In the ADSI Edit console, right-click ADSI Edit in the navigation pane, and then click Connect to.
  2. In the Connection Settings dialog box, select Schema in the Select a well known Naming Context list, and then click OK.
  3. Expand the schema node in the navigation pane, and then click CN=Schema,CN=Configuration,DC=contoso,DC=com.
  4. Right-click CN=ms-Exch-Schema-Version-Pt, and then click Properties.
  5. 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

Comments (36)

  1. Anonymous says:

    Exchange 2013 CU9 has been released to the Microsoft download centre! Exchange 2013 has a different servicing

  2. Anonymous says:

    After upgrading an Exchange 2013 CU8 lab to CU9, the Set-Mailbox cmdlet did not present the expected

  3. Pelin Tatlidil says:

    CU8 Build number should be 15.00.1076.009
    CU9 Build number should be 15.00.1104.005

  4. Thanks Pelin – updated table!

    Cheers,
    Rhoderick

  5. Luke H says:

    Is this the canonical source for these build and schema version numbers? Or is there a kb-article on this somewhere?

  6. Anonymous says:

    Exchange 2013 CU10 has been released to the Microsoft download centre! Exchange 2013 has a different

  7. Can you please update to show CU10? Thanks Ed

  8. Vladimir Angelov says:

    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 ?

  9. Yes, but you do realise that this is not my main job and in effect is all on my personal time Vladimir?

    Cheers,
    Rhoderick

  10. Hi Luke, there is a link to TechNet just above the table.

    Is that what you are looking for?

    Cheers,
    Rhoderick

  11. Andy Wurst says:

    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?

  12. Andy W says:

    Just adding a note:
    rangeUpper, MESO objectVersion, and Organization objectVersion match values for CU9 (which are identical to CU8)

  13. Andy W says:

    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…

  14. Hi Andy – what CU were you upgrading from?

    Cheers,
    Rhoderick

  15. Anonymous says:

    Exchange 2013 CU11 has been released to the Microsoft download centre! Exchange 2013 has a different

  16. turbomcp says:

    needs updating for cu11

  17. jim says:

    Thanks Rhoderick for taking the time to detailing how to check Exchange 2013 schema. You saved me a lot of time.

  18. Andrew Simpson says:

    @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.

  19. Thanks folks – updated for CU11.

    Andrew – yes the values match.

    Cheers,
    Rhoderick

  20. Ken says:

    Hi Rhoderick,

    Is there a way to verify RBAC change regarding as CU10?

    Thanks

    Ken

  21. CU13 has been released. Could you please update the table?

  22. Steve says:

    Believe CU13 is msExchProductId 15.00.1210.003. Excellent article.

    1. 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>

      1. Benny Mathew says:

        Rhoderick,
        The correct msExchProductId after upgrading to CU13 is 15.00.1210.003
        Please correct it in the table.

        1. Thanks folks – that does indeed need edited.

          Something went awry, and I have a suspicion, but let me confirm please.

          Cheers,
          Rhoderick

    2. Mel says:

      After running CU13 schema updates, we also get 15.00.1210.003 for the product ID.

  23. Alex says:

    Hi,
    Could you please add the version numbers for Exchange 2013 CU14.

    Thank you

  24. Edwin says:

    Exchange 2013 CU14 msExchProductId : 15.00.1236.003 rangeupper : 15312 meso objectversion : 13236 organisation objectversion : 16130

  25. Al says:

    Where can I find the CU15 Schema update information?

    1. 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

  26. 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

    1. 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

      1. 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

        1. Excellent – love it 🙂

          Cheers,
          Rhoderick

        2. Ben D says:

          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.

  27. Leslie Marianko says:

    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

Skip to main content