Don't play with matches.

Oh, and don't use CS Voice

Configuration.

 

As it turns out, today is definitely not a good day for the author of today's haiku. (Would it qualify as a horrible, terrible, no good, very bad day? It just might.)

 

So what's so bad about today? Well, today is the last day that the author of today's haiku gets to spend in Park City, UT. Tomorrow, he has to pack up the car, load the bikes on the bike rack, and head for home.

 

Note. Although there is one small upside: tomorrow will be a vacation day, so at least he doesn't have to write a haiku. If you can't stand the thought of spending the day without a haiku, we suggest you try the Genuine Haiku Generator. We did, and here's what the generator came up with:

 

cinders emerge

numbingly, inmate quailing

snidely, falcon slick

 

Granted, that haiku doesn't have much to do with Lync Server PowerShell. But, then again, neither do most of the haikus we write ourselves.

 

Now, we should probably note that the author of today's haiku has nothing against Seattle; it's just that he's gotten used to a different kind of lifestyle here in Park City. For example, he has a bike trail that runs past the condo where he and his wife have been staying; to go on a bike ride all he has to do is walk out the back door and hop on the trail. (Even better, he can ride his bike to the grocery store and back, all without leaving the bike trail.) Of course, admittedly, if he wants to hike through the mountains he will have to get in the car and drive for 15-20 minutes. How does that compare to Seattle? Let's put it this way: at certain times of the day, it might take 15-20 minutes before he can actually get out of his own driveway.

 

And then there's the all-new, no-meeting work schedule that he's adopted. On a typical day, he gets up reasonably early, and starts to work. (And there's another thing. In Seattle, it takes him about 30 minutes to get to work each morning and 30-40 minutes to get back home each evening. In Park City, it takes him about 0 minutes to get to work each morning and 0 minutes to get back home each evening.) When he gets tired of working – well, OK, when he gets tireder of working – he simply hops on the bike or goes for a hike. Later that evening, he'll get back on the computer and work a little more. He still puts in his hours, but during the boring parts of the day rather than the warm, sun-drenched afternoons.

 

A body could really get used to that.

 

But you know what they say: all good things must come to an end, and tomorrow the author of today's haiku heads for home, back to working every day from 7:00 AM to 4:00 PM, and back to a lawn that hasn't been mowed in a month. Hurray!

 

Before we head back to Seattle, however, we do have one piece of unfinished business to take care of: we need to talk about the CsVoiceConfiguration cmdlets (Get-CsVoiceConfiguration, Remove-CsVoiceConfiguration, and Set-CsVoiceConfiguration). And what is it we want to say about the CsVoiceConfiguration cmdlets? Just this: to be perfectly honest, you shouldn't bother using the CsVoiceConfiguration cmdlets.

 

Many years ago, when the author of today's haiku worked at the University of Washington, he worked with several people who were very skeptical when it came to Microsoft and Microsoft products. (!) Their theory was that people at Microsoft kept all the good stuff for themselves (and their corporate partners), and made their not-quite-as-good software available to the general public. Which, needless to say, was an easy-enough argument to refute … at least until Microsoft Bob hit the shelves.

 

At any rate, you might be thinking, "Why don't they want us to use the CsVoiceConfiguration cmdlets? Is it because those people at Microsoft want to keep these really cool, really useful cmdlets to themselves?" If you are thinking that, well, we have an answer to that question: No. As it turns out, the CsVoiceConfiguration aren't all that cool and they aren't all that useful. Instead, they do pretty much the same things that the CsVoiceTestConfiguration cmdlets do. Only not quite as much, and not quite as well.

 

We won't talk much about voice test configuration today; that's already been covered in Haiku 160. For now, we'll simply quote from Haiku 160 and note that voice test configurations "… allow you to set up scenarios that you can use to ensure that given a specific telephone number, that number would be correctly normalized and would follow the expected voice policy, voice route, and dial plan." All in all, a pretty handy little thing to have.

 

The only problem with voice test configurations is that we've provided two different sets of cmdlets to manage these settings: the CsVoiceConfiguration cmdlets and the CsVoiceTestConfiguration cmdlets. Why do we have two different sets of cmdlets to manage these settings? Well, we can't provide the exact details simply because we don't know the exact details. All we know do know is this: originally we had the CsVoiceConfiguration cmdlets. Those cmdlets were eventually superseded by the CsVoiceTestConfiguration cmdlets. However, because the Lync Server Control Panel uses the CsVoiceConfiguration cmdlets in some way, shape or form, we couldn't easily get rid of those cmdlets. And so, just like that, we ended up with two different sets of cmdlets to manage the exact same settings.

 

Like we said, however, the CsVoiceTestConfiguration cmdlets tend to manage these settings a little better. For example, suppose you want to review a collection of all your voice test configurations. One way to do that is to use the Get-CsVoiceConfiguration cmdlet:

 

Get-CsVoiceConfiguration

 

In turn, that will bring back data similar to this:

 

Identity                : Global

VoiceTestConfigurations : {Name=TestConfig1;DialedNumber=5551212;TargetDialplan=Global;TargetVoicePolicy=Global;ExpectedTranslatedNumber=+5551212;ExpectedUsage=;ExpectedRoute=,Name=TestConfig2;DialedNumber=5551219;TargetDialplan=Global;TargetVoicePolicy=Global;ExpectedTranslatedNumber=+5551219;ExpectedUsage=;ExpectedRoute=}

 

Of course, it's possible that some of you might find that output a little difficult to read. In that case, you might use this command (and the Get-CsVoiceTestConfiguration cmdlet) instead:

 

Get-CsVoiceTestConfiguration

 

Do that, and you'll get back output that looks like this:

 

Identity                 : TestConfig1

Name                     : TestConfig1

DialedNumber             : 5551212

TargetDialplan           : Global

TargetVoicePolicy        : Global

ExpectedTranslatedNumber : +5551212

ExpectedUsage            :

ExpectedRoute            :

 

Identity                 : TestConfig2

Name                     : TestConfig2

DialedNumber             : 5551219

TargetDialplan           : Global

TargetVoicePolicy        : Global

ExpectedTranslatedNumber : +5551219

ExpectedUsage            :

ExpectedRoute            :

 

Needless to say, we're not telling you not to use Get-CsVoiceConfiguration, we're just – oh, wait. We guess we are telling you not to use Get-CsVoiceConfiguration.

 

The difference between Set-CsVoiceTestConfiguration and Set-CsVoiceConfiguration is equally dramatic. Suppose you need to change the DialedNumber for TestConfig1. Here's how you do that using Set-CsVoiceTestConfiguration:

 

Set-CsVoiceTestConfiguration -Identity TestConfig1 -DialedNumber 14255551219

 

And how do you perform that same task using Set-CsVoiceConfiguration? Like this:

 

$x = Get-CsVoiceConfiguration
$y = $x.VoiceTestConfigurations | Where-Object {$_.Name -eq "TestConfig1"}
$y.DialedNumber = 14255551219
Set-CsVoiceConfiguration -Instance $x

 

And no, we aren't going to explain how those commands work. Why not? Because we don't want you to use those commands. We want you to use this command instead:

 

Set-CsVoiceTestConfiguration -Identity TestConfig1 -DialedNumber 14255551219

 

Now, admittedly, we have been a bit harsh on the CsVoiceConfiguration cmdlets: it's not their fault that they aren't the most user-friendly cmdlets ever created. With that in mind, we will say that the Remove-CsVoiceConfiguration cmdlet can actually be quite useful, albeit in one specific instance: any time you want to delete every one of your voice test configurations. If you really do want to get rid of all your voice test configurations then you can do so using this command:

 

Remove-CsVoiceConfiguration -Identity Global

 

To be honest, we aren't sure how often that situation will crop up but, if it ever does, you'll now be ready for it.

 

Note. And what if you to remove just one voice test configuration? In that case, use the Remove-CsVoiceTestConfiguration cmdlet instead:

 

Remove-CsVoiceTestConfiguration -Identity TestConfig1

 

So is that all there is to say about the CsVoiceConfiguration cmdlets? Well, to be honest, that's probably way more than there is to say about the CsVoiceConfiguration cmdlets. But with an avowed goal to write a haiku about each Lync Server PowerShell noun, well, we had to cross the CsVoiceConfiguration bridge sooner or later.

 

And speaking of crossing bridges, we'll be doing a lot of that tomorrow. (And crossing a few mountain passes as well.) But don't worry: there won't be a haiku tomorrow, but there will be one come Monday morning.

 

And who's more excited about that: the author of today's haiku, or the readers of today's haiku? Interesting question ….