May 13, 2016 — Day 34: Update-CsPool Script
I’ve started working on yet another stupidly complicated script — largely because it will make my life a lot easier. This one has a lot of work left to do, its in much rougher shape than my ADFS script, and a lot more can go wrong with this one. One of the nice things about the ADFS script was that, although it had a lot of options, each option was largely simple and required only a few commands. This Update-CsPool PowerShell script is different in that it has very few options for the user to worry about, but it needs to do a lot of stuff with the small amount of input it does receive. This can be quite tricky, so I need to make sure I handle errors a bit more clearly than in some of my previous work. This script also has the ability to stop production Skype for Business Server services, reboot servers, and bring things back into service. That is pretty dangerous since it could result in user service interruption and outages. So, I have to tread carefully.
The script does a few things in very specific order:
- Asks the user to enter the name of the Skype for Business Server 2015 Front-End pool the script should run against
- Generates a list of all the servers in the pool
- Makes sure that the local machine the script is being run on is not in the pool (since the servers in the pool may be rebooted later)
- Starts with the first server and fails over services
- Waits for all the services to be stopped
- Downloads and imports this PowerShell module for managing Windows Updates: https://blogs.technet.microsoft.com/heyscriptingguy/2012/11/08/use-a-powershell-module-to-run-windows-update/
- Installs Windows Updates
- Checks if the server needs a reboot and reboots it if it does. It skips the reboot if the registry entry indicating that a reboot is required is missing.
- Waits for the server to reboot
- Fails services back and waits for them to all start
- Begins over again at step 4 with the second server
It goes on like that until it has updated (and maybe rebooted) all servers in the Front End pool. The script is missing a lot unfortunately, and doesn’t seem to behave very well depending on how long it takes services to stop. I’ll have to do some more testing, but I’m hopeful that I can get this thing to a state where its useful. The main reason I started writing this was to save me some headache when handling patching in customer environments, especially ones where they have more than one Front-End pool. Eventually I’d love to add extra functionality to patch other Skype for Business components besides Front-End servers, but I had to start somewhere.
Here is the most of up to date version of the script I’m ready to share. I will hopefully have some nice updates to this available in the next few weeks: https://github.com/mepples21/PowerShell_Public/blob/master/Update-CsPool.ps1