Changelog: ExchangeServices

This is the changelog for ExchangeServices. You will find a complete list of released versions, their dates, and the features and issues addressed in each. Please refer to the script’s main page for more information including download links, installation details, and more.

v1.0 – 04-01-2014

  1. Original version
Categories: Exchange Server Tags:

New Syntax Highlighting and Auto-Complete Files for UltraEdit includes PowerShell v4, AD, Lync 2013, and Exchange 2013

March 12, 2014 Leave a comment

Syntax highlighting

Updated the wordfile a little bit. This one includes all previous functions as well as the following:

  1. PowerShell v4 cmdlets (the ones available when you open a new v4 session).
  2. Exchange 2013 SP1 cmdlets
  3. Lync 2013 cmdlets
  4. Active Directory cmdlets

That adds up to 2834 cmdlets/functions that get syntax highlighting on top of the 137 aliases that are also in the file. The file also has variable highlighting, as well as operators and comp operators highlighting.

Formatting changes include the following:

  1. code folding for (), so your long param() blocks can now be collapsed/expanded.
  2. code folding for region/endregion. This mimics the behavior of ISE.

If you’d like to change the colors and/or fonts used for highlighting, go to View>Themes>Manage Themes, as the styling in the wordfile is ignored starting with v20 of UltraEdit.

manage themes

As with all other wordfiles, they are stored in “%appdata%\IDMComp\UltraEdit\Wordfiles\”, unless you change the path in Advanced>Configuration>Editor Display>Syntax Highlighting.

wordfile path

You can optionally set the “Highlight new file as:” to PowerShell, as I do (also shown above).

As soon as you place this wordfile in that folder, you should see PowerShell as an option under View>View as (Highlighting File Type)

view as highlighting


I’ve also created an auto complete file that contains the same cmdlet/function names as the syntax highlighting file. When enabled, you get tab completion of cmdlet and function names similar to the PowerShell console and ISE. Note, however, that in UltraEdit, you only get auto-complete of the cmdlet/function names, not their parameters.

You can save the file anywhere. Then, go to Advanced>Configuration>Editor>Word Wrap/Tab Settings to specify the location within UltraEdit:

auto-complete path

Then go to Auto-complete and check the box “Show auto-complete dialog automatically” and also enter a number in the box. 5 works for me.

auto-complete options

Now, when typing a cmdlet/function that’s in the auto-complete file, you’ll get suggestions.

auto-complete suggestions

Up/down errors navigate through the list, and tab uses the highlighted suggestion.


Function: Set-PowerPlan – Adjust The Power Plan of a Server

February 25, 2014 1 comment

Just something I worked up based on a suggestion by someone. This will change the power plan of the machine it’s run on. This can be critical if you want to ensure that the machine doesn’t go to sleep while an extended process is running. Simply run the function with the desired power plan and the change is immediate. For example:

Set-PowerPlan "High Performance"

The three power plans you can choose from are “high performance”, “balanced”, and Power Saver. That’s all there is to it.

