Unknown's avatar

About Michel de Rooij

Michel de Rooij, with over 25 years of mixed consulting and automation experience with Exchange and related technologies, is a consultant for Rapid Circle. He assists organizations in their journey to and using Microsoft 365, primarily focusing on Exchange and associated technologies and automating processes using PowerShell or Graph. Michel's authorship of several Exchange books and role in the Office 365 for IT Pros author team are a testament to his knowledge. Besides writing for Practical365.com, he maintains a blog on eightwone.com with supporting scripts on GitHub. Michel has been a Microsoft MVP since 2013.

Retrieving DCs functional capabilities


While constructing a page for the forest and domain functional levels, and the maximum functional level for domain controllers, I wanted to show an example of how to retrieve this Active Directory attribute for all domain controllers. You could for example incorporate this in your automated procedures to check for any Windows 2003 servers and take further actions when needed.

The script is below. It outputs object so you use the pipe for further processing. For information on the possible values for msDS-Behavior-Version check out the new AD Functional Levels page here.

#--------------------------------------------------------------------------------
# Name         : Get-DCMSDSBehaviorVersion.ps1
# Created By   : Michel de Rooij
# E-mail       : michel@eightwone.com
# Date         : 20120307
# Source       : http://eightwone.com
# Version      : 1.0
#
# THIS CODE IS MADE AVAILABLE AS IS, WITHOUT WARRANTY OF ANY KIND. THE ENTIRE RISK
# OF THE USE OR THE RESULTS FROM THE USE OF THIS CODE REMAINS WITH THE USER.
#--------------------------------------------------------------------------------

$RootDSE= [ADSI]'LDAP://RootDSE'
$objSearchRoot= New-Object DirectoryServices.DirectoryEntry( "LDAP://"+ $RootDSE.configurationNamingContext)
$objSearch= New-Object DirectoryServices.DirectorySearcher
$objSearch.SearchRoot= $objSearchRoot
$objSearch.Filter= "(objectClass=nTDSDSA)"
$objSearch.SearchScope = "SubTree"
$Results= @()
$objSearch.FindAll() | ForEach {
    $objItem = $_.getDirectoryEntry()
    $obj= New-Object PSObject -Property @{
        Servername= $objParent = $objItem.psbase.parent.DNSHostName.ToString()
        MSDSBehaviorVersion= $objItem.Get("MSDS-Behavior-Version")
    }
    $Results+= $obj
}
$Results

Note that if you have over 1000 domain controllers, you need to set the $objSearch.Pagesize, e.g. 1000. It may also encounter problems in forests with multiple roots.

Windows Server 8 & Consumer Preview Betas (Updated)


A quick heads-up on today’s release of the much-anticipated Windows “8” beta:

Windows Server “8” Beta
This is the next release of Windows Server, Windows Server “8” and is available for x64 architectures only. You can download Windows Server “8” Beta ISO or VHD here.

Windows Server “8” RSAT for Windows 8 Consumer Preview
The Remote Server Administration Tools (RSAT) for Windows 8 Consumer Preview enable you to manage Windows Server “8” Beta from computer running Windows 8 Consumer Preview. You can download the Windows Server “8” Server Remote Administration Tools for Windows 8 Consumer Preview here.

Windows 8 Consumer Preview
This is the desktop client OS available for x64 and x86 architectures. You can download the Windows 8 Consumer Preview here.

Some (online) documentation which you might find useful:

The Windows “8” operating systems are available English, French, German, Japanese or Simplified Chinese. Like with all beta bits, it’s not recommended to use this in your production environment so use them in a lab or testing environment only.

