Home > Lync Server/Skype for Business Server > Changelog: Set-Cs2013Features.ps1

Changelog: Set-Cs2013Features.ps1

This is the changelog page for Set-Cs2013Features.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.

v3.8 – 03-25-2015

Added features/options

Updated features/options & fixes

  1. option 5 (OWAS) – the English language pack installation is now FINALLY silent. This removes the need to manually click through the installation routine. This also introduces a known issue where the language pack installation will fail if -TargetFolder contains a space. I’m working to resolve that.
  2. option 5 (OWAS) – changed the GUID that is checked for installation of the English language pack. Seems the OWAS install created the previous one, which meant the detection for the language pack could give false results.
  3. Additional handling around the -tail function to avoid visible errors
  4. option 2 (Edge) – minor tweak so that the Remote Desktop firewall policy for the Public profile is NOT enabled if the edge server is domain joined.
  5. If -DownloadAll or -DownloadOnly options are specified, the server version check, core check, and reboot check are all skipped.
  6. option 30 (WireShark) – updated to 1.12.4, including WireShark and the two files I created to install and configure WireShark. Was also able to shave more than 27% of the processing time off the configuration task.
  7. option 50-1 (Lync Help File) – fixed issue where extra errors would occur if the file is not present when the install routine is called.
  8. Fixed an issue with selecting “abort” during failed downloads and the log file session not closing when using -tail
  9. Streamlined some of the code for calling the WireShark config program so that it’s not version specific


v3.7 – 02-27-2015

Added features/options

  1. 80-7 Event Zero connector download added

Updated features/options & fixes

  1. Started adapting the script to support installing Skype for Business Server
  2. option 3 (Front end) fixed the issue where Telnet-Client would get installed on front ends, even if you declined it.
  3. option 21 (ARR) while this option was introduced in v3.6, I neglected to add it to the menu. That’s now done.
  4. fixed an issue where some downloads would throw an error & the script would exit if IE had NEVER be opened by the user. This is because a registry key that contains some proxy info isn’t created till IE is opened the first time. The script has always looked for that key to see if it needed to deal with a proxy. So the solution is that if the key doesn’t exist, the script will create it, and set it to zero (the same default setting IE uses if there is no proxy). If a GPO or other policy comes by and sets it later, that’s still fine. We’re just creating it a little sooner.
  5. New-FileDownload function updated to support retries when non-default destination folders and/or filenames are defined.
  6. Removed the MSMQ features for Director prereqs. I swear I removed this before, but they’re not required and not listed in the official doc for prereqs at https://technet.microsoft.com/en-us/library/gg398686.aspx
  7. Fixed an issue where some users would get an error about $PowerShellTailId when exiting the script. This was a trivial error that didn’t affect functionality of the script, and could safely be ignored. But it’s dealt with now.
  8. Little bit of code cleanup per best practices (a constantly evolving task)
  9. option 18 – Message Analyzer updated to v1.2 (build 4.0.7285.0)
  10. option 2 – edge server – minor change where DNS is not removed from the internal NIC when the edge server is domain joined
  11. Minor tweak to Set-NICConfig function to handle more complex queries
  12. Minor tweak to -tail option to deal with multiple PowerShell windows open
  13. Option 5 (OWAS) now cycles the WACSM service after installing the language pack

v3.6 – 02-12-2015

Added features/options

  1. option 21 – ARR (“Pirate Proxy”) prerequisites. This installs the Windows features, and downloads the Web installer. it also verifies the server is not domain joined, then goes through the process of setting the primary DNS suffix (same as option 50-13). Also configures NICs to remove DNS and gateway from the internal NIC, remove dynamic registration in external NIC, and prompt to disable both lmhosts and NetBIOS over TCP/IP.
  2. option 50-13 – Configure primary DNS suffix. This prompts for a domain name, assigns it as the primary DNS suffix, then reboots. This configuration is required for edge and ARR (reverse proxy) servers.

Updated features/options & fixes

  1. Event log option in Write-Log is finally fixed, and now supports writing to the Lync Server and OWAS event logs as well.
  2. Suppression of some warnings when Windows features are installed and Windows Update is disabled or not configured
  3. option 5 – Now checks if server is part of an OWAS farm before installing updates & throws an error if it is
  4. fixed typos in Test-InvalidCerts when writing warnings. Thanks to Manfred for the heads up.
  5. option 90-3 – Now checks if the Lync module is installed before attempting to cycle the Lync services. Thanks to Manfred for the heads up.
  6. -DownloadAll now also includes the DigiCert certificate utility. Thanks to @chrislerhatx for the idea.
  7. option 3 (edge): now checks for domain membership and throw a warning if they are domain joined, as that’s not recommended.
  8. option 3 (edge): If not domain joined, the server is checked for a primary DNS suffix. If it’s not configured, the script will prompt for a domain name, adds it, then prompts for a reboot. Essentially the same as option 50-13.
  9. option 3 (edge): now automatically runs the NIC config to remove DNS and gateway from the internal NIC, remove dynamic registration on the external NIC, and prompt to disable both lmhosts and NetBIOS over TCP/IP.
  10. cleaned up Install-TelnetClient function
  11. tweaked New-ProgramInstallation to not require install switches. This was necessary as the WireShark install and config programs don’t have switches
  12. tweaked New-ProgramInstallation to finally squash the problem with checking for processes and throwing an error that couldn’t easily be suppressed. This was most evident when building OWAS servers, as the .Net Framework 4.5.2 would always report it failed, when, in fact, it succeeded.
  13. -tail now gracefully exits when the script exits (in non-reboot scenarios)
  14. updated SDN downloads to v2.11 (9235.1)
  15. Option 5 (OWAS) updated to include February update 2956101
  16. option 30 (WireShark) now automatically installs and configures for common Lync settings, including:
    1. adds Source Port (resolved) column
    2. adds Destination Port (resolved) column
    3. adds DSCP column
    4. Configures RTP protocol “Try to decode RTP outside of conversations”
    5. Configures SIP protocol for ports 5060-5068 (instead of WireShark’s default of 5060)
    6. Sets the time format to human readable format

v3.5 – 02-02-2015

Added features/options

Updated features/options & fixes

  1. option 50-12 (Edge servernetworkconfig)
    1. now removes the gateway on the internal NIC
    2. now removes the configured DNS servers on the internal NIC
    3. now removes the dynamic DNS registration for the external NIC
    4. now prompts & if accepted, disables lmhosts lookup on all NICs
    5. now prompts & if accepted, disables NetBIOS over TCP on all NICs
  2. option 5 (OWAS server)
    1. updated to include January 2015 Cumulative Update (from SP1)
    2. Added Web-http-logging to installed Windows components based on recent MS documentation change
  3. comment help on many functions updated
  4. Revamped code used for mounting/dismounting disk images. It’s now much cleaner code-wise, cleaner console output, and about 10 lines less code.
  5. -Win2012Source now supports an unmounted .iso file – thanks to Lasse Nordvik Wedø (@lawedo) for the suggestion
  6. -Win2012Source now survives reboots by the script

v3.4 – 01-26-2015

Added options and features

  1. Added -Tail option which shows a tail of the log file as it’s written (think *nix). It automatically restarts if the script reboots the server, too. Really only beneficial to me, but if you use it and find it useful, let me know. Thanks to mjolinor on the Technet forums for help with getting the syntax right.
  2. Option 50-11 – Opens the hosts file in Notepad for editing. This is convenient on edge servers.
  3. Option 60-15 – Creates Notepad Desktop Shortcut for Edge servers to open the Hosts file (Thanks to Hany for the idea)
  4. Option 50-12 – Configure edge static routing – adds the static routes for all private address ranges to use the internal NIC. The user is prompted with a list of NICs discovered, and asked to pick which will be used for the internal connection. Once picked, the script will determine if there is already a gateway defined. If so, it will use that IP address to create the static routes. If there is no default gateway assigned, the user is prompted to enter the gateway that the static routes should use. The user still must manually remove any hard coded gateways on that NIC.

Updated options and fixes

  1. Option 50-8 (Upgrade to PowerShell 4.0) now only downloads the files if it needs them. Dunno how I overlooked this previously.
  2. Option 50-2 Changed the New-PSUpdateHelpScheduledTask function. It now also cleans up the temp files created by the Update-Help command. Otherwise, over time, you’ll end up with significant temp folder bloat (about 50MB every time it runs). Thanks to @UCGarry for the heads up. If you’ve used a previous version of the script to create the scheduled task, just run this version. It will delete the existing scheduled task and create a new one.
  3. Tweaked New-Shortcut function to account for shortcuts that need arguments. Also cleaned up some of the logging so that if the shortcut already exists, it’s more obvious.
  4. Updated Wireshark download to 1.12.3 (from 1.12.2)
  5. Updated SQL Server 2012 Management Studio Express to SP2 (from SP1)
  6. -DownloadOnly bypasses RestartRequired check
  7. Reboot option (98) now correctly sets running status when rebooting
  8. Message Analyzer upgraded to v1.2 (from 1.1)
  9. Change reboot prompt when disabling UAC to popup style instead of console prompt to match other prompts in the script
  10. Option 15 – Windows Update – now exits the script to ensure the script closes gracefully. This is trivial since most Windows Updates would require a reboot anyways, which would stop the script.

v3.3 – 01-07-2015

  1. Abort/Retry/Ignore option for downloads that fail. Abort stops the script (gracefully), retry will retry the download, ignore will ignore that file and continue running the rest of the script.
  2. Combined all the code that gets executed when the script exits, into a function. This allowed me to eliminate probably 100 lines of code, as well as getting more predictable output in the log file.
  3. code cleanup/standardizing of some function formatting
  4. URL decoding of downloaded file names. Some of the files, especially documents, are encoded URLs at some sites like Microsoft. Decoding them makes the file names more readable.
  5. PowerShell version is now logged when the script starts.
  6. Fixed logging anomaly where elapsed time wouldn’t show leading zeros – thanks to @pcgeek86 for some code examples
  7. download menu option 6 – Lync Online Admin components – includes the Lync Online PowerShell module and the Lync Online Sign-in Assistant
  8. Tweaked logging of downloaded files to account for those without version numbers
  9. fixed display anomaly for option 2 (edge server) where a prereq warning could be displayed in both the console and as a pop-up, both at the same time.
  10. Changed the script to utilize “#Requires -RunAsAdministrator” instead of a function that tries to restart the script in an elevated session. The latter was just a little two touchy, especially if UAC is enabled. The script will now error if it’s started from a non-elevated session.
  11. Had to back out some of the [IO.FileInfo[]] changes I made in 3.2 due to reported errors. Investigating further when time allows.
  12. -TargetFolder can now be used with -DownloadAll option
  13. File versions are logged of files that already exist if the script is checking to see if it needs to download the file.
  14. Fixed the -DownloadAll option to always download the chm file and the latest CU, regardless if they already exist locally
  15. Using a UNC (i.e. “\\server\share”) path for -TargetFolder is now supported for at least the -DownloadOnly option as well as the Front End and Office Web Apps server options (options 3 and 5, respectively). I’m still validating that it will work for other options. Thanks to @tjschleining and @energizedtech for help with the regex for validation. NOTE: I have not tested with hidden shares in a UNC path, such as “\\server\share$” or administrative shares, such as “\\server\c$”.
  16. Using a UNC path for -Win2012Source is now supported. Just like above, I haven’t tested with hidden/admin shares.
  17. -DownloadAll option now bypasses the Server Core test when the script starts
  18. Misc server config submenu created (option 50), and a bunch of the options were moved there & renumbered. This was necessary as there were so many options on the main menu that the menu would scroll partly off the screen.
  19. Added Server Config option 7 – Disable Server Manager on login (needs to be added to menu)
  20. Added Server Config option 8 – Upgrade to PowerShell v4 – this will work on 2012 servers (not 2012 R2) that have the original PowerShell 3.0 installed. This option requires a reboot at the end, and I **STRONGLY** recommend rebooting before attempting any other options.
  21. Fixed minor display anomaly due to a typo when the reboot prompt appeared
  22. Fixed a bug created by two functions that create/change/delete script related registry info. One would negatively affect the other and cause unintended results. This was evident in options that would reboot the server & auto start the script again. The script would throw an error when restarting.
  23. Misc Server Config > option 6 “Set fabric logging to circular” added. See Tom’s great article “Check your Lync server windows fabric log size with PowerShell
  24. Disable Server Manager on logon option added in Misc Server Config > option 7
  25. Upgrade to PowerShell v4.0 option added in Misc Server Config > option 8. This is for Windows Server 2012 boxes that still have PowerShell v3.0 on them. Upgrading PowerShell both before and after Lync Server is installed is supported by Microsoft.

v3.2 – 12-22-2014

  1. Added option 34 (Lync Room System Admin Portal prerequisites) to the menu. It actually worked fine, the option just wasn’t visible in the menu.
  2. -DownloadOnly option. If specified when calling the script, will ONLY download necessary files for the option you choose. For example – when using that option, and choosing option 3 (Front End), the script will only download the Silverlight file, SQL Express, and SQL Management. Studio. No other configuration or changes are made to the server. This option is in case your Lync servers do not have Internet access. You can run the script on a machine that DOES have Internet access, download the files, then copy them to c:\_install on the desired server, and use the script normally.
  3. -DownloadAll option. Similar to -DownloadOnly, but this will download every file that the script can normally download. This includes all files for all options. Keep in mind that a full download set is in the neighborhood of 3.8GB of files.
  4. Removed download of Lync-Skype Connectivity Guide, as it looks like this is now just available as web pages, and no longer as a Word document download.
  5. Updated WireShark to 1.12.2. Still working on the full automated install and configuration of WireShark. Pretty sure it will work fine, but really need to test some more.
  6. Added Lync Online PowerShell module for SCOM Watcher Node (option 16 and download option 2) – thanks to Andrew Price for the heads up
  7. renumbered sub-menu options so that they all start at 1
  8. created security sub-menu (option 90), and moved option 29 (disable SSL 3.0) to it (now option 2)
  9. added option 1 in security sub-menu to disable SSL 2.0
  10. SSL 2.0 and 3.0 settings (enabled/disabled) are now logged when the script starts
  11. swapped some longer IF statements with some regex
  12. change in code due to OWAS image file no longer being a free download from Microsoft. If you need to run option 5, manually download the OWAS image file from your volume licensing site and place it in c:\_install. Option 5 will then work as intended. See http://www.wictorwilen.se/office-web-apps-server-will-only-be-available-for-volume-license-customers-shortly+SharePoint+MCA%2C+MCM+and+MVP%29 for more info.
  13. code cleanup as a result of DownloadOnly/DownloadAll options allows for easier management of the 40+ URLs the script uses for downloading files. This also prompted me to optimize the script a little more to handle URLs in the variables and how those files get installed. This means less work for me when a URL changes, which happens often with things like Silverlight, WireShark, etc.
  14. adjusted the warning verbiage when configuring Skype federation (option 28)
  15. All places where the server reboots are now forced – regardless of whether someone else is logged onto the server.
  16. Download option 1 (latest cumulative update) will now ALWAYS download the update, even if a local file already exists. This is to ensure that the latest CU is downloaded if an older version is already in the folder. This is the same behavior I use for the Lync documentation help file. I may try to do some version detection in the future, but this will have to suffice for now.
  17. OWAS SP1 notice (option 5) about size will now only appear if the file needs to be downloaded
  18. Dismounting OWAS ISO doesn’t close Windows Explorer window in 2012 R2 (like it does in Win 2012) – write-log added entry to display that it can be manually closed
  19. version info is now logged for files that are downloaded. I envision something around logging CU number in the future. We’ll see.
  20. changed the code that looks at the age of the script file to warn about updates to look at last modified vs. creation date. This likely won’t affect anyone other than me. But either way, should be better.
  21. Switched some [string] variables to [IO.FileInfo[]] just for best practices.
  22. A bunch of code added to “lock” the server so that multiple instances of the script cannot be run at the same time. Normally, I can’t imagine this ever taking place, but had an incident at a customer site lately that was literally a perfect storm where it happened. When the script runs now, it sets a registry key to one value, and when it stops, it sets the key to a different value. The script checks the value of that key when it first starts to ensure it’s not already running. If it is, it throws a warning and exits.
  23. Tweaked the status output during file transfers to be a little more descriptive, including listing filename. I’m still tweaking the code to display file size.

v3.1 – 10-24-2014

  1. option 84 (Lync 2013 Rollout and Adoption Success Kit (RASK) User Education and Training Resources)
    1. added Lync 2013 Rollout and Adoption Success Kit (RASK) Core Planning Resources
    2. added Lync 2013 Rollout and Adoption Success Kit (RASK) Resources
  2. fixed menu display anomaly for option 85
  3. option 34 (LRS Admin portal prereqs) added. As much as people are having issues getting it to work right, this option will at least get the prereqs installed.
  4. option 29 (Disable SSL 3) added. This is to lower your vulnerability footprint for POODLE attacks. I’m working on adding another whole menu (similar to the downloads menu) of just security options. Look for that in a future build. For more information, see Richard Brynteson’s posts POODLE and Lync Server 2013 and POODLE Testing Results for Lync
  5. Option 5 (OWAS) updated to do a date check due to the upcoming change for OWAS downloads. If the script is run after 11/23/2014, it will not attempt to download the image because the image won’t be available on the Microsoft Download Center any longer. See http://blogs.technet.com/b/office_sustained_engineering/archive/2014/10/22/web-apps-server-removal-from-download-center.aspx. The work around will be to manually download the image via your Volume Licensing portal and place it in the $TargetFolder (usually c:\_install), where the script will see it and continue as normal.
  6. fixed a bug and optimized the code around .Net versioning in option 5 (OWAS)
  7. fixed a bug in option 5 (OWAS) where you’d get prompted to install the English language pack even though it was already installed.

v3.0 – 10-06-2014

  1. Rewrote the New-ProgramInstallation function to reuse code that was otherwise appearing multiple times throughout the script. This resulted in several dozen lines of code that was no longer needed being removed. It also allows for more accurate logging, including finally fixing an issue where the script would report something was installed even though the installation hadn’t yet finished.
  2. Rewrote the New-Tile function. The original method was fine for just a few options, but it got out of control and needed to be streamlined. Result is several dozen fewer lines of code with no loss in functionality or performance.
  3. Option 54 Added desktop shortcut for Microsoft Message Analyzer. Thanks to John for requesting it.
  4. Option 71 Added taskbar shortcut for Microsoft Message Analyzer. Thanks to John for requesting it.
  5. fixed prompt for FW exceptions to use New-Popup function instead of separate code
  6. added logging for Power Plan prompt
  7. Option 72 added to REMOVE the Windows Store app from the taskbar (2012 R2)
  8. Script now checks to see if UAC is enabled when choosing option 5 (OWAS). If it’s enabled, you’re prompted to disable it (which requires a reboot). The script has issues attempting to mount the ISO files for OWAS when UAC is enabled. Added a bunch of error handling for option 5 as well. Can’t believe I didn’t do that previously.
  9. updated option 85 (SDN) to 2.1. See http://www.microsoft.com/en-us/download/details.aspx?id=44274 for more info
  10. Added the Lync wireshark plugin to option 30 (Wireshark). It’s really only recommended on edge servers. See http://www.mylynclab.com/2014/05/microsoft-lync-wireshark-plugin.html for more info
  11. Option 99 (exit script) now checks if a reboot is required, and prompts if it is

v2.9 – 09-22-2014

  1. added some minor error handling code
  2. Changed logging for SQL instances to show if it exists before it says its installing
  3. fixed a bug where .Net Framework 4.52 could still be installing when a reboot prompt is displayed, potentially causing the machine to reboot mid-install
  4. Script now flags for ANY Lync server installation where the server is set for auto updates. Really, folks – DON’T AUTO UPDATE!
  5. Updated SilverLight download to v5.1.30514.00
  6. Updated Wireshark download to v1.12.10
  7. Updated Microsoft Message Analyzer to v1.1 (see http://blogs.technet.com/b/messageanalyzer/archive/2014/09/15/announcing-the-message-analyzer-1-1-release.aspx)
  8. Added Option 16 – SCOM Watcher Node prerequisites
  9. Updated Option 25 – now also sets OWAS service to restart (if run on an OWAS server, of course)
  10. Added Option 85 – Lync Server SDN API 2.0 [Download only] added, and includes the API installer, the management utility, the docs, and the .chm file.
  11. Script now checks for non-root certificates in the root certificate store & warns if any are found.
  12. Fixed an issue with option 14 (scheduled task) where an error would display if you chose that option and the scheduled task already existed.

v2.8 – 08-13-2014

  1. Created Desktop Shortcuts Menu (option 40) and moved all of the desktop shortcut options to it.
  2. Created Taskbar Shortcuts Menu (option 60) and moved all of the taskbar shortcut options to it.
  3. Created Download Menu (option 80) and moved all of the [DOWNLOAD ONLY] options to it.
  4. Added the following options when calling the script:
    1. IncludeSSMS (automatically installs SQL Server Management Studio for those options that normally prompt for it)
    2. IncludeTelnet (automatically installs telnet client for those options that normally prompt for it)
    3. IncludeFW (automatically adds firewalls exceptions for those options that normally prompt for it)
    4. IncludeStandard (automatically installs the extra SQL instance needed on standard edition front ends)
    5. IncludeHighPower (automatically configures the high power system power setting for those options that normally prompt for it)
  5. Changed some of the logging so less is shown on the console, especially around file downloads. That info is still logged to the log file, though.
  6. Fixed a quirk where an error would get logged during the installation of SQL Server Management Studio if the TargetFolder parameter was specified, and it’s value was on another drive. The installation was, however, fine. Thanks to Simon for reporting that.
  7. Replaced original netsh code for creating firewall rules with native New-NetFirewallRule cmdlet
  8. The usual code optimization, logging tweaks, etc.
  9. Updated SQL Express 2012 from SP1 to SP2 for the roles that install SQL instances (Front End, Edge, Persistent Chat, Director, etc.)
  10. Fixed a problem with option 20 (SQL Mgmt Studio) due to a typo. Thanks to Japheth for pointing it out.
  11. Added .Net Framework 4.5.2 when installing OWAS (option 5) on Server 2012 R2 to deal with the issue mentioned here: http://blogs.technet.com/b/office_web_apps_server_2013_support_blog/archive/2014/07/24/office-web-apps-2013-on-windows-server-2012-r2.aspx
  12. Added some logging around AV solution installed
  13. Updated Wireshark to 1.12.0

v2.7 – 06-26-2014

  1. Implemented a fix for a super minor display anomaly when the script starts to reboot, but the next line is executed before the script stops. It didn’t hurt anything the way it was, but it bugged my OCD.
  2. Fixed logging error during OWAS install (option 5)
  3. Fixed several issues that occur when attempting to disable auto updates during OWAS install (option 5)
  4. Tweaked prompt when a file download fails
  5. Added code to automatically restart script with proper option after a reboot during prereq installs. This still requires you to manually login. But once you do, the script will kick off again.
  6. Added a check around the firewall rules to verify that the service is running first. Thanks to Simon for that.
  7. Upgraded Wireshark to 1.10.8 – looking for an easier way to find the latest version dynamically. I have a method that works now (not yet part of the script), but isn’t bullet proof yet.
  8. Upgraded Silverlight to 5.1.30214.0 – looking for an easier way to find the latest version dynamically. Thanks to Simon who helped track down an issue with installations that already had a newer version (albeit 32 bit) installed.
  9. TONS of updates to logging, including more info, updated info, and corrected info.
  10. Added option (option 38) to create the Lync file share on the local computer.

v2.6 – 06-10-2014

  1. Tweaked code that creates desktop shortcuts to be a little more flexible.
  2. Removed the code that copied the tmx file for the debugging tools as the January 2014 update apparently fixed that issue. Thanks to Adam Ball for the info.
  3. Updated Wireshark code for version 1.10.7
  4. Changed link for custom portquery config file to a file on my blog site since OneDrive URLs are difficult to deal with programmatically. Thanks to flinchböt for allowing me to do that.
  5. Fixed an issue with the code signing detection/logging
  6. Various other tweaks that no one other than myself will ever notice.

v2.5 – 05-24-2014

  1. fixed two typos in the OWAS language pack prompt. Thanks to Mitch for pointing it out.
  2. option 5 – tweaked the prompt for disabling automatic windows updates
  3. option 33 – set power plan to “High Performance” added. Also added as a prompted option for options 1-6
  4. recommended windows updates config is now logged. I may throw an alert in the future if this is false

v2.4 – 04-29-2014

  1. Added some more logging
  2. Added OWAS SP1 (the re-released version)
  3. fixed spelling error
  4. added .Net 3.5 as a prereq for SQL Server Management Studio. Normally not an issue in full server installs, but in some management server scenarios, it’s not always installed beforehand. This should resolve that.
  5. tweaked menu code to not display menu after using option 98
  6. Added prompt to install OWAS English language pack, although it does require that the user manually accept the EULA.
  7. added reboot prompt when showing $RebootWarning
  8. prompt to disable Automatic Updates for OWAS (See “Planning updates for Office Web Apps Server – http://technet.microsoft.com/en-us/library/jj219435.aspx)
  9. firewall status is now logged – I’ll be adding an alert if the FW is disabled in a future version
  10. fixed the wait loop for Wireshark. It now correctly waits until both Wireshark and WinPcap installers are done

v2.3 – 02-08-2014

  1. replaced write-host with write-output where possible. See http://www.jsnover.com/blog/2013/12/07/write-host-considered-harmful/
  2. cleaned up param blocks per Jeff Hicks
  3. option 12: tweaked to check for .net 4.5
  4. added logging on some options
  5. lots of minor code cleanup/optimization
  6. comment help optimized per suggestions at http://www.lazywinadmin.com/2014/01/powershell-tip-adding-help-in-param.html
  7. swaped in updated New-PsUpdateHelpScheduledTask function
  8. swaped in updated Set-ModuleStatus function
  9. swaped in updated Write-Log function
  10. swaped in updated Test-ScriptUpdates function

v2.2 – 01-20-2014

  1. added preliminary code to install Sql Native Client when prompted. It’s required for topology builder if you’re going to merge OCS topologies. Most common scenario is management servers that don’t have a rtclocal instance. Look for an option soon.
  2. added preliminary PowerShell firewall rules option & firewall notification option. Look for an option soon.
  3. option 30: updated link to new version (10.5) of WireShark. Also used an alternate path that should continue to work as new versions are released. Thanks to Mitch.
  4. added prompt to exit script if a file download fails. Basically just better error handling.
  5. Cleanup around the InitialMenuOption feature to ensure we don’t see some weirdness.
  6. option 31 added: Enable Photo URL (See http://www.lynclog.com/2013/11/lync-2013-client-and-and-pictures-from.html for description)
  7. option 32 added: fix font for Control Panel (See https://www.ucunleashed.com/2448)
  8. cleanup of the Test-IsServerCore function

v2.1 – 12-17-2013

  1. verify server is not core. Thanks to John.
  2. better error detection when Add-WindowsFeature fails
  3. strip trailing slash on $Win2012Source
  4. option 1: Added Windows-Identity-Foundation to the Windows Features required. Thanks to Mitch.
  5. option 3: fixed missing log message indent value when Win2012Source isn’t valid. Thanks to Patrick @ MCS.

v2.0 – 11-26-2013

  1. option 3: Added prompt and prereqs for Lync Room System Admin Portal
  2. option 3: Added code to create firewall exceptions for Get-CsConnections.ps1 when installing RTCLocal SQL instance.
  3. option 5: changes to features installed for Office Web Apps servers based on feedback
  4. option 5: added WAC update from KB2837634
  5. option 18: changed to the new Microsoft Message Analyzer (from NetMon 3.4)
  6. option 30: Wireshark – downloads file and starts installation. Automated installation isn’t really possible.
  7. Added logging of more information
  8. Removed some aliases to conform with best practices
  9. option 17: updated link to download file for portqry XML file. The author of the file uses SkyDrive for the download, so the URL changes every time he posts an update.

v1.9 – 10-28-2013

  1. Added support for Windows Server 2012 R2
  2. Fixed Test-IsProxyEnabled that could throw an error if a proxy has NEVER been configured on a server
  3. Test-IsSigned comment help updated
  4. Test-ScriptUpdates comment help updated
  5. Corrected a typo
  6. Reworded some error messages and warnings

v1.8 – 08-01-2013

  1. Tweaked regex for $SQLPath to support paths with spaces (thanks to David Wyatt)
  2. Removed some instances of text being sent to the console during file downloads to make things a little cleaner. Info is still sent to the log file, though. Write-Log tweaked to verify event log actually exists if writing to it
  3. Added code to restart script in an elevated session if the current session isn’t elevated (previously the script just throw an error and exited)
  4. Option 5 updated to include Net-Http-Activation per http://michaelvh.wordpress.com/2013/07/29/the-curious-remedy-for-the-not-so-curious-health-problems-of-the-office-web-apps-server/
  5. Option 19 fixed typo that caused an error
  6. Option 24 updated to verify Media Foundation feature is installed
  7. Option 28 Added download of Lync-Skype Connectivity Provisioning Guide
  8. Option 30 started – configure push notifications

v1.7 – 05-31-2013

  1. option added (option 25) for Set recovery of Lync services to restart – this comes from my post at https://www.ucunleashed.com/662
  2. option added (option 26) Lync Server 2013 Watcher Node [DOWNLOAD ONLY]
  3. option added (option 27) Lync Server 2013 Management Pack & Documentation [DOWNLOAD ONLY]
  4. option added (option 28) Enable Skype Federation
  5. option added (option 97) to visit script’s website
  6. intro code for script update check – right now if the script’s file creationdate is more than 90 days old, you’ll get a prompt asking if you want to check for an update.
  7. auto detection of first CD-ROM drive for default $Win2012Source (previously default to d:)
  8. updated Test-IsRebootRequired function to check more registry keys to cover Windows Update reboot required as well; added code to see if SCCM 2012 client requires a reboot
  9. various logging bug fixes as well as logging more info to the file – eventually this will result in less being sent to the console screen.
  10. switched here-strings to double quotes to work around a random formatting issue in UltraEdit, and to streamline using variables in them
  11. initial code for proxy detection and credentials (per @TomArbuthnot) – it hasn’t been extensively tested yet.
  12. better error detection/suppression/logging in New-FileDownload and New-ProgramInstallation functions
  13. fixed the documentation help download (option 13) code to always download the file – even if it already exists locally (to account for updated file)
  14. additional work on the sysinternals option (not yet availabled). Access to \\live.sysinternals.com seems to be pretty laggy. Trying to work around that.
  15. added some validation around the $TargetFolder parameter. I really hate dealing with regex, but do appreciate what they can do.
  16. some optimization of the New-SQLInstance and New-SQLMgmtStudio functions
  17. fixed some weird issue with the portqryui custom xml file download (option 17). I think it’s SkyDrive related. Might have to come up with an alternative method.
  18. fixed an issue with the Write-Log function which caused split log files if the script changed directories. Now set the logs to be in $TargetFolder\logs
  19. optimized Test-IsAdmin function – it’s now 1/2 the lines of code
  20. minor tweaks to Add-PinnedAppToTaskbar and Add-PinnedAppToStartMenu functions to utilize ParameterSetName
  21. minor tweaks to New-FileDownload function to utilize Split-Path over a longer, more complex method
  22. minor tweaks to convert some Where-Object lines to the PowerShell v3 method

v1.6 – 05-24-2013

  1. “Download latest Lync Server 2013 Cumulative Update” option added
  2. “Custom PortQryUI” option added per (http://flinchbot.wordpress.com/2013/05/10/portqueryui-config-xml-file-for-lync/)
  3. “Windows Update tile” option added
  4. combined tile functions
  5. combined SQL instance functions
  6. additional logging
  7. “Microsoft Unified Communications Managed API 4.0, Runtime (UCMA 4.0) installation” option added
  8. various code optimization

v1.5 – 05-10-2013

  1. -NoSQL option for those who insist on letting the Lync installer install the SQL instances. This means that you’ll have to update those instances.
  2. Better reboot handling for OS prerequisites. This should resolve the problem with some people seeing a lot of errors until after a reboot.
  3. Better error messages for some errors. Can’t ignore these!
  4. Updated Debugger Tools installation as mention in Jonathan’s post  (thanks to Kevin)
  5. Office Web App server KB2810007 update (thanks to Randy)
  6. Rename to Set-Cs2013Features.ps1
  7. Added custom Scheduler simple URL. This automates adding a custom simple URL for the scheduler app
  8. Changed Standard edition server config to a prompt during regular FE install (removed -standard parameter)
  9. changed SQL input parameters to a single $SQLPath, with regex validation and default value. Just specify the -SQLPath [path] instead of the -SQLDir and -SQLDrive parameters.
  10. intro code for full logging functionality. Script will now create a log file that can be used for troubleshooting. Just basic stuff in there for now. I’ll add more later.
  11. updated comment based help info with additional parameter and example information
  12. fixed Lync Help option that was generating errors when trying to create taskbar shortcuts

v1.4 – 05-03-2013

  1. Added detection check for OS reboot (due to previous unfinished installation), and halt script if it’s detected. Otherwise, some Add-WindowsFeatures commands could fail.
  2. Added telnet client option, and prompt for it during most roles.
  3. Added SQL Management Studio option per Chris Elliot’s suggestion and example, and prompt during any role that has SQL instances
  4. Added Lync documentation help option
  5. Added NetMon 3.4 option
  6. Added Windows Update option
  7. Added option to define installation path for SQL instances
  8. Tweaked Office Web App OS prereqs to include InkAndHandwritingServices per Viggo Stomsvik’s comment
  9. Moved Add-WindowsFeature commands to top of order for all roles to avoid a potential error when installing SQL Express
  10. Added better check to determine if installing OS prereqs requires a reboot, and flagging accordingly
  11. Cleaned up code for scheduler custom simple URL
  12. Added preliminary code for SysInternals Suite install
  13. Moved SQL instance installs to dedicated functions and optimized
  14. Switched from ANSI to Unicode so that I could do cleaner looking error displays
  15. Switched SQL Express and SQL Management Studio installs from /quiet to /quietsimple so that there is some on-screen indication that the installs are progressing. This has no effect on the installations themselves, but it’s better than the script not appearing to do anything for 10 minutes at a time.

v1.3 – 04-29-2013

  1. Added Office Web App option. Includes all prerequisites, installing the roll, and the recent update for it
  2. Added the Director role option. Includes all OS prerequisites and the updated SQL Express instances
  3. Code optimization
  4. Added updated SQL Express instances to Edge option
  5. Signed script

v1.2 – 04-01-2013

  1. Edge server functions updated to include SQL Express SP1 (just like the FE code)
  2. Added Stress and Performance Tool option
  3. Minor code optimization
  4. Some code for future features

v1.1 – 02-28-2013

  1. Server roles added:
    1. Edge
    2. Persistent Chat
  2. Tools and utilities added:
    1. Resource Kit
    2. Persistent Chat Resource Kit
  3. Features added
    1. PowerShell Update-Help scheduled task
  4. Bug fixes and tweaks
    1. check for $Win2012Source\sources\sxs
    2. Moved tiles to the All Users profile

v1.0 – 02-08-2013

  1. Initial version
  1. Jeff Colvin
    August 7th, 2013 at 08:52 | #1

    Hi Pat, need to apply the regex fix to the file storage path, it balks at spaced values. Thanks for sharing! Jeffcsp

    • Pat Richard
      August 7th, 2013 at 08:55 | #2

      Jeff – that is the plan, but it takes a little more than that because then I have to make sure all functions that reference that path support spaces. And my quick testing showed they didn’t. So, more work to do!

  2. October 29th, 2014 at 14:47 | #3

    Just downloaded 3.1, when I run it on a Windows 2012 R2 server, there is no Option 34 for the LRS admin pre-req install.

    • Pat Richard
      October 29th, 2014 at 15:14 | #4

      My bad. The option is available, but it’s not listed in the menu.

  3. tomarbuthnot
    January 7th, 2015 at 09:17 | #5

    Amazing work as always, thanks or the mention

  4. February 3rd, 2015 at 03:44 | #6

    Hi Pat. There is a little bug in Line 2603 and 2604 (Ver. 3.4). Should be “Write-Log -Level Warn” instead of “Write-Log -Level Warning”

    • Pat Richard
      February 3rd, 2015 at 08:50 | #7

      This is fixed in 3.6 which will likely be out next week. Thanks for the heads up!

  5. February 3rd, 2015 at 06:50 | #8

    Again me: If I choose menu option 90|3 I get an error if Lync isn’t already installed “Stop-CSWindowsService ist not recogni….”

    • Pat Richard
      February 3rd, 2015 at 08:51 | #9

      Is Lync already installed on the machine you’re running it on?

      • Pat Richard
        February 3rd, 2015 at 11:02 | #10

        I’ve implemented a module check for this in v3.6. Thanks for the info.

      • February 4th, 2015 at 11:53 | #11

        No, not installed…

        • Pat Richard
          February 4th, 2015 at 11:55 | #12

          That’s why. It’s trying to cycle the Lync services. As mentioned above, I’ve got a fix in the new build.

  1. March 18th, 2013 at 17:32 | #1
  2. June 10th, 2014 at 11:33 | #2