Thursday, September 05, 2013

Automating the SQL 2012 Install for FIM

Installing SQL Server can take quite a bit of time manually, and each time you do it the setup program flaunts the handy answer file in your face, almost taunting you to automate it the next time.  Well I took the challenge and have been installing SQL with the answer file lately, using PowerShell of course.

The challenge I ran across today was installing SQL into a VM that did not have connectivity to the Internet.  By default the answer file turns on updates for SQL, and when I ran the setup at home (disconnected) it failed.

A little looking around in the answer file found the setting, so I just turned the default of ‘true’ into ‘false’ and problem solved.  The documentation for it was pretty useful too, for those RTFM’ers here is the help I found for that feature:

Product Updates in SQL Server 2012 Installation

Most importantly, here is the script snippet (below).  The script is using a VM, and the commands are executed from the VM host which is why I am using Invoke-Command to issue commands into the VM.  This could easily be grafted to just run inside the VM.

The script uses a large string variable to contain the SQL answer file.  That contains the answer file contents generated by the SQL Setup program when you run it manually (I didn’t generate it by hand, I’m not that lucky).  The big string is saved to a file inside the VM, then Setup.exe just consumes that file.

 

###

### The Admin credential for the VM

###

$adminDomCredential = New-Object System.Management.Automation.PSCredential "hoofhearted\administrator",(ConvertTo-SecureString 'icemelted' -AsPlainText -Force)

 

###

### Mount the SQL DVD ISO

###

Set-VMDvdDrive -VMName $vmName -Path C:\ISO\en_sql_server_2012_enterprise_edition_with_sp1_x64_dvd_1227976.iso

 

###

### Install SQL

###

$sqlSetupScript = @'

;SQL Server 2012 Configuration File

[OPTIONS]

; Specifies a Setup work flow, like INSTALL, UNINSTALL, or UPGRADE. This is a required parameter.

ACTION="Install"

; Detailed help for command line argument ENU has not been defined yet.

ENU="True"

; Parameter that controls the user interface behavior. Valid values are Normal for the full UI,AutoAdvance for a simplied UI, and EnableUIOnServerCore for bypassing Server Core setup GUI block.

;UIMODE="Normal"

; Setup will not display any user interface.

QUIET="True"

IAcceptSQLServerLicenseTerms="True"

; Setup will display progress only, without any user interaction.

;QUIETSIMPLE="True"

; Specify whether SQL Server Setup should discover and include product updates. The valid values are True and False or 1 and 0. By default SQL Server Setup will include updates that are found.

UpdateEnabled="False"

; Specifies features to install, uninstall, or upgrade. The list of top-level features include SQL, AS, RS, IS, MDS, and Tools. The SQL feature will install the Database Engine, Replication, Full-Text, and Data Quality Services (DQS) server. The Tools feature will install Management Tools, Books online components, SQL Server Data Tools, and other shared components.

FEATURES=SQLENGINE,FULLTEXT,SSMS,ADV_SSMS

; Specify the location where SQL Server Setup will obtain product updates. The valid values are "MU" to search Microsoft Update, a valid folder path, a relative path such as .\MyUpdates or a UNC share. By default SQL Server Setup will search Microsoft Update or a Windows Update service through the Window Server Update Services.

;UpdateSource="MU"

; Displays the command line parameters usage

HELP="False"

; Specifies that the detailed Setup log should be piped to the console.

INDICATEPROGRESS="False"

; Specifies that Setup should install into WOW64. This command line argument is not supported on an IA64 or a 32-bit system.

X86="False"

; Specify the root installation directory for shared components.  This directory remains unchanged after shared components are already installed.

INSTALLSHAREDDIR="C:\Program Files\Microsoft SQL Server"

; Specify the root installation directory for the WOW64 shared components.  This directory remains unchanged after WOW64 shared components are already installed.

INSTALLSHAREDWOWDIR="C:\Program Files (x86)\Microsoft SQL Server"

; Specify a default or named instance. MSSQLSERVER is the default instance for non-Express editions and SQLExpress for Express editions. This parameter is required when installing the SQL Server Database Engine (SQL), Analysis Services (AS), or Reporting Services (RS).

INSTANCENAME="MSSQLSERVER"

; Specify the Instance ID for the SQL Server features you have specified. SQL Server directory structure, registry structure, and service names will incorporate the instance ID of the SQL Server instance.

INSTANCEID="MSSQLSERVER"

; Specify that SQL Server feature usage data can be collected and sent to Microsoft. Specify 1 or True to enable and 0 or False to disable this feature.

SQMREPORTING="False"

; Specify if errors can be reported to Microsoft to improve future SQL Server releases. Specify 1 or True to enable and 0 or False to disable this feature.

ERRORREPORTING="False"

; Specify the installation directory.

INSTANCEDIR="C:\Program Files\Microsoft SQL Server"

; Agent account name

AGTSVCACCOUNT="NT Service\SQLSERVERAGENT"

; Auto-start service after installation. 

AGTSVCSTARTUPTYPE="Manual"

; CM brick TCP communication port

COMMFABRICPORT="0"

; How matrix will use private networks

COMMFABRICNETWORKLEVEL="0"

; How inter brick communication will be protected

COMMFABRICENCRYPTION="0"

; TCP port used by the CM brick

MATRIXCMBRICKCOMMPORT="0"

; Startup type for the SQL Server service.

SQLSVCSTARTUPTYPE="Automatic"

; Level to enable FILESTREAM feature at (0, 1, 2 or 3).

FILESTREAMLEVEL="0"

; Set to "1" to enable RANU for SQL Server Express.

ENABLERANU="False"

; Specifies a Windows collation or an SQL collation to use for the Database Engine.

SQLCOLLATION="SQL_Latin1_General_CP1_CI_AS"

; Account for SQL Server service: Domain\User or system account.

SQLSVCACCOUNT="NT Service\MSSQLSERVER"

; Windows account(s) to provision as SQL Server system administrators.

SQLSYSADMINACCOUNTS="{0}"

; Provision current user as a Database Engine system administrator for SQL Server 2012 Express.

ADDCURRENTUSERASSQLADMIN="False"

; Specify 0 to disable or 1 to enable the TCP/IP protocol.

TCPENABLED="1"

; Specify 0 to disable or 1 to enable the Named Pipes protocol.

NPENABLED="0"

; Startup type for Browser Service.

BROWSERSVCSTARTUPTYPE="Disabled"

; Add description of input argument FTSVCACCOUNT

FTSVCACCOUNT="NT Service\MSSQLFDLauncher"

'@ -F $adminDomCredential.UserName

Invoke-Command -ComputerName hoofhearted -Credential $adminDomCredential -ScriptBlock {

  $using:sqlSetupScript | Out-File -FilePath c:\SqlSetupScript.txt 

  & d:\Setup.exe /ConfigurationFile=c:\SqlSetupScript.txt

}

 

No comments: