List all SfBS & SfBO policies by type

Here’s a “one-liner” I came up with this week that dumps ALL of the SfB policies in your system ordered by type:

PS C:\> Get-Command -Module SkypeForBusiness Get-Cs*Policy | where-object {$_.Name -ne "Get-CsEffectivePolicy"} | ForEach { invoke-expression $  } | ft @{Label="Policy type"; Expression={($_.getType()).ToString().Split('.')[-1]}}, identity -auto

This is what it looks like here in the GIS lab:

Continue reading ‘List all SfBS & SfBO policies by type’ »

SfB 2015 Server Update – May 2020

It’s been a whole nine months since we saw an update for Skype for Business Server. That was CU10 HF1.

This is build 6.0.9319.580, and it updated seven components on my Standard Edition Front-End.

What’s Fixed?

This cumulative update includes a defense in depth fix and enables Location-Based Routing to support the Skype for Business mobile clients. It also fixes the following issues:

  • Kb 4507230 Support LBR and branch site voice resiliency conflicting requirements in Skype for Business Server 2015
  • Kb 4538703 Increase characters limit for Notification URI in Skype for Business Server 2015 Control Panel and PowerShell
  • Kb 4537395 SQL Server Agent LcsLog purge job fails with error in certain scenarios in Skype for Business Server 2015
  • Kb 4525499 Call forwarding and voice mail not working for LBR users who’re signed out of all clients in Skype for Business Server 2019 and 2015
  • Kb 4537396 IM filter doesn’t work if network path has host server name in Skype for Business Server 2015
  • Kb 4525500 Users who’re not Enterprise Voice enabled can dial out when PreventPSTNTollBypass is true in Skype for Business Server 2015
  • Kb 4538701 Conference call dropped after 28 or 56 minutes joining from Cisco phone in Skype for Business Server 2015
  • Kb 4537394 UCWA unhandled exception – InvalidDataException in Skype for Business Server 2015
  • Kb 4537398 PII data (IM contents of push notification) is shown in Skype for Business Server 2015 UCWA mobile clients
  • Kb 4549672 Update set-cookie response header to use SameSite=none in Skype for Business Server 2015 UCWA
  • Kb 4537397 Wrong time zone in Skype for Business Web Scheduler in Skype for Business Server 2015
  • Kb 4538702 Skype for Business for Mac or iOS clients doesn’t show PSTN callers in the meeting participants list in Skype for Business Server 2015
  • Kb 4538700 PSTN call transfer fails if agent anonymity is enabled in Skype for Business Server 2015
  • Kb 4526182 In-a-meeting and Presenting presence states are available for UCWA clients in Skype for Business Server 2019 and 2015
  • Kb 4538699 Wrong end point shown for a transfer call in Skype for Business Server 2015

What’s New?

Nothing noted. No cmdlets have been added to the SfB module in this update.

Continue reading ‘SfB 2015 Server Update – May 2020’ »

Migrating Gallery.TechNet to GitHub made easier

TL;DR: My “New-ObfuscatedFile.ps1” script uses a find/replace CSV file to make multiple substitutions in a text file in one pass. It can be easily repurposed to turn HTML into MarkDown.

Microsoft’s site will be sorely missed when it’s closed later in the year.

It’s been a fantastic repository of tools, documents and utilities, and no one place on the Internet will replace it.

As it stands today, the “Lync” category has 469 offerings, and across the entire site a total of 25947 items are there for the unearthing, all designed to make your life easier.

I see my fellow MVPs Luca, Stale and Shane take top billing, with download numbers I can only dream of.

Those guys, like me and many others are now faced with re-homing all this content somewhere else.

For our scripts, that’s GitHub – but how to get everything across?

Continue reading ‘Migrating Gallery.TechNet to GitHub made easier’ »

Use a UI Flow to automate web forms – Pt.2

TL;DR: Part 2: add an On-premises Data Gateway & trigger a “UI Flow” via a web hook, initiated by a “flic” smart button.

In my last post I demonstrated how you can use the new “UI Automation” functionality inside Power Automate (pka Microsoft Flow) to fill out a web form. In that example I automated a report of a shopping trolley abandoned out the front of home.

This post adds the trigger control. Here I’ll take you through adding the required “on-premises data gateway” and add a web-hook to fire the flow, triggered by one of our “flic” smart buttons. With one of these located near the door we’ll be able to lazily submit a trolley report just by tapping it when we arrive home.

Continue reading ‘Use a UI Flow to automate web forms – Pt.2’ »

Use a UI Flow to automate web forms

TL;DR: I walk you through the entire process of creating a “UI Flow” in Power Automate to fill out and submit a web form.

The headquarters of the Greiginsydney empire is located quite close to a store of one of Australia’s major supermarket chains (Coles).

I walk there and only ever shop for as much as I can carry home, but some of my neighbours aren’t either as fit or as considerate, and we regularly find shopping trolleys (which aren’t meant to leave the shopping centre) abandoned in our driveway and the immediate surrounds.

Coles has a website where you can report dumped trolleys, but the form is relatively complicated. It doesn’t just POST your address when you click Submit, but creates a complicated cookie with the converted lat/long of your location. I wasn’t up for trying to simulate that in code, and one of my MVP peers suggested it sounded like a great opportunity to create a UI flow.

Turns out it’s relatively simple to do, using the new “UI Automation” functionality inside Power Automate (pka Microsoft Flow).

In Part 2 next weekend I’ll add a web-hook to fire the flow, triggered by one of our “flic” smart buttons. With one of these located near the door I’ll be able to submit a trolley report just by tapping it when I walk in the door.

This weekend we’ll create the Flow.
Continue reading ‘Use a UI Flow to automate web forms’ »

SfBS 2019 CU2 HF1 March 2020

Things have been a bit quiet on the updates front of late, and today’s hotfix for SfB Server 2019 barely caused a ripple. This update builds upon December’s CU2, only updating two components on my SE Front-End. It takes the build from 7.0.2046.151 to 7.0.2046.216.

What’s Fixed?

  • Kb 4552637 “Fatal error during installation” error when uninstalling MacpWebComponents.msp in Skype for Business Server 2019.

Continue reading ‘SfBS 2019 CU2 HF1 March 2020’ »

Lync 2010 client version summary

I’ve long stopped blogging Lync 2010 client versions, but I recently had cause to go for a bit of a search, and there were some I encountered in the wild that I’d not previously documented here.

Here are a few more versions and some links. This isn’t a comprehensive list, but is intended to augment those that will be revealed if you use the Search function on the blog.

Some of the below was sourced from Andrew’s blog, and others from Frank Carius.

As best I can tell, 4.0.7577.4540 from Sept 2017 remains the last update to this long-obsolete client.

4.0.7577.4540 Sept 2017 – Security Update

4.0.7577.4534 June 2017

4.0.7577.4525 March 2017


4.0.7577.4486 Dec 2015

4.0.7577.4415 Dec 2013 – Security Update

– Greig,
18th March 2020.


Raspberry Pi shutdown button

We have a small but growing collection of Raspberry Pi devices here. They’re performing a range of tasks: one’s our Pi-Hole, another runs the “Homebridge” middleware between Apple’s HomeKit and our Clipsal C-Bus, whilst a third is running the management app for the Ubuntu WiFi. And of course plenty more are strewn around the place running various test builds of the intvlm8r.

All of these are running headless, so it means if we want to shut them down for any reason we first need to SSH into them to initiate a ‘sudo shutdown now’.

There are some ‘shims’ on the market that provide on/off switch functionality and even potentially some power management, but they’re relatively expensive and generally overkill for our purposes.

A well kept secret is that the Raspberry Pi has for a while now had the ability to initiate a shutdown from an IO pin, and even to start it up again at the OS level – no scripts or fancy hardware required!

All you need is a momentary switch and one line of code in config.txt.

Continue reading ‘Raspberry Pi shutdown button’ »

Begin-Process-End in a PowerShell script

Much has been written about how you need to use Begin/Process/End blocks in order to handle a collection of values passed from the pipeline, but those posts all seem to focus on how to do it in a *function*, not a script.

I recently struggled to figure out how to retrofit this functionality into one of my existing PowerShell scripts.

If you’re here I guess you already know WHY you want to do it, but it’s the HOW what’s causing you distress.

Seen this and had your script dump a list of running processes to screen?

begin : The term 'begin' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling
of the name, or if a path was included, verify that the path is correct and try again.

The trick is simple: there can be NO executable code outside the B/P/E blocks. Nothing. No ‘statics’, no hash tables declared, no functions, not a sausage. Once you move the lot into the Begin block, it’s plain sailing.

Continue reading ‘Begin-Process-End in a PowerShell script’ »

Adventures with Import- and Update-CsUserData Pt.4

I’ve spent a lot of time in the past 12 months working with the <verb>-CsUserData commandlets in SfB, and it’s been an interesting time.

This is part 4 in a series where I document the traps I’ve fallen into with the Import-CsUserData and Update-CsUserData commands in particular.

Part 1 – Update-CsUserData fails on bad data.
Part 2 – Your Front-End won’t start after Import-CsUserData imports bad data.
Part 3 – Update-CsUserData throws false red and runs slow if your paired pool is offline.
Part 4 – You can’t trust Import-CsUserData to tell you if it fails.

Part 4 – You can’t trust Import-CsUserData to tell you if it fails

Having abandoned Update-CsUserData we moved to Import-CsUserData, but that wasn’t the bed of roses we were expecting either.

TL;DR: DON’T run “Import-CsUserData” without the -Verbose switch, and make sure you pay attention to its output. If it has some objection to your XML or ZIP file it might silently fail. Only with the -Verbose switch will you know for sure*.

(*) And even then I wouldn’t bank my career on it.

Continue reading ‘Adventures with Import- and Update-CsUserData Pt.4’ »