-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathInstall-SqlExpress.ps1
90 lines (74 loc) · 2.76 KB
/
Install-SqlExpress.ps1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
<#
.SYNOPSIS
download and install SQLExpress2017 using current directory
.DESCRIPTION
Call by Initialize-BuildVM.ps1
.PARAMETER LogFile
File for logging
.PARAMETER SvcPwd
Password for the SQL Server Service
.PARAMETER SaPwd
Password for the sa SQL Server user
.PARAMETER InstanceName
SQL Instance name, defaults to sqlexpress2017
#>
param(
[Parameter(Mandatory)]
[string] $LogFile,
[Parameter(Mandatory)]
[string] $SvcPwd,
[Parameter(Mandatory)]
[string] $SaPwd,
[Parameter(Mandatory)]
[string] $InstanceName,
[Parameter(Mandatory)]
[string] $AdminUserDomain
)
Set-StrictMode -Version Latest
$ErrorActionPreference = "Stop"
$SQLSVCACCOUNT = "NT Service\MSSQL`$$($InstanceName)"
if ($InstanceName -eq "MSSQLSERVER")
{
$SQLSVCACCOUNT = "NT Service\MSSQLSERVER"
}
Logit "Install-SqlExpress started"
Logit -indent "InstanceName = $InstanceName"
Logit -indent "AdminUserDomain = $AdminUserDomain"
Logit -indent "SQLSVCACCOUNT = $SQLSVCACCOUNT"
# get the downloader/installer, can't use it to install, just download
$downloader = "SQLServer2017-SSEI-Expr.exe"
Logit -indent "Downloading $downloader"
Invoke-WebRequest -Uri "https://download.microsoft.com/download/5/E/9/5E9B18CC-8FD5-467E-B5BF-BADE39C51F73/$downloader" -OutFile "$PWD\$downloader"
Logit -indent "Running $downloader"
& ".\$downloader" /Action=Download /MediaPath=$PWD\sql /MediaType=Core /Q /HP 2>&1 >> $LogFile | out-null
Logit -indent "$downloader exited with $LASTEXITCODE" -lastexit $LASTEXITCODE
# installer is compressed, need to extract the files to get setup.exe
$installer = Get-Item "$PWD\sql\*.exe"
Logit -indent "Installer is $installer"
if ( !$installer )
{
throw "Can't find installer in $PWD\sql"
}
Logit -indent "Running $installer"
& $installer /x:$PWD\sql\setup /q 2>&1 >> $LogFile | out-null
Logit -indent "$installer exited with $LASTEXITCODE" -lastexit $LASTEXITCODE
# finally, run setup!
$setup = Get-Item "$PWD\sql\setup\setup.exe"
Logit -indent "Setup is $setup"
if ( !$setup )
{
throw "Can't find setup in $PWD\sql\setup"
}
Logit -indent "User\Domain is '$env:USERDOMAIN\$env:USERNAME'"
Logit -indent "Running $setup for instance $InstanceName"
<#
This ends up failing since user it ends up being the following since running as NETWORK SERVICE
/SQLSYSADMINACCOUNTS="$env:USERDOMAIN\$env:USERNAME" `
WORKGROUP\BootcampBuild$
#>
& $setup /q /ACTION=Install /FEATURES=SQL /INSTANCENAME=$InstanceName /SQLSVCACCOUNT="$SQLSVCACCOUNT" `
/SQLSVCPASSWORD=$SvcPwd /ADDCURRENTUSERASSQLADMIN `
/SQLSYSADMINACCOUNTS=$AdminUserDomain `
/AGTSVCACCOUNT="NT AUTHORITY\Network Service" /SQLSVCINSTANTFILEINIT="True" /IACCEPTSQLSERVERLICENSETERMS `
/SECURITYMODE=SQL /SAPWD=$SaPwd 2>&1 >> $LogFile | out-null
Logit -indent "$setup exited with $LASTEXITCODE" -lastexit $LASTEXITCODE