Jun 24

Skype for Business Debugging Tools

SnooperI’m surprised no one has written about this yet. If someone has, please let me know and I’ll give you props and a link right up top. Until then….

The Skype for Business debugging tools are a replacement for the Lync Server Debugging tools. First off, the Lync debugging tools will work on a Skype for Business server. However the new debugging tools leverage the Centralized Logging Service (CLS)  feature introduced in Lync 2013.  This makes it far easier to do logging across multiple servers at the same time. The Lync debugging tools have to be run independently on each server.

The primary change is that the OCSLogger.exe from Lync 2013 has been replaced with the CLSLogger.exe program. Snooper remains the same though it is a newer version. There has been the addition of a “Codepoint” menu which ….I’m guessing….is used to load external diagnostics…or something. But it’s new, and newer is always better.

Also, CLSLogger can be used against Lync 2013 servers as well as Skype for Business. No dice on Lync 2010 though.

There is nothing that the CLSLogger can do that you can’t do via PowerShell. If you are a CLS ninja, then you can probably skip the CLSLogger altogether and just go on about your business.

But for the rest of us…..

Before you even fire up the tool, run Get-CsClsConfiguration . This will let you know how you are set up. For the most part, ignore everything returned except for the “ETLFileFolder” and “CacheFileLocalFolders” values. By default this is set to %TEMP%\Tracing. And where exactly is that directory?

%WINDIR%\ServiceProfiles\NetworkService\AppData\Local

Or most likely, here:

c:\windows\ServiceProfiles\NetworkService\AppData\Local

These directories are important because this is where the log files are going to be created. You may want to edit this to get them off of your C: drive so you don’t accidentally fill it up.

And since I never like editing the Global configuration of anything (if it can be avoided), create a new CLS Configuration for your Skype for Business Site(s). This is done with the New-CsClsConfiguration cmdlet. Below is an example creating a new configuration for a Site named “Site 2″ and changing the logging folders to e:\logging:


New-CsClsConfiguration -Identity "site:Site 2" -ETLFileFolder "d:\logging" -CacheFileLocalFolders "d:\logging"

Even if you only have a C: drive, you may want to change the directories to something you can find more easily than %WINDIR%\ServiceProfiles\NetworkService\AppData\Local

CLS will automatically create the directory you define, so that saves time connecting to every server in your site to create a directory.

So, now that the directories have been defined, it’s time to launch CLSLogger, right? Yeah well not quite.

CLSLogger is really a super elaborate PowerShell wrapper. And if there’s one thing you’ve learned about running PowerShell scripts it should be this: You need to set the Execution Policy before you can run somebody else’s script, even Microsoft scripts.

So open a PowerShell window with “Run as Administrator” and type the following to permit this to run:

Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy Unrestricted

If you are super security conscious, you may want to use something other than Unrestricted. But that’s up to you to figure out the magic voodoo. I always use Unrestricted but then I don’t entirely know what I am doing with this. I just set it to Unrestricted because it tells PowerShell to never bother me again with this security nonsense.

So now, assuming you have installed the Debugging Tools already, you can finally go ahead and launch CLSLogger. Navigate to C:\Program Files\Skype for Business Server 2015\Debugging Tools and launch ClsLogger.exe

Now, even with the execution policy in PowerShell set correctly, you still get:

Error: Access to the registry key ‘HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell’ is denied. To change the execution policy for the default (LocalMachine) scope, start Windows PowerShell with the “Run as administrator” option. To change the execution policy for the current user, run “Set-ExecutionPolicy -Scope CurrentUser”.

Oh wait…Run ClsLogger as Administrator too. Otherwise it won’t have rights to read the key from the registry. So note to self: Run everything as Administrator….

When it starts, the Start/Stop Scenarios tab opens and there are three main sections.

CLSLogger2

Section 1 is where you can select a scenario. Remember with OCSLogger you had to semi-randomly pick what to log? So you always picked the same stuff (S4/SIPStack) and then randomly picked some options like Inbound Routing and Outbound Routing hoping to get what you wanted.

Scenarios take the guesswork out of your hands. Microsoft has created a whole pile of scenarios for you with all of the correct options already selected. So for example if you aren’t tracking an Enterprise Voice issue, S4 will be unselected for you thus minimizing the amount of “noise” in your logs.

To select a scenario, just hit the pull down and HOLY DUMBNESS WHAT IN SAM HILL!!!! YET ANOTHER UNSORTED LIST FROM THE LYNC/S4B TEAM. WHAT IS WRONG WITH YOU PEOPLE. SORTING IS LIKE THE EASIEST THING IN THE WORLD TO DO. %^&*(&*^%$#^&!@#!!!!!!!!!

Microsoft can get voice packets to reliably traverse the planet; can’t sort. Doh!

So….now you get the fun of trying to find which scenario you want in some sort of bizarre Where’s Waldo time waster. Because when your environment is having big trouble, you should waste 28 seconds searching for an entry whose name you know….

If you have multiple sites, you will also notice that the list contains duplicates…possibly a lot of them. If you type

Get-CsClsScenario | select Identity

in a PowerShell window you will see that the list in PowerShell matches the list in CLSLogger. Except the PowerShell version prepends the scenarios with the site name making the duplication easy to understand. Hopefully they will improve the naming in the scenario list to include the Site name in a future update.

Fortunately, all of the out-of-the-box scenarios are the same regardless of Site so you can pick any one of them. In my case, I selected AlwaysOn because I am lazy and that is the default option. After selecting one, the Scenario Information screen will list all of the logging options, logging levels, and logging Flags that are part of the scenario. This list is sorted.

Scenario Information

So Microsoft CAN sort….

 

After selecting the scenario, you have to tell the logger against which pools and servers (and trunks????) you want to run this scenario against. So pick a pool or two off the list. You can also drill down to pick a specific server too in case you suspect a subset of your pool is having issues.

mp112.flinchbot.com is an AudioCodes gateway. PBX1 and PBX 2 are Asterisk servers....

mp112.flinchbot.com is an AudioCodes gateway. PBX1 and PBX 2 are Asterisk servers….

 

The 3rd section, at the bottom is a PowerShell window showing you which PowerShell cmdlets the tool is running. This is a nice touch.

There are three buttons above the Topology window (Section 2). Before running a new scenario, click the “Logging Status” button to see if you are already doing logging against the pool/server(s) you selected in the Topology window.

If everything looks ready, click the “Start Scenario” button and watch the magic happen.

Actually, replicate your issue as fast as you can and then click the “Stop Scenario” button. No one wants to deal with a 37GB log file because you couldn’t be bothered to stop the logging until hours after the issue has been tested.

So the next step….looking at all of this wonderful data. That’s where the “Search CLS Logs” tab comes into use.

Unfortunately….nothing is automated here. It would be nice if it carried over the settings from the “Start/Stop Scenario” tab to here. Maybe in a future update….

Search CLS Logs

More sorted lists. I’m starting to think some of those MS devs aren’t as clueless as I thought.

From my point of view, the point of this tab is to get a unified log file that you can open in Snooper. As such, I leave most of this stuff empty.

Make sure the Start and End Time fields are correct. To me it feels like this is a semi-random guess by CLSLogger to what window of time you want to review. So don’t trust it to be correct or your logs may be very empty.

The only setting in Section 1 you have to set is the Log File Folder setting. You can’t type anything here and have to navigate to a folder. If you aren’t running this on a server then….manually create the folder on your PC in the exact same location it is on your server. I hope your PC has a D: drive like your server does. If not…..run this from the server.

Remember when we set the logging directory at the very beginning? Navigate to there and click OK.

You do not have to pick anything in section 2. So unless you really want to narrow down your logs, leave this blank. If you are using the AlwaysOn scenario, then it’s a good idea to check the relevant boxes here. How do you know which boxes to select? Go back to the “Start/Stop Scenario” tab and pick a specific scenario off the list and manually replicate what’s pre-configured there into Section 2.

In Section 3, you have to select the pool you logged against. Automatically having this setting copied from the “Start/Stop Scenarios” tab would be a time saver.

Once you have at least a Log File Folder, a valid time range, and a Server/Pool selected, click “Search Logs”. This will go out to the servers, grab the logs and put them into one big file.

Curiously, once this is done it asks you if you want to open the log file. Say No. This just launches Notepad and opening really large log files in Notepad is painful and the whole point of Snooper is so that you don’t have to use Notepad. But do take notice of the file name for the log.

Open Logs

You are going to open the log file in Notepad? Then no, I don’t want to open this file at all you nitwit!

You don’t have to memorize the log file path in the message. It is conveniently listed in the PowerShell monitor (Section 4).

So how do you get this log file opened in Snooper which by absolutely any logic should be the default? Go to the menu at the top of the Logging Tool and select the Logs pull down. Then select “Open Logs with Snooper”. Like magic, Snooper opens and pulls in the log file automatically.

This should be the default action.

This should be the default action.

Now that it’s in Snooper, go do your Snooper magic to track down your issues and whatever it is you do in there. I know we are all adults, but what happens in Snooper stays in Snooper.

 

 

 

Jun 18

Sennheiser SP 20 ML Speakerphone Review

Just so you know, I was given this free from Sennheiser. Keep that in mind while reading.


0401rcp_sennheiserI work from home about one day a week. When working from home I use a speakerphone instead of a headset. For the past year or so, that speakerphone was the Plantronics Calisto P825-M.

Yesterday I received the Sennheiser speakerphone just in time for my usual Thursday work-from-home day. So I was able to give it a good run through its paces today.

First off, here are the general features of the device.

It’s Lync certified so you can plug-and-play it to your PC. This worked perfectly.

The top of the device has 5 buttons. On the far left and right are volume down and volume up buttons. The center of the speakerphone has a few features. You can press it to mute/unmute the call. When doing so, the lights around the center button turn red when muted and green when unmuted. The lights are also a volume indicator. As you turn the volume up, more lights will get lit up in a clockwise direction. Hitting the volume down turns lights off in a counter-clockwise direction.

The lights in the middle are also a charge indicator. The charge is indicated by blue lights. The more blue lights you see, the more of a charge you have. Yes, this device has a battery in it so you can use it as a speaker for music or as a speaker for your mobile device. Sadly it does not have Bluetooth connectivity.

At the lower end of the device are the call answer and call hang-up buttons. Between the 2 buttons is a white light letting you know if the device is on or not.

Despite not having Bluetooth, you can easily connect a mobile device via an included 3.5 mm headset connector. Both this connector and the USB cable are ingeniously wrapped around the base of the unit and are pretty well hidden while stored. I was surprised how long the cables are. According to my ruler, the 3.5mm analog cable is 25.5 inches/64.77 cm in length. The USB cable is a bit more generous at 30 inches/76.2 cm.

Sennheiser SP 20 ML

Sennheiser SP 20 ML

But how does it sound? That’s the real test right?

I spent a fair amount of time this morning testing this device with a coworker. We would talk and I would switch the conversation between the Sennheiser and the Plantronics device.

From my point of view, that is, the side listening to the output of the speaker, the Sennheiser was a clear winner. No competition, actually. The Plantronics sounds a bit tinny and flat with absolutely no sense of bass. Certainly with the Plantronics my coworker was easy to understand but there was absolutely no nuance. But with the Sennheiser it was like switching from a narrow-band PSTN call to a wide-band Lync call. My coworker sounded much fuller and much more natural.

Also from the listening end, I plugged my Windows Phone into the Sennheiser to see how it sounded as a music speaker. While it is no competition to a home stereo, it is very serviceable. There is too much mid-range and the bass doesn’t stand out. But I imagine this is because the speaker is designed for voice with music being a secondary concern. They claim that they have a “profile” to enhance the music and it does seem to work. With the SP 20 connected via USB, set as the default PC audio, and playing music via the phone everything sounds great until a PC “noise” comes in. When the speaker has to play that noise, such as an incoming IM audio notification, the audio turns very flat and dull (and slightly distorted) while playing that notification over the top of the music. Once the notification is over, the music brightens up considerably.

Interestingly when you play music on the PC via the USB, the audio is fine….until I plug the 3.5mm jack into the phone. Then the PC audio goes to rubbish. I imagine this has to do with the circuitry inside only able to handle a single quality audio stream and they default to the 3.5mm jack getting that quality stream. The USB gets demoted to a much lower quality stream.

If you travel often and just need to use it for listening to music in a hotel room or to improve on the built-in speakers in a laptop then this will certainly perform admirably. Just keep in mind that this is nowhere near audiophile-level audio. And unlike the Plantronics, the Sennheiser comes with a protective case to provide some level of protection to the device while travelling with it.

So which one of the two were easier on the user at the far end? In other words, how did the microphones perform? In general, they were very similar to one another. When just speaking it took some concentration from my coworker to pick out the differences. Eventually he said that the Sennheiser sound less “echo-y”. Put another way, he said the Sennheiser sounds closer to sounding like a headset microphone than the Plantronics. I would hope this is the result of Sennheiser marketing slapping the term “echo cancellation” throughout their materials.

One other test we did was by me playing music in the background and then speaking. For good or bad, the Sennheiser passed it through very clearly. While the music was playing my coworker didn’t mention having trouble hearing me when I was speaking. He just said the background music was coming through very clearly. When switching to the Plantronics he said he thought the Plantronics might be trying to cancel out the music a little bit. The music was much more muddled than with the Sennheiser and he could still understand me just fine while talking over the music

We leaned towards thinking the Sennheiser was the better performer in this regard. Keeping in mind that this is a speaker phone and not a headset, the microphones on the SP 20 should be passing the music through. If this were in the middle of a conference room instead of my desk at home, you would want to be able to clearly hear everyone talking. But this was certainly no thorough or complete test. It’s very possible that the Plantronics “muddling” the music is it’s attempt to cancel out background noise and highlight the speakers voice in which that’s a very good thing to do. This would require different testing to determine which one is better in a conference room environment.

Overall the audio and microphone are much better on the Sennheiser than the Plantronics. Despite lacking Bluetooth, the addition of the 3.5mm jack is a nice touch. The Plantronics has both Bluetooth and the ability to plug in a 3.5mm cable. However it does not let you use it as a music speaker via Bluetooth or 3.5mm connections. At least I couldn’t figure it out. You can use it as a music speaker via USB but the quality is really miserable. The Plantronics was clearly designed solely for call-level quality.

calisto_p825

Plantronics Calisto P825M

The Plantronics does have a screen which is always a positive. It also has a ton more buttons….none of which I’ve ever really used. Understandably this is because my use case is as a single-user speakerphone and not in a conference room. I could see that there is potentially some value to having a number pad and a built-in address book…or whatever all it is this can do. I’ve never used any of those features.

I have tried using the detachable microphone. In theory this is a great idea. This would let me walk around and even turn my back on the speakerphone yet the person on the other end would still hear me clearly. But there are two problem with this.

1. When you pick up the microphone it doesn’t automatically switch the input to the microphone. You have to manually press a button. This seems useless to me and quite honestly I had to refer to the manual a few times when I tested the detachable microphone before my thick head remembered there was a button to push. I know Plantronics knows how to do this as some of their other devices will automatically answer a call when you pick up the Bluetooth device to stick in your ear.

2. But the bigger problem is that the microphone doesn’t work well. Or at least mine doesn’t. When I tested the microphone a few months ago with some coworkers they both immediately reported that my voice was filled with static. And this was with the microphone no more than 6 feet/2 meters from the base station.

The Plantronics Calisto seems like it is full of good ideas that just didn’t get executed properly – at least for a single-user scenario like mine. I would think in a conference room scenario all of those buttons provide some value though I imagine I would be pushing all of those buttons via my Lync/Skype for Business client and not on the device itself.

The price difference between the two is only $7. According to Amazon, the Plantronics Calisto is US$120.99  and the Sennheiser SP 20 ML is US$127.97. I would find it very hard to justify saving the $7. I suppose the primary compelling reason to go with the Plantronics would be the Bluetooth connectivity and all of those buttons.

But if sound quality is your primary requirement then this one is a no-brainer. I’d buy the Sennheiser. Every time.

The final verdict is this: I’m packing up the Plantronics and taking it back to the office in case we ever need a speakerphone for a meeting. I’m keeping this Sennheiser at home and taking it with me when I travel (which I never did with the Plantronics).


BTW – I’ve never used a Jabra Speak and rumor is that they are about to release a new model. Anyone form Jabra want to send me one of the new ones when they are available :)

Jun 17

My Whole World Has Changed

Real-Estate-OnlineI had been using Yahoo! Pipes for over 3 years to drive the Lync News/Skype for Business News aggregator. About 2 weeks ago, Yahoo! announced that they were killing off this service in the August/September time frame. This caused me some consternation. Not because I didn’t see it coming – Yahoo! hasn’t updated the thing in about 3 years – but because of the amount of work to get it going again somewhere else.

To take a step back – I started the Lync News aggregator right about the time Lync 2010 was being released. I was a novice OCS 2007 R2 administrator. The company where I worked at put a hold on continuing to deploy OCS due to the imminent release of Lync. This gave me time to read up on Lync and try to get educated before our consultant showed up to help us install it.

The problem was finding good blogs about Lync and then remembering to check them. Not that there were a lot of blogs back then, anyway. But it was still tough to get notified when there was something new to read. Enter Yahoo! Pipes which let me build a complex aggregator that grabbed the RSS feeds of these sites and spit out a new aggregated RSS feed. I could then look at this aggregated feed and be notified about new articles.

At some point I decided it was a good idea to send this feed to Twitter and thus the @LyncNewsTweets account was born (as well as it’s duplicate spawn – @S4BTweets).

And then I wrote an app for Windows Phone. This was initially hand coded. And by hand coded I mean I ripped off sample code from Nokia and heavily edited it.  I even found 3 bugs in their code and was able to fix 2 of them. While I do have a Bachelor’s Degree in Software Engineering, I hadn’t coded in C in about 15 years. Fortunately, Microsoft has released their AppStudio site which now takes all of the programming out of my hands.

