Modern Public Folders: Part 1

Over the past decade of working with dozen of Exchange environments, I can say that Public Folders are that one part of Exchange that most admins wish weren’t there. Some of you newer admins or have had the benefit of being in an environment where Public Folders were underutilized likely can’t relate with these feelings. But those of us who have been working in these older environments have a hierarchy with hundred- of-thousands of folders.

Legacy Public Folders

Long ago, probably before most people in the Internet were born, Public Folders were meant to fill a gap that allowed groups to share data and information. Remember this is long before Google Drive, SharePoint and the other dozens of collaborative tools that didn’t exist.

Exchange 2010 and prior, Public Folders where hosted on their own separate unique databases. However, the databases weren’t clustered. Instead public folders where synced accrossed databases using PF replication. So the advantage to this method is that you can choose which folders are replicated to which databases. If you wanted to geo-locate data, you could force data to specific databases/servers.

The Cloud Killed Legacy Public Folders

Around the time of Exchange 2007 and 2010, there where rumors spreading about Microsoft killing off Public Folders. Why? Well there was a time that Microsoft was encouraging organizations to move their Public Folder infrastructures to SharePoint. When Microsoft realized that organizations weren’t adopting this strategy they were faced with an issue. See Microsoft wanted to encourage people to start using it’s new cloud based Exchange environments, but it didn’t want to bring Legacy Public Folders to the cloud.

Modern Public Folders

So out of necessity the Modern Public Folders where created started in Exchange 2013. So what is different?

There are no longer any Public Folder Databases.

That’s right, no Public Folder Databases. So where do my public folders go? Well Microsoft decided to create something called a Public Folder Mailbox. These mailboxes can be hosted on regular mailbox databases. Which means, the data can now be protected through Database Availability Groups.

There are two kinds of Public folder mailboxes, Primary and Secondary Hierarchy Mailboxes. There is one and only one Primary Hirearchy Mailbox. The purpose of this mailbox is to maintain the only writable copy of the Public Folder structure and permissions. Every other Public Folder Mailbox is a Secondary  Mailbox. These maintain read-only copies of the hierarchy.

Watch for the next post for strategies on working with large Modern Public Folders.

Skype for Business Custom Statuses

When it comes to Skype for Business, there isn’t much left in the client that is open to customization. But one area that is available but hidden are being able to create custom status. So what is a custom Status? Well it’s a status that stands outside of the default choices of Available, Busy, Do Not Disturb, Be Right Back, etc.

The Scenario

For example, in one environment that I’ve worked in, the organization wanted to allow an individual to set a status of In a Call. The main reason for this was that the environment wasn’t using Enterprise Voice, so there was no automatic status change for these customers. Additional statuses that where desired where a distinction of working from home. This was desired because some individuals lost access to the Location field when logging in remotely.

Creating the Custom Statuses

So how do we make this happen? First, we need to make a specially formatted XML file with our custom states. Microsoft has a great article with an example of the XML formatted file. But for this scenario I created the below XML Code.

<?xml version="1.0" encoding="UTF-8"?>
<customState availability="Busy" ID="1">
<activity LCID="1033">In a Call</activity>
<customState availability="Online" ID="2">
<activity LCID="1033">Working From Home</activity>
<customState availability="Busy" ID="3">
<activity LCID="1033">Working From Home</activity>

Publishing the Custom Statuses

So now that we have our XML file what do we do with it? Next the XML file needs to get published to a secured web-server where clients can access. I chose to publish my file to a new Directory called CustomState on each of the Front-End servers. After putting the file in a directory on each of the Front-End servers, I added that Directory to the root of IIS server so that it is accessible at HTTPS://

It is important that if you have a Pool, that you need to publish this file to every server. Otherwise you’re customers will get an inconsistent result depending on which server they connect to. <h1>Directing the Clients</h1> Finally, we need to let the clients know where to find the custom status file. We do this by configuring the

Set-CsClientPolicy -Identity ClientPolicy -CustomStateURL "HTTPS://"

The End Result

After logging off and back onto my client, the custom states are now showing as expected.

Showing the end result of creating Custom Statuses in Skype for Business

While this is a single, and basic scenario, I’d be interested to know how others are using custom statuses. Please leave a comment to share your experience.

Exchange PowerShell Scripts

Earlier this week Exchange team had a new blog post about some of their favorite PowerShell Scripts for Exchange and Office 365 Admins. While they have a few good suggestions, there are a few more that I’ve found most helpful when working with Exchange.

Generate Health Report for an Exchange Server 2016/2013/2010 Environment

By Paul Cunningham
Download Link

This script is one of my personal favorites and I’ve used it for years in several environments. It does an amazing job of scanning your Exchange organization and reporting back with an easy for follow color coded HTML page that you can have emailed to you. I’ve used this as a daily health check of the environment before the workday begins, and also as a snapshot of the current system health by running it in a scheduled task and having the report outputted to a static HTML page, which can be displayed in a public monitoring space.

Exchange Server Performance Health Checker Script

By Marc Nivens
Download Link

The Health Checker script was created by a Microsoft employee as what I can only assume was a large amount of support calls about server performance that was tied to improper system configuration. So this script is ran against your Exchange servers and verifies that your system is configured to match the Exchange 2013 Sizing and Configuration Recommendations along with several patches and recommendations that have come later.   Below is a list of a few of the items it verifies.

  • OS Version
  • Page File Size
  • Server Role
  • Power Settings
  • Checking if Hyper Threading is enabled
  • .Net version

 I’ve found this script to be particularly helpful before bringing new or rebuilt servers into production as well as to verify that no .Net updates have not sneaked onto the server or that a new critical update isn’t missed. This script is growing and always being updated so be sure to check for updates before running.

If you know of any additional scripts that have been helpful to you as an Exchange administrator, please post them in a comment.