Weekend Scripter: Automating the Preparation of Lync Server 2013—Part 2

Weekend Scripter: Automating the Preparation of Lync Server 2013—Part 2

  • Comments 6
  • Likes

Summary: Automate the installation of SQL Server Express and complete the installation of Lync Server 2013.

Honorary Scripting Guy, Sean Kearney, is here. Today, we're getting a little nerdy by automating the rest of our Lync server...on a Sunday.

Yesterday, we finished with a Windows Server 2012 R2 box with all the features and the Visual C++ 2012 x64 Minimum Runtime package installed. We also have our schema for Active Directory extended.

Note  This is the second post in a series about Lync. Before you continue, you might enjoy reading Automating the Preparation of Lync Server 2013—Part 1.

Now we're going to dive in to the fun stuff. We'll spin up SQL Server Express in an automated mode, tuning the firewall, and more!

First, we need to get a SQL Server instance running. The software is sitting in the Lync 2013 media under the Setup\amd64 folder, and it is not difficult to run. If we let Lync run, it can do it for us.

But sometimes it's fun to figure it out for ourselves.

So normally, to install SQL Server 2012 Express, we would double-click SQLEXPR_x64.exe, and get a lovely little display like this:

Image of menu

If this is your first time installing SQL Server Express, it might appear a little daunting. Clicking on "New SQL Server stand-alone installation or add features to an existing installation" is your starting point.

But if you're curious, if you go to a CMD.EXE of the Windows PowerShell prompt and launch the application with a /?, you'll get to see the hidden keys to the chest.

SQLEXPR_x64.exe /?

Image of command output

With a little poking about, I (and some online BINGing) I found the combination of parameters to get SQL Server Express to install in the manner I wanted:

SQLEXPR_x64.EXE /ACTION=Install /QS=true /IACCEPTSQLSERVERLICENSETERMS=true /UPDATEENABLED=false /INSTANCENAME=SQLEXPRESS /FEATURES=SQL,BC

This will install a basic SQL Server Express instance with a name of SQLEXPRESS and all the basic features that are supplied in SQL Server Express.

If you'd like, you can also have Lync set up the firewall settings. But here's the cool part in Lync: read the windows! I noted that in many cases, Lync would actually display the console or the Windows PowerShell cmdlets that it was running. In this manner, you can prep the server before Lync gets to it.

If you'd like to have the firewall settings pre-enabled, here are some lines I scooped from the very log files you can use:

netsh advfirewall firewall add rule name="SQL RTC Access" dir=in action=allow program="c:\Program Files\Microsoft SQL Server\MSSQL11.RTC\MSSQL\Binn\sqlservr.exe" enable=yes profile=any

netsh advfirewall firewall add rule name="SQL Browser" dir=in action=allow protocol=UDP localport=1434

This will put in the much wanted firewall exceptions for SQL Server! (Tap, tap...how I wish SQL Server would do this for me. But of course, not every SQL Server instance needs to be network-enabled by default.)

More prep work?

In Windows Server 2012 R2, we can access the DNS records directly from Windows PowerShell. So I could actually prepare a script to populate the internal DNS server records required for Lync by using the ADD-DnsServerResourceRecord cmdlet.

Add-DnsServerResourceRecord –zone Contoso.local –Ipv4address 192.168.1.100 –name sip –A –computername EOT-DC

Add-DnsServerResourceRecord –zone Contoso.local –Ipv4address 192.168.1.100 –name meet –A –computername EOT-DC

Add-DnsServerResourceRecord –zone Contoso.local –name _sip –domainname sip.contoso.local –weight 0 –priority 0 –port 5060 –computername EOT-DC

…and of course the list goes on, but you get the idea. You could even prepopulate the records. Now if you were a really creative scripter, you could grab the topology XML file, parse its contents, and grab the names for DNS!

What's interesting to me as I poke about the folder structure, is how much of Lync is simply MSI files being called up in sequence. If you were to poke about under the hood of Setup\amd64, I'll bet...

But with the bulk of our requirements pre-installed, we can pop in our Lync media, launch our topolology creator and soon get to publishing the Lync infrastructure online!

Stop by tomorrow and we'll dig into Lync and it's Windows PowerShell cmdlets!

I invite you to follow the Scripting Guys on Twitter and Facebook. If you have any questions, send an email to the Scripting Guys at scripter@microsoft.com, or post your questions on the Official Scripting Guys Forum. See you tomorrow. Until then just remember, the Power of Shell is in you.

Sean Kearney, Windows PowerShell MVP and Honorary Scripting Guy 

Your comment has been posted.   Close
Thank you, your comment requires moderation so it may take a while to appear.   Close
Leave a Comment
  • Thanks for the information,
    these are perfect for creating an Extender-File for the Powershell Deployment Toolkit ;)

  • Grabbing the topology XML file to create DNS records probably won't work. For one, it doesn't list IP addresses of Hardware Load Balancer VIPs.

  • Don't forget, there are multiple instances of SQL Express required, and the requirements are different for Standard Edition servers than they are for Enterprise Edition servers. There is no requirement for an instance called "SQLEXPRESS", as shown above. Additionally, the version of SQL Express on the media is outdated. Best to download the latest version and save yourself a LONG upgrade when you run Windows Updates later.

  • The DNS record shown above for _sip should point to port 5061, not 5060.

  • @Pat

    True.... The parsing of the XML might be good for the names but definitely not the IP addresses. I was just thinking of "What information is already in the Topology file I might be able to scoop"

    On the SQL part, true and oh so true. Of course in a Corporate setup, you might have your own Enterprise SQL scenario with failover so you might not be running Express :)

    ...and a victim of the evil typo! Doh! Thanks for catching!

    @Kamil

    Glad to have inspired !

    Sean

  • thank you