function Set-PowerPlan {
	[CmdletBinding(SupportsShouldProcess = $True)]
	param (
		[ValidateSet("High performance", "Balanced", "Power saver")]
		[string] $PreferredPlan = "High Performance"
	Write-Verbose "Setting power plan to `"$PreferredPlan`""
	$guid = (Get-WmiObject -Class Win32_PowerPlan -Namespace root\cimv2\power -Filter "ElementName='$PreferredPlan'").InstanceID.ToString()
	$regex = [regex]"{(.*?)}$"
	$plan = $regex.Match($guid).groups[1].value 
	powercfg -S $plan
	$Output = "Power plan set to "
	$Output += "`"" + ((Get-WmiObject -Class Win32_PowerPlan -Namespace root\cimv2\power -Filter "IsActive='$True'").ElementName) + "`""
	Write-Verbose $Output
Categories: PowerShell Tags: ,

Function: New-TrustedIESite – Add URLs to IE’s Security Zones

February 8, 2014 2 comments


This function probably doesn’t have a lot of users to most people. But in Lync, adding the Simple URL for the Lync Server Control Panel to the Local Intranet zone resolves the issue of having to enter credentials each time. Of course, I like to automate the configuration of things, so I whipped up this little function, and it will be included in some of my build scripts. The script basically creates the required registry entries under HKCU:\Software\Microsoft\Windows\CurrentVersion\Internet Settings\ZoneMap\Domains. Immediately after running the function, we can see the new entry in Internet Explorer

Internet Explorer Trusted Intranet Zone

Internet Explorer Trusted Intranet Zone


New-TrustedIESite [[-url] ] [[-zone] ] []

Zones are as follows:

1 Local Intranet
2 Trusted Sites
3 Internet
4 Restricted Sites


New-TrustedIESite -url -zone 1

Will add to the Local Intranet zone


v1.0 – 02-08-2014 –

Script: New-CsLyncRoomSystem.ps1 – Easily Deploy Lync Room Systems

January 28, 2014 4 comments


One of the really cool features of Lync Server 2013 is the Lync Room System. LRS is comprised of a single or dual screen system, video camera, and control unit. This system provides for a rich conferencing experience by providing HD video, touch screens with white-boarding, audio & video inputs, and more. For more information on Lync Room system, see the Product Group’s blog post. To see the systems optimized for Lync, see the catalog.

Deploying a Lync Room System involves several steps, and is outlined (albeit poorly) in the LRS Deployment Guide. I say poorly because from a PowerShell perspective, the 10 steps outlined can be combined down to about 6. Some are Exchange related, some are Active Directory related, and some are Lync related.

What I’ve done is to automate & streamline the process, add a ton of error checking, optimization, and validation. Instead of picking an Exchange server, the script will automatically find and connect to Exchange. It then performs the following tasks:

  1. Create an Exchange mailbox configured as a room resource. Additionally, the description is defined, and the company name on the account is configured (see for why this is important). The room account is enabled. You’re prompted for a password for the account, and that password must conform to the organizations’ password policy for complexity. If the mailbox already exists, which would be common in most scenarios, the script will handle it gracefully, ensuring it’s configured properly.
  2. The mailtip for the account is defined. It merely reminds users to make meeting requests a Lync meeting.
  3. Set calendar processing to AutoAccept so that when the room account is added to meetings, it will automatically accept the request.
  4. The AD account is enabled
  5. The Lync Meeting room is created, and uses the email address for the SIP address. This is important to avoid Exchange Web Services (EWS) issues.
  6. If a LineURI is defined, the meeting room is enterprise voice enabled. LineURI should be specified in E.164 format.

Any other configuration, such as conferencing policies, etc., can be set after the script runs. I’ve used this script to deploy a 70″ dual display SMART Room System.

See the assumptions section below for more info.


New-CsLyncRoomSystem.ps1 [[-Alias] ] [[-Name] ] [[-UPN] ] [[-SamAccountName] ] [[-RegistrarPool] ] [[-LineURI] ] [[-CompanyName] ] [[-ResponseText] ] [[-ResourceCapacity] ] [-DeleteSubject ] [[-EnableResponseDetails] ] [-WhatIf ] [-Confirm ] []


New-CsLyncRoomSystem.ps1 -alias nycconfroom -name "New York City Conference Room" -upn "" -registrarpool ""

The SamAccountName only needs to specified if it needs to be different than the alias.


Execution Policy: Third-party PowerShell scripts may require that the PowerShell Execution Policy be set to either AllSigned, RemoteSigned, or Unrestricted. The default is Restricted, which prevents scripts – even code signed scripts – from running. For more information about setting your Execution Policy, see Using the Set-ExecutionPolicy Cmdlet.


  • The SIP address is set to match the SMTP address. This is to avoid issues where the two don’t match and Exchange Web Services (EWS) calls fail.
  • Exchange 2010 or 2013 exists in the environment
  • The user running the script has the appropriate rights in Exchange (Recipient Management or higher) and Lync (RTCUniversalUserAdmin or higher)
  • The machine that the script runs on has both the Lync and Active Directory modules installed.


v1.2 – 06-10-2014 –

v1.1 – 02-08-2014 –

v1.0 – 01-28-2014 –


See the changelog for information on what’s changed/included in each version.

Changelog: New-CsLyncRoomSystem.ps1

January 27, 2014 Leave a comment

This is the changelog for New-CsLyncRoomSystem.ps1. You will find a complete list of released versions, their dates, and the features and issues addressed in each. Please refer to the script’s main page for more information including download links, installation details, and more.

v1.2 – 06-10-2014

  1. Added –AdditionalResponse option for Set-CalendarProcessing
  2. Added -DomainController switch to every command that supports it to ensure that we don’t start getting errors due to AD replication being laggy.
  3. A warning is now shown if the user services policy that is applied to the LRS has UCS enabled
  4. ResourceCapacity option added. If defined, will set the mailbox capacity accordingly

v1.1 – 02-08-2014

  1. comment help optimized per suggestions at
  2. validation for registrar name
  3. cleaned up param block
  4. validate that FE pool is 2013, exit if not
  5. new version of Set-ModuleStatus

v1.0 – 01-28-2014

  1. Original version

Resetting the Font in Lync Server Control Panel – Goodbye Times New Roman!

January 20, 2014 4 comments

Many people have noticed that after installing the Lync Server 2013 Cumulative Update from October, 2013, that the font in the Lync Server Control Panel changed to Times New Roman from the original Segoe UI font.

LSCP font2

Lots of people commented online that they were not fans of the change (myself included), and wanted it changed back. The issue was raised with Microsoft who verified that there was no change in the font requested when displaying the Control Panel. This was confirmed by looking through the logs. The problem was an Internet Explorer compatibility issue. Servers that have IE 8 don’t exhibit the problem, but those with IE 9 or later, do. Instead of looking at the font defined by MS Shell Dlg registry value (HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontSubstitues\MS Shell Dlg), the Control Panel was using the font configured in IE. If you look in Internet Options>Fonts, you see that the Webpage font is set to Times New Roman.

LSCP font

We can get the original Segoe UI font back by simply changing the webpage font option to Segoe UI, closing the Control Panel, and opening it back up. We can also make the change using PowerShell by changing the value of the registry key that gets set when you use the above method. To do so, open PowerShell, and enter the following:

Set-ItemProperty -path "HKCU:\Software\Microsoft\Internet Explorer\International\Scripts\3" -Name IEPropFontName -Value "Segoe UI"

And after restarting the Control Panel, we see it’s back to the way it should be.
LSCP font3

You can set the value to any font, really, including Comic Sans MS, as requested by my buddy Ken “The Hoff” Lasko.

Something to keep in mind is that changing that value does have the potential for changing the way other web pages look as well, as this is more of a work-around than a fix. But I’ve not run into that, yet. I’ll post more info as I get it.

Review: Logitech H650e USB Headset

December 12, 2013 3 comments

Logitech H650e USB HeadsetI have to admit that I’m a heavy user of wired headsets for Lync and Skype. This is really due more to the fact that spare power outlets in my office don’t exist. In fact, the fire marshal had better never show up and look behind my desk. Also, I rarely need to move more than a couple of feet from my desk chair. So the wireless benefit is somewhat lost on me. That being the case, I’m constantly checking out new headsets to see which will be the most comfortable and have the best sound quality.

Logitech’s Lync Optimized H650e headset is a dual ear USB wired headset. But not only dual ear, it’s stereo. While I’m not likely to use it to listen to my extensive hair metal music collection through them, it’s a nice touch. The headband is narrow, light, and very comfortable. The padding is soft, but not so soft that I feel the plastic headband itself. The ear cups are also very soft, and remind me of those found on my Bose QC3 noise cancelling headphones. I’ve worn the headset for several multi-hour calls, and it was comfortable throughout. The sound is fabulous.

One cool aspect of this headset is that the USB cable is flat instead of round. This might not seem like much, but take it from someone who routinely has at least four headsets hanging together. This 7 foot cable just doesn’t tangle. And the integrated control head provides for hook and mute buttons – both of which are Lync integrated. Pressing the mute button on the control head mutes the Lync client – not just the headset. There are also volume up/down buttons on it as well.

Logitech H820e presence indicatorThe mic boom is a flexible rubber that’s easily positioned in any angle you need. It has great, natural sound, so I’m told by those I speak to with it. One cool feature on this is that at the end of the boom where it connects to the ear piece, is a presence indicator. This is designed for people who are behind you. They can see your presence and know you’re in a call. One might think that would be evident merely by having the headset on, but I would point back to the headset being stereo. So a user could be listening to non-call audio. It’s only illuminated when in a call/conference/meeting. A neat idea that would be beneficial in a Dilbert style cube farm.

I really like this headset. In fact, my old favorite, the Blackwire 720, has been pushed to standby status as I use the H650e pretty much exclusively. Great sound, comfortable, and a non-tangling cord are all wins. For a list of $89.99 USD, it’s a fabulous unit that should suit most chair jockeys that don’t need to get away from the desk while on the phone.

Categories: Reviews Tags: , , ,

Customizing the Lync Server 2013 Meeting Page

December 11, 2013 5 comments

In Customizing the Lync Server 2010 Meeting Page, I showed how simple it was to update the Lync Server 2010 Meet page with your organization’s logo. Here’s some info for updating the Lync Server 2013 pages.

Here we see the page with the default “Lync Web App” text image.

original LWA page

That test image file is called LyncWebApp_logo.png. It’s a 350×68 pixel 32 bit .png file. You’ll find the image in two folders: one for the external web site, and one for the internal website:

  1. c:\Program Files\Microsoft Lync Server 2013\Web Components\LWA\Ext\Images\LyncWebApp_logo.png
  2. c:\Program Files\Microsoft Lync Server 2013\Web Components\LWA\Int\Images\LyncWebApp_logo.png

If you’re going to swap out the image, it’s much easier if you overwrite the existing file with your custom file of the same name: just backup the original file first. This will eliminate the need to dive into the code that writes the page. Just create a new file of the same size, and save it into the appropriate folders.

The image background is not actually white. It’s a light gray with an RGB value of R:247 G:247 B:247. If you want to match the blue on the left, it’s R:3 G:110 B:202.

Once you overwrite the existing file, restart the Lync Server Web Conferencing service using either the Services.msc tool, or by using the following in PowerShell:

Restart-Service RTCDATAMCU

Once the service has restarted, you can check out the Meet page by creating a Meet Now, and going to the meeting URL on a machine without the Lync client (to avoid having the Lync client immediately attempt to join the meeting, which would close the Meet web page).

updated LWA page

If you’re hard core and want to tweak or completely overhaul the web page itself, the CSS style sheets are available for the external and internal sites at:

  1. C:\Program Files\Microsoft Lync Server 2013\Web Components\LWA\Ext\Styles
  2. C:\Program Files\Microsoft Lync Server 2013\Web Components\LWA\Int\Styles

Just make sure you back everything up before making changed. Also, I have not paid much attention to if these files get overwritten during a Cumulative Update installation. So keep copies handy in case you need to re-apply your changes.

Lync Client November Update Released

November 13, 2013 Leave a comment

On November 10th, 2013, Microsoft released the November 2013 Update for the Lync 2013 desktop client. Some welcome news with bug fixes, and some new features. Some of the new features have been requested for quite a while, and others were a welcome surprise. Let’s take a look.

Video recording options

If you’ve ever tried to do a video recording of a Lync meeting, you know that the video quality has not been as high as you’d like. This update changes that. In the Recording options page, we now have options for 480p and HD options for 720p and 1080p. The recording still captures at 15 frames per second (fps). Obviously, if everyone on a conference is using 1080p, the size of the resulting file is going to be quite a bit larger than if you use lower settings. One other thing to keep in mind is that your camera needs to support these resolutions.

Lync 2013 client video recording options

Photos in Instant Messaging stream

Next up is something seen in other instant messaging platforms. And that is user avatars in the IM stream. I don’t really see the need for this in a peer-to-peer conversation, but in a conference, I can certainly see this being beneficial. There is no option to disable this at this time, but I wouldn’t be surprised to see a client side option in the future.

Lync 2013 client pictures in IM stream

Photo Options

This is one option I’ve been asking for ever since the Lync 2010 option was removed in Lync 2013. Fellow MVP John Weber even submitted it on the Lync IdeaScale site. The ability to define a URL to an avatar. This allows you to put a picture out on a server and have others, such as federated contacts, see it instead of the “no photo” image.  This also helps clear up the issue where a user configured a URL in the Lync 2010 client, then migrated to the 2013 client, only to find they could no longer change it, or even remove it.

You can also choose an existing picture to be copied to Active Directory, too.

Lync 2012 client photo options

This is the only option that requires us to also do something on the server. We need to add a Policy Entry to our client policies in order to enable the setting. If we don’t, then users don’t see the option in their client. To make the change, run the following in Lync Server Management Shell:

$PolicyEntry=New-CsClientPolicyEntry -Name EnablePresencePhotoOptions -Value true 
$ClientPolicy=Get-CsClientPolicy -Identity Global
Set-CsClientPolicy -Instance $ClientPolicy

Once this change is made, the Lync client will need to pick up the changed policy either by signing out and back in, or waiting 8 hours for the client to refresh the policy.

PChat Escalation

This was one I wasn’t expecting. When you’re in a PChat room, you now see a new button at the bottom of the client. When you click the button, it opens a Lync meeting with everyone currently in the PChat room. It also pastes the unique meeting info into the room. This information is unique & generated each time the feature is used. One click to a meeting with everyone. Very cool. And all members in the room don’t need to have this update installed in order to participate in a meeting created by this feature.

Lync 2013 client PChat Escalation

Free/Busy issue resolved

I know a lot of people have been waiting for this. A previous update caused free/busy info to not automatically update your presence. This update resolves that problem.

List of all fixes

  • 2907820 Inconsistent format and duplicate telephone numbers are displayed in a contact card in Lync 2013
  • 2898888 Lync 2013 crashes when an RCC-enabled user signs in
  • 2898886 “Presence unknown” status for a contact in a federated environment or a different front-end pool is displayed in Lync 2013
  • 2898887 User cannot call another user by clicking a telephone number hyperlink in a contact card in Lync 2013
  • 2883716 Presence status isn’t updated based on Exchange calendar in Lync 2013
  • 2880161 You can’t drag a contact from Lync 2013 to another application
  • 2880163 Proxy authentication dialog box appears when you sign in to Lync 2013
  • 2880164 Instant message sent from Lync Web App displays wrong symbols in Lync 2013
  • 2880167 Can’t sign in to Lync 2013 when a user logs on to a computer by using an account from a different AD forest
  • 2882812 A proxy authentication dialog box appears when you upload a PowerPoint presentation in Lync 2013
  • 2882813 Can’t sign in to Lync 2013 on a computer that is running Windows 7
  • 2882814 Extended character is displayed incorrectly in a disclaimer in Lync 2013
  • 2854650 You cannot start a collaboration application that is integrated with Lync 2013
  • Some components in the contextual Mini toolbar and ribbon appear blurry.
  • When you use a UIA-based screen reader (such as Microsoft Narrator) to read a message, the shapes and images are not read by the UIA-based screen reader.
  • The inline attachment is read as “image” instead of as “attachment” by UIA-based screen reader such as Narrator.


Download the update and the prerequisite files from Make sure you read the UPDATE INFORMATION section on some prerequisites required for the update.

But wait, there’s more! New icon

Not really related to this update, but more to the “Patch Tuesday” updates. KB2837643 changes one of the icons in Lync. Before the update, the Calendar tab looked like this:


After installing the update,


I think the new icon is a little more intuitive as to its purpose.


Categories: Lync Server