Update: From an Exchange perspective, it may be worth mentioning that the Windows 8 Customer Preview contains a simple built-in Mail application supports Autodiscover and the Exchange ActiveSync (EAS) protocol. The client will show up in the “Mobile Phones” list in OWA (they might need to relabel that in the next Rollup). The Mail app in the Customer Preview reports as “DeviceUserAgent : WindowsMail/16.2.3237.0215”. Wiping your Windows 8 client isn’t possible, but the e-mail account with all the related data will be removed instead, which isn’t consistent with the expected “Mobile Devices” behaviour in my opinion. I also wonder what your security officer will think of this when you’re running the Mail app on a Windows 8 tablet, e.g. Slate. Exchange fellow Dave Stork has done some more research including screenshots for your reading pleasure here.

The case of the missing Free/Busy public folder pt.2


In an earlier blog, I described the situation where a customer had improperly decommissioned Exchange 2003 Administrative Groups and ended up with invalid, orphaned legacyExchangeDN values causing all sorts of issues, most Public Folder / Free Busy related. Read more on this story here.

In the blog, I had two options on how to proceed:

  1. Edit the legacyExchangeDN attribute of the users affected;
  2. Recreate the Free/Busy public folder.

In the first blog, I described how to fix the situation using the 2nd option. Here’s how to solve this if you have no Exchange 2003 server left and want to go with the other option.

To fix this situation by changing the legacyExchangeDN values, you need to perform the following steps:

  1. Identify all mailboxes containing improper legacyExchangeDN values;
  2. For all those mailboxes, add the current legacyExchangeDN value as an x500 address;
  3. Fix the current legacyExchangeDN.

Note that by adding the invalid legacyExchangeDN value as an X500 address, we make sure (responding to) old e-mail messages or nickname entries can resolve properly.

You could use tools like ADModify to bulk edit those values. However, you also achieve the same result using a little PowerShell (surprise!), as shown in the following script:

Note: Use the script at your own risk. I cannot accept any responsibility for consequences when using this in your production environment. Before using it, prepare it in a lab environment first: test, test, test! Also, this script fixes invalid legacyExchangeDN values; it does not fix any related invalid settings, like delegates; that might be something for a next version when there’s demand for it.

$oldDN="/o=ADATUM/ou=First Administrative Group"
$newDN="/o=CONTOSO/ou=Exchange Administrative Group (FYDIBOHF23SPDLT)/cn=Recipients"
$mbx= get-mailbox -Filter "LegacyExchangeDN -like '$($oldDN)/*'"
$mbx | ForEach {
    $x5= "x500:"+ $_.legacyExchangeDN
    Set-Mailbox $_.Identity -EmailAddresses @{Add=$x5}
    $User = [ADSI]("LDAP://"+$_.distinguishedName)
    $newDN= $newDN+ “/cn=”+ $_.Name
    $User.Put("legacyExchangeDN", $newDN)
    $User.SetInfo()
}

To use the script, replace the $oldDN value with your old, invalid legacyExchangeDN value (as reported in the Event Log entries with Event ID 14031). Set $newDN to your new legacyExchangeDN value; the default value of would be in the format “/o=<Organisation Name>/ou=<Administrative Group, i.e. Exchange Administrative Group (FYDIBOHF23SPDLT)>/cn=Recipients/cn=<Name>”.

If you have any questions, drop them in the comments below.

For all the PowerShell purists: Sometimes I prefer readability over trying to fit everything one 1 line. After all, this isn’t an Obfuscated Code Contest 🙂

Fix for Dutch “Global Addresslist” issue w/Exchange 2010 SP2


Today Microsoft released a fix (kb2677598) for a small cosmetic imperfection which shows up when using Outlook Web Access in Dutch, after installing Service Pack 2 on Exchange 2010.

Instead of showing up “Mail”, OWA displayed “Globale Adreslijst” (Global Addresslist) which might be confusing to end users.

To implement the hotfix, you need to apply the , dated 20 Feb, 2012, on your Exchange 2010 SP2 Client Access Servers.

You can download the Microsoft Exchange Server 2010 SP2 Language Pack Bundle (219 MB) here.

(Thanks to Jetze for the heads-up).

Exchange 2010 SP2 Rollup 1


Today the Exchange Team released Rollup 1 for Exchange Server 2010 Service Pack 2 (KB2645995). This update raises Exchange 2010 version number to 14.2.283.3.

Here’s the huge list of changes included in this rollup:

  • 2465015  You cannot view or download an image on a Windows Mobile-based device that is synchronized with an Exchange Server 2010 mailbox
  • 2492066  An automatic reply message is still sent after you clear the “Allow automatic replies” check box for a remote domain on an Exchange Server 2010 server
  • 2492082  An Outlook 2003 user cannot view the free/busy information of a resource mailbox in a mixed Exchange Server 2010 and Exchange Server 2007 environment
  • 2543850  A GAL related client-only message rule does not take effect in Outlook in an Exchange Server 2010 environment
  • 2545231  Users in a source forest cannot view the free/busy information of mailboxes in a target forest in an Exchange Server 2010 environment
  • 2549255  A meeting item displays incorrectly as multiple all-day events when you synchronize a mobile device on an Exchange Server 2010 mailbox
  • 2549286  Inline contents disposition is removed when you send a “Content-Disposition: inline” email message in an Exchange Server 2010 environment
  • 2556113  It takes a long time for a user to download an OAB in an Exchange Server 2010 organization
  • 2557323  Problems when viewing an Exchange Server 2003 user’s free/busy information in a mixed Exchange Server 2003 and Exchange Server 2010 environment
  • 2563245  A user who has a linked mailbox cannot use a new profile to access another linked mailbox in an Exchange Server 2010 environment
  • 2579051  You cannot move certain mailboxes from an Exchange Server 2003 server to an Exchange Server 2010 server
  • 2579982  You cannot view the message delivery report of a signed email message by using Outlook or OWA in an Exchange Server 2010 environment
  • 2585649  The StartDagServerMaintenance.ps1 script fails in an Exchange Server 2010 environment
  • 2588121  You cannot manage a mail-enabled public folder in a mixed Exchange Server 2003 and Exchange Server 2010 environment
  • 2589982  The cmdlet extension agent cannot process multiple objects in a pipeline in an Exchange Server 2010 environment
  • 2591572  “Junk e-mail validation error” error message when you manage the junk email rule for a user’s mailbox in an Exchange Server 2010 environment
  • 2593011  Warning 2074 and Error 2153 are logged on DAG member servers in an Exchange Server 2010 environment
  • 2598985  You cannot move a mailbox from a remote legacy Exchange forest to an Exchange Server 2010 forest
  • 2599434  A Public Folder Calendar folder is missing in the Public Folder Favorites list of an Exchange Server 2010 mailbox
  • 2599663  The Exchange RPC Client Access service crashes when you send an email message in an Exchange Server 2010 environment
  • 2600034  A user can still open an IRM-protected email message after you remove the user from the associated AD RMS rights policy template in an Exchange Server 2010 environment
  • 2600289  A user in an exclusive scope cannot manage his mailbox in an Exchange Server 2010 environment
  • 2600943  EMC takes a long time to return results when you manage full access permissions in an Exchange Server 2010 organization that has many users
  • 2601483  “Can’t open this item” error message when you use Outlook 2003 in online mode in an Exchange Server 2010 environment
  • 2604039  The MSExchangeMailboxAssistants.exe process crashes frequently after you move mailboxes that contain IRM-protect email messages to an Exchange Server 2010 SP1 mailbox server
  • 2604713  ECP crashes when a RBAC role assignee tries to manage another user’s mailbox by using ECP in an Exchange Server 2010 environment
  • 2614698  A display name that contains DBCS characters is corrupted in the “Sent Items” folder in an Exchange Server 2010 environment
  • 2616124  Empty message body when replying to a saved message file in an Exchange Server 2010 SP1 environment
  • 2616230  IMAP4 clients cannot log on to Exchange Server 2003 servers when the Exchange Server 2010 Client Access server is used to handle proxy requests
  • 2616361  Multi-Mailbox Search fails if the MemberOfGroup property is used for the management scope in an Exchange Server 2010 environment
  • 2616365  Event ID 4999 when the Store.exe process crashes on an Exchange Server 2010 mailbox server
  • 2619237  Event ID 4999 when the Exchange Mailbox Assistants service crashes in Exchange 2010
  • 2620361  An encrypted or digitally-signed message cannot be printed when S/MIME control is installed in OWA in an Exchange Server 2010 SP1 environment
  • 2620441  Stop-DatabaseAvailabilityGroup or Start-DatabaseAvailabilityGroup cmdlet fails when run together with the DomainController parameter in an Exchange Server 2010 environment
  • 2621266  An Exchange Server 2010 database store grows unexpectedly large
  • 2621403  “None” recipient status in Outlook when a recipient responds to a meeting request in a short period of time in an Exchange Server 2010 environment
  • 2628154  “The action couldn’t be completed. Please try again.” error message when you use OWA to perform an AQS search that contains “Sent” or “Received” in an Exchange Server 2010 SP1 environment
  • 2628622  The Microsoft Exchange Information Store service crashes in an Exchange Server 2010 environment
  • 2628693  Multi-Mailbox Search fails if you specify multiple users in the “Message To or From Specific E-Mail Addresses” option in an Exchange Server 2010 environment
  • 2629713  Incorrect number of items for each keyword when you search for multiple keywords in mailboxes in an Exchange Server 2010 environment
  • 2629777  The Microsoft Exchange Replication service crashes on Exchange Server 2010 DAG members
  • 2630708  A UM auto attendant times out and generates an invalid extension number error message in an Exchange Server 2010 environment
  • 2630967  A journal report is not sent to a journaling mailbox when you use journaling rules on distribution groups in an Exchange Server 2010 environment
  • 2632206  Message items rescanned in the background in an Exchange Server 2010 environment
  • 2633044  The Number of Items in Retry Table counter displays an incorrect value that causes SCOM alerts in an Exchange Server 2010 SP1 organization
  • 2639150  The MSExchangeSyncAppPool application pool crashes in a mixed Exchange Server 2003 and Exchange Server 2010 environment
  • 2640218  The hierarchy of a new public folder database does not replicate on an Exchange Server 2010 SP1 server
  • 2641077  The hierarchy of a new public folder database does not replicate on an Exchange Server 2010 SP1 server
  • 2642189  The RPC Client Access service may crash when you import a .pst file by using the New-MailboxImportRequest cmdlet in an Exchange Server 2010 environment
  • 2643950  A seed operation might not succeed when the source mailbox database has many log files in a Microsoft Exchange Server 2010 DAG
  • 2644047  Active Directory schema attributes are cleared after you disable a user’s mailbox in an Exchange Server 2010 environment
  • 2644264  Disabling or removing a mailbox fails in an Exchange Server 2010 environment that has Office Communications Server 2007, Office Communications Server 2007 R2 or Lync Server 2010 deployed
  • 2648682  An email message body is garbled when you save or send the email message in an Exchange Server 2010 environment
  • 2649727  Client Access servers cannot serve other Mailbox servers when a Mailbox server encounters a problem in an Exchange Server 2010 environment
  • 2649734  Mailbox replication latency may occur when users perform a Multi-Mailbox Search function against a DAG in an Exchange Server 2010 environment
  • 2649735  Warning of undefined recipient type of a user after the linked mailbox is moved from an Exchange Server 2007 forest to an Exchange Server 2010 forest
  • 2652849  The MailboxCountQuota policy is not enforced correctly in an Exchange Server 2010 hosting mode
  • 2665115  Event ID 4999 is logged on an Exchange Server 2010 Client Access server (CAS)

When running ForeFront Protection for Exchange, make sure you disable ForeFront before installing the rollup and re-enable it afterwards, otherwise the Information Store and Transport services may not start. You can disable ForeFront using fscutility /disable and enable it using the fscutility /enable command.

You can download Exchange 2010 SP2 Rollup 1 here.