Now that there are Universal apps, there is also a version for Windows 8.1.

A buddy pointed me to AppYet.com and so that’s why there is an Android app. Again, no coding on my part makes me happy. That one has had over 10,000 downloads!

And then I created a MailChimp newsletter to summarize the previous days news. And then along came Facebook, Bitly, Delicious, and Tumblr. Google + was working for a while but posting to Google + isn’t exactly easy. (No jokes – I actually use that thing a few times a week).

About 18 months ago I created an Exchange News pipe and started posting that to Twitter. I don’t ever read that one but I thought I’d be nice. That feed ended up in the Windows Phone and Android apps when I renamed them both to UC Now.

A small peak into one of the many pipes.

A small peak into one of the many pipes.

All of this was powered by Yahoo! Pipes. The Lync/S4B pipe had 142 RSS sources. Exchange much less because those people just don’t seem to blog as much (and I’m not bored enough to dig up the blogs I’m missing). And Yahoo! Pipes was going away. What to do?

I did some research for a week or two and there wasn’t anything that could really scale up to what I was doing. Most aggregators were meant to aggregate a handful of feeds and that was about it. They couldn’t filter to make sure that the resultant articles in the feed contained certain words like “Lync” or “Skype”.

I then came across the “WP RSS Aggregator” plugin to WordPress. I installed it on my throwaway site I’m Smarter Than You and gave it a go. It does pretty much everything I needed out of it except for appending the Source into the RSS Feed for each article. So for those of you that have noticed that I no longer give credit to every article in the Title…well that’s why.

So I migrated all of the feeds over to that, throwing out the ones which no longer worked. The number of feeds dropped to 113 from 142. And you know what? The RSS feed is working better than it ever did on Yahoo! Pipes. Pipes was powerful but also extremely unreliable. Well over half half the time it didn’t pull in my own articles! The nerve! Now it’s pulling everything in like it was always designed to do.

Tonight I flipped the Exchange feed to be powered via WordPress too.

I’ve also run around everywhere and updated the feed URL so that all of the places that I blast this stuff out to is now running off the new feeds. That includes updating the apps too. The Android and Windows Phone apps should be notifying you in the next few days about an update.

And during this big rebuild of the feeds, I finally went ahead and moved flinchbot.com off of WordPress.com and to its own hosted site. I’ve been wanting to do this for a long time as I’ve always wanted more flexibility than what wordpress.com gives you.

And yesterday I read this article by Andrew Morpeth. He basically did the research for me so this site is also now hosted by MDDHosting. He’s right – the support is fantastic. I’m getting answers in 5 minutes.

So I’ve migrated the whole site from flinchbot.wordpress.com to here. It gave me a great opportunity to refresh the look of the site, if for no other reason than the theme I had been using is no longer available. I like this new theme. It’s similar to what I had but much less drab. It’s much more modern and seems less hacked together. Which is exactly what the old theme was.

So now I have a new feed and a new website host. This is all worth it to me as I still read most of the articles that come through via the feed. I hope you get some of value out of this too. While it’s not hard work (well, now that I don’t have to code the Windows Phone app by hand!) it is fairly time-consuming.Adding or editing a new entry into the Yahoo! Pipe monstrosity was a giant pain. This new system is much easier.

I always appreciate it when I get a random ping from someone asking to get their blog added. And I hope more of those continue to trickle in every few months. It let’s me know some people value my efforts.

And if you know of any good Exchange blogs, please let me know.

 


BTW – If you’re a Windows/Windows Phone user, can you give the UC Now app a rating and/or review? Thanks!

Jun 09

Emoji URL’s are Cool

funny-emoji-rob-bankWhat’s an emoji URL?

This is one: http://🍺🏈💻🎸.ws

Go Ahead. Click it.

I promise it’s safe.

That’s an emoji URL.

Pretty neat huh?

Last night I accidentally stumbled across this article – You Can Now Visit Norwegian Airlines Using an All-Emoji URL

That’s cool I thought. I wonder how it works.

Which then led me to this article.

Which then led me to creating my own emoji URL. The magic behind all of this is something called “Punycode“. If you don’t want to read the Wikipedia article, it boils down to this: It’s basically a text version of a binary table. As you add and arrange emoji’s (or any character, really) a unique ASCII hash gets created. For the emoji’s in the URL above, the Punycode is:

xn--xj8h2dwb17d

And here comes the final bit of joy – take some Punycode and register a domain name with it. Any very-modern browser will translate the emoji to Punycode and then do the DNS lookup to see where it is supposed to go. If you click on the emoji URL again –http://🍺🏈💻🎸.ws – you’ll notice that the address bar will quickly change to the Punycode domain name of xn--xj8h2dwb17d.ws. I then just told my registrar to URL forward back to this blog.

There are a few caveats with emoji URL’s –

Either the .com domain doesn’t support emoji URL’s, or someone bought up all the emoji URL names already. I’ve found a lot of success registering with .ws as the Top Level Domain. So be prepared to use some less well known TLD’s.

Not all emoji’s show up on all devices yet, so hold off on using brand-new emoji’s. For example, I had trouble with the global soccer (association football) emoji but oddly the (American) football emoji showed up everywhere just fine.

Not every registrar plays nicely with emoji URL’s. I stumbled upon name.com and they do an amazing job. Look inside my control panel. They don’t show the domain in Punycode, they show it in emoji instead.

name emoji

Emoji URL’s are supposedly an easier way to type in a URL on a phone than a fully spelled-out domain name. However, on Windows Phone the keyboard brought up by both Internet Explorer and Opera Mini don’t let you enter emoji’s. Depending on your Android keyboard, it is supported and iOS seems to support it as well. (I haven’t tested on all devices if an emoji URL actually works, just that the keyboard in the browser let’s you enter them).

It’s also not supported on older desktop browsers however both IE11 and whatever version of Chrome I have running on Windows seem to work fine.

To make anemoji URL, you first need to find the emoji’s you want to use. I used these two websites to help me out – Emojipedia and Getemoji.

You need one more website to convert your emoji collection to a Punycode. I used Punycoder

Copy the emojis into the left hand side of Punycoder and click “Convert to Punycode” to get the ASCII representation. Once you have a string of emoji’s you want, go register a domain name somewhere.

As mentioned above, I used name.com. I have no loyalty to them other than my primary registrar didn’t seem to want to play ball. I tried a few and name.com seemed to work well and charge only $15 for a .ws domain name.

The only major problem I have with an emoji URL is that I don’t think it really saves time in entering a URL. I find I spend way more time looking for the emoji’s than it would take to type in a “regular” URL – including fixing typo’s.

But that’s not the point is it?

My website has an emoji URL and yours doesn’t. So that makes me better than you. Right?

Isn’t that how it works?

Jun 09

Windows 8.1 Apps Won’t Update

80070490For the past year or so, my home Windows 8.1 PC wouldn’t update most of the apps. So as Microsoft has slowly improved the Music app, I’m not getting any of those benefits. Heck, the apps wouldn’t even start.

Every so often I would spend an hour or two trying to fix this, eventually giving up and hoping the inevitable Windows 10 upgrade will fix it. Last night I spent way too much time on this problem. I spent over 4 hours trying to fix it.

I spent the night Googling/Binging and trying everything I could find.

Wsreset didn’t fix it.

SFC /Scannow didn’t fix it but it did send me on a side project to figure out why that was failing. SFCFix with some sfcfix.zip file fixed that problem. My apps still wouldn’t update.

I smoked the C:WindowsSoftwareDistribution folder a few times.

AppsDiagnostic.diagcab and app.diagcab? Ran those along with WindowsUpdateDiagnostic.diagcab with no fix for the issue.

I tried a bunch of other things so let me skip ahead.No Update Apps

I tried uninstalling the Apps form Windows Store but I couldn’t. It wouldn’t let me click on the apps at all – it just showed them on the list. So I figured I would try to manually uninstall them hoping a re-install would fix them.

That brought me to this article – http://all4naija.blogspot.com/2015/04/how-to-remove-microsoft-apps-using.html

While the article says it’s for Windows 10, it worked like a champ on windows 8.1. I had the list up of my failed updates and then pecked around via PowerShell to delete them. Once I got them all uninstalled, I rebooted and went to install them again. While it took a long time, they all started installing and were working fine.

So that problem is (mostly) fixed. There are three apps still in the list that wont update. But that is a huge improvement over what I had.

My theory is that they were in Windows’ list of “installed apps” but they weren’t actually installed. So when Windows tried to install the updates, it failed because there was actually nothing to update.

————————————-

For the search-ability reasons, here are some of the errors I had and couldn’t resolve using any of the popularly recommended issues:

0x80070002

0x80070490

80246007

Event Viewer Event ID 1001

Problem signature: P1: 9600 P2: 788 P3: 115 P4: 1 P5: US P6: en-US P7: 120 P8: -2147023728 P9: Microsoft.BingFoodAndDrink_8wekyb3d8bbwe P10: 0

Fault bucket , type 0 Event Name: WindowsStoreUpdateFailureV2 Response: Not available Cab Id: 0

 

May 21

Calls Not Completing for user with “Non-Western European” characters

This topic has already been covered in Spanish here  and in German hier.

I am just adding an English language version because I recently ran into the same issue and there is no blog in English about it.

If I ever wondered why we buy support from gateway vendors, this issue validated it for me.

We were bringing up a new location with a PRI. Through testing, I was able to make outbound calls but the people in the actual location were unable to complete the calls. This didn’t make sense. How can I make a successful call, sitting thousands of (pick one: miles/kilometers) away, and the people in the actual office could not?

In this case, our gateway was an AudioCodes Mediant 1000 and we were working with an AudioCodes engineer on the implementation. The AudioCodes engineer had given us numerous things to try to no avail. Finally he had us e-mail him some WireShark logs so he could spend more time on the issue.

A day later, he recommended that we set this value in our ini file:

ISO8859CharacterSet = 0

After making this change, the users in the location were suddenly able to make calls.

The issue is that the users in that location all use the following character in their display name as part of the spelling of their office location:

è

So what does this ISO8859CharacterSet value actually mean? For one, it’s not documented anywhere. I followed up with AudioCodes and they sent me the following documentation.

ISO8859-charset

 

Basically, this value expands the default character set that AudioCodes uses to parse SIP traffic. Why isn’t it set to zero by default? Who knows. I asked that question to the AudioCodes engineer and he had no answer. I asked if maybe there was a performance impact to this value. He replied that there isn’t one that he knew of. I asked a second AudioCodes engineer and he confirmed that he had never heard of an issue by setting this to 0.

It’s surprising to us that we hadn’t run into this issue before but then our standards are to use the generic ASCII character set in all display names, usernames, etc.

How do you know you might have this issue? I don’t have the AudioCodes syslog files anymore so I swiped the below from the German blog mentioned above.

 

<132>[S=831454] Error Indication: Last Command (Primitive) was not performed due to cause 100  [Trunk:0 Bchannel:1 ConnID:2] [Code:0x23127]
<133>[S=831455] (   lgr_psbrdex)(833974    )   recv <– UnHandled event:EV_ISDN_ERROR_INDICATION (317)
<133>[S=831456] [SID:766997237] (   lgr_psbrdex)(833975    )   pstn recv <– CALL_RELEASED Trunk:0 Conn:2 RetCause:73 NetCause:255
<132>[S=831457] REPORT_TYPE_ERROR_IN: ErrorCauseString = Incorrect parameter type, DiagnosticString= Condition unknown, ErrorCause = d, Diagnostic =  [Trunk:0 Bchannel:-1 ConnID:-1] [Code:0x23127]
<133>[S=831458] [SID:766997237] (   lgr_psbrdif)(833976    )   pstn send –> PlaceCall: Trunk:0 BChannel:1 ConnID:2 SrcPN=xxx SrcSN= DstPN=151xxxxxxxx DstSN= SrcNT=4 SrcNP=1 SrcPres=0 SrcScrn=0 DstNT=2 DstNP=1 ServiceCap=M RdrctNum= RdNT=0 RdNP=0 RdPres=0 RdScrn=0 RdRsn=-1 Excl=1 Display=Müller, Max IE= UUIE=0, RawData:0 CLIRReason:-1 OrigPN= OLI=-1 OffhookInd=0
<133>[S=831462] [SID:766997237] (   lgr_psbrdif)(833980    )   Abnormal Disconnect cause:255#?reason(255)? Trunk:0 Conn:2

 

If you see the above that’s a clue. In this case, it was the u-umlaut (ü) in “Müller, Max” causing the issue.

May 14

Quick RegEx Trick

AnientRegExI thought I blogged this but I guess I didn’t. So I am posting this mostly to save myself time finding this the next time I look for it.

I had a regular expression that returned 2 variables. Here is what I wanted:

$1555$2.

However Lync interprets “$1555″ as a variable instead of what I want which is just $1 as the variable. So how do I tell regular expression that it should stop at the first 1 and not continue until the next delimiter ($2)?

Answer:

Use curly braces

Re-writing it in this format got me the desired result:

${1}555$2

The fourth paragraph on this website is what got me the answer – http://www.regular-expressions.info/replacebackref.html

May 11

Script: Query Front Ends for Specific Event Log ID’s

I was troubleshooting today with my main Lync man “JP” (who chooses to remain anonymous). Part of our troubleshooting was checking against 6 (and sometimes 12) front ends to see if a specific Event ID appeared in Event Viewer. This was tedious, going to each server and then a lot of them getting no results.

JP said “there should be a script to do this for us”.

And from that comment this script was born. It’s possible someone has already written this script. We didn’t bother looking since it is a fairly simple script. If someone has written this, then let me know and I will give you credit.

The script – Get-CsEventID – is pretty simple. There are 2 mandatory parameters:

-Pool is the name of your Lync pool which is then sent to Get-CsSite to get the names of each of the servers in your pool

-EventID is the Event ID for which you are looking.

The two optional parameters are:

-LogName By default the script searches in the “Lync Server” log but setting this will let you search against other logs like Application or System

-StartTime If you want to limit your search to the past few hours or days, then set StartTime to the number of hours you want to go back. By default, this is set to 72, so it will search back for the past 3 days.

Here are 2 examples:


.Get-CsEventID -Pool skypepool.flinchbot.com -EventID 12288

This will search for Event ID 12288 across the skypepool.flinchbot.com pool. It will search for the past 72 hours for this entry.


.Get-CsEventID -Pool skypepool.flinchbot.com -EventID 6005 -LogName &quot;System&quot; -StartTime 4

This will search the same pool, but now for EventId 6005 in the System log. It will search back the past 4 hours.

Note that Windows Firewall will need to permit access to remote event logs. You can run the following on a Windows 2012 or later server to enable this.


Get-NetFirewallRule | where DisplayName -like  '* Event Log*' | Enable-NetFirewallRule

Grab the script here.

 

May 04

Skype for Business Notes

I’ll be tracking my notes with installing and working with Skype for Business.

1. I did an in-place upgrade of my existing Lync 20reset-cspoolr13 pool and everything started up and appeared to be working fine. The upgraded pool is named “lyncpool.flinchbot.com” which is a bad name for a pool that actually contains Skype4B servers. So I decided to reduce that pool from 3 front ends to 1 which will give me enough space on my VM hosts to build some new, native Skype4B servers. So I removed 2 of the 3 front ends via Topology Builder. Now my pool won’t start. I get the following error when try to do a full reset of the pool:

poolfail

Fabric version is unknown. No it’s not. It’s what came on the install image! It’s version 3.

Good ol’ Windows Fabric strikes again. I’ve tried rebooting and forcing the reset a few times. Finally I uninstalled Windows Fabric and installed it again from the Skyp4B .iso. Same problem. So this pool is hosed and since this is a lab I don’t want to spend any more time figuring this out.

Update: As I removed roles from Topology for this pool, like conferencing and enterprise voice, I tried to start the service again. It finally started. It is possible that re-running the deployment wizard straightened a few things out. I’m wondering if running Enable-CsComputer separately would have fixed it too.

My takeaway: Don’t do in-place upgrades of production machines. Now this error may not be related to the in-place upgrade process. However, doing a fresh install assures that you can test the pool before moving users. It also gives you the chance to do things like installing the latest OS, building it on newer hardware, installing the latest Windows patches if you’ve fallen behind, etc.

2. Control Panel still can’t sort. This is about unacceptable. Seriously Microsoft? You can get media to traverse NAT’s, firewalls, edge servers, etc but you can’t sort a list? You’d think by the 3rd release of the Lync line of software that they could get some intern to show them what he learned in his first programming class ever: How to sort a list. At work we have admins scattered all over the place, a few dozens pools, and more supported SIP domains than I want to count.. Trying to find the right entry in some of our lists is very difficult and frankly a waste of my time.

Sorting is hard

Sorting is hard. It’s like math but hardererer.

3. When adding your Skype4B server to Topology, be sure to put them in the Skype for Business folder. I know, this should be obvious but I guess habit got the better of me. I added my Skype4B Enterprise settings into the Lync 2013 foled in Topology. To no surprise, I got the following errors in the install logs:

Wrong-folderSo if you get this error, remove the Skype servers you put into the Lync 2013 folder and add them again to the Skype for Business folder. Removing them from Topology might give you an error that a conference directory already exists on the pool you are trying to delete. Delete that by running the Remove-CsConferenceDirectory  with the -force switch and then try the Topology removal again.

4. Not everything is a straight port from Lync 2013 with the “Skype Look”. The certificate wizard was actually simplified and I like it better.

certreq

They also updated the “Start Services” text to explain that you really shouldn’t start the services until your pool is ready. It’s a minor fix but I bet it will reduce some of their support calls.

startservices

What they should also add in there is when running Start-CsPool that it must be done form a shell opened to “Run as Administrator”

5. There is no way to in-place upgrade an SBS/SBA. While this would have been *really* useful and possibly the only use of in-place upgrades I would have used in production, Microsoft doesn’t support this. My guess is that this is because Microsoft foolishly still makes the SBA vendors provide custom (and wholly redundant) “Install code” which could fail to function in an upgrade scenario. This is yet another reason why the SBA/SBS model is excellent on the drawing board but is full of issues and miss-steps in production.

So much like the upgrades from 2010 to 2013, you have to do full re-installs to get to up to Skype4B. The SBA code hasn’t been released yet because of the reliance on 3rd party vendors to provide their no-value-add install wizards. An SBS does not rely on this pointless vendor integration so you can upgrade those on your own – full uninstall of Lync followed by the Skype4B install off the .iso.

6. That annoying 29820006 patch. You can’t install it. Oh you keep trying. Then you realize it’s the x86 patch. So you download the x64 patch and it still won’t install. So I’m not sure exactly what the magic is, just make sure everything in Windows Update that is mandatory or recommended is installed. I think there is an update to Windows Update that has to be installed before you can install this patch.

 

Mar 24

Announcing the UC Now apps!

A few years ago I created a Lync “aggregator” which scours 120+ blogs and other related sites for Lync articles and posts what it finds to various places. You can see the output in Twitter, Twitter again, Bitly, Facebook, Google+,  Tumblr, and in various apps I’ve put out over the years. I’ve also added a less-complete aggregator for Exchange which you can see on Twitter.

I’ve unpublished all my previous Windows Phone apps and now have a universal app called UC Now that is the same app on Windows 8.1 and Windows Phone 8.1. Here is the link to the Windows store and here is the link to the Windows Phone store.

For those on Android devices, you can download the Lync News 2013 app which will get you by until I can get that updated to add the Exchange feeds and a bit more in-line (at least content-wise) with the Windows apps.

If you are using an iPhone then you are hosed. But you probably already new that.

Below are some quick screen shots from the Windows 8.1 app.

Main page

Main launch page

Exchange news feed

Exchange news feed

Skype for Business (Lync) news Feed

Skype for Business (Lync) news Feed

Resource links

Resource links

The Windows apps were done using Microsoft App Studio. The Android app was done using AppYet.

If you have any of the older Windows apps installed, please uninstall them as they will never get updated.

Older posts «