162 lines
4.5 KiB
PowerShell
162 lines
4.5 KiB
PowerShell
Import-Module '.\OptionParser.psm1'
|
|
Import-Module '.\SQLServerOptionParsers.psm1'
|
|
|
|
function New-SQLServer {
|
|
<#
|
|
.SYNOPSIS
|
|
Installs new MS SQL Server instance
|
|
|
|
.DESCRIPTION
|
|
Installs new MS SQL Server instance in unattended mode.
|
|
|
|
.PARAMETER SetupRoot
|
|
MS SQL Server installation files root directory. Normally it is just DVD drive name.
|
|
#>
|
|
|
|
param(
|
|
[parameter(Mandatory = $true)]
|
|
[string]$SetupRoot
|
|
)
|
|
|
|
$SetupDir = Get-Item $SetupRoot
|
|
$SetupExe = $SetupDir.GetFiles("setup.exe")[0]
|
|
|
|
$parser = New-OptionParserInstall
|
|
$ExitCode = $parser.ExecuteBinary($SetupExe.FullName, @{"QS" = $null; "FEATURES" = @("SQLEngine", "Conn", "SSMS", "ADV_SSMS")})
|
|
|
|
if ($ExitCode -ne 0) {
|
|
throw "Installation executable exited with code $("{0:X8}" -f $ExitCode)"
|
|
}
|
|
}
|
|
|
|
function Remove-SQLServer {
|
|
<#
|
|
.SYNOPSIS
|
|
Uninstalls MS SQL Server instance installed with New-SQLServer cmdlet
|
|
|
|
.DESCRIPTION
|
|
Uninstalls MS SQL Server instance installed with New-SQLServer cmdlet in unattended mode
|
|
|
|
.PARAMETER SetupRoot
|
|
MS SQL Server installation files root directory. Normally it is just DVD drive name.
|
|
#>
|
|
|
|
param(
|
|
[parameter(Mandatory = $true)]
|
|
[string]$SetupRoot
|
|
)
|
|
|
|
$SetupDir = Get-Item $SetupRoot
|
|
$SetupExe = $SetupDir.GetFiles("setup.exe")[0]
|
|
|
|
$parser = New-OptionParserUninstall
|
|
$ExitCode = $parser.ExecuteBinary($SetupExe.FullName, @{"Q" = $null; "FEATURES" = @("SQLEngine", "Conn", "SSMS", "ADV_SSMS")})
|
|
|
|
if ($ExitCode -ne 0) {
|
|
throw "Installation executable exited with code $("{0:X8}" -f $ExitCode)"
|
|
}
|
|
}
|
|
|
|
function Invoke-SQLText {
|
|
<#
|
|
.SYNOPSIS
|
|
Invokes SQL text
|
|
|
|
.DESCRIPTION
|
|
Invokes SQL text
|
|
|
|
.PARAMETER SQL
|
|
SQL Text
|
|
|
|
.PARAMETER User
|
|
SQL Server user name
|
|
|
|
.PARAMETER SQL
|
|
SQL Server user password
|
|
#>
|
|
param(
|
|
[parameter(Mandatory = $true)]
|
|
[string]$SQL,
|
|
[string]$User = $null,
|
|
[string]$Password = $null
|
|
)
|
|
|
|
$Binary = Get-Command "sqlcmd.exe"
|
|
|
|
$tempFile = [IO.Path]::GetTempFileName()
|
|
$tempFile = Get-Item $tempFile
|
|
Set-Content -Path $tempFile -Value $SQL
|
|
|
|
$CommandLine = @('-i', "`"$($tempFile.FullName)`"")
|
|
if (($User -ne $null) -and ($User -ne '')) {
|
|
$CommandLine = $CommandLine + '-U'
|
|
$CommandLine = $CommandLine + $User
|
|
$CommandLine = $CommandLine + '-P'
|
|
$CommandLine = $CommandLine + $Password
|
|
}
|
|
|
|
Write-Host "Executing: `"$($Binary.Path)`" $($CommandLine -join ' ')"
|
|
$process = [System.Diagnostics.Process]::Start($Binary, $CommandLine)
|
|
$process.WaitForExit()
|
|
$process.Refresh()
|
|
|
|
$ExitCode = $process.ExitCode
|
|
if ($ExitCode -ne 0) {
|
|
throw "SQLCMD.EXE returned with exit code $ExitCode"
|
|
}
|
|
|
|
Remove-Item $tempFile
|
|
}
|
|
|
|
function Initialize-MirroringEndpoint {
|
|
<#
|
|
.SYNOPSIS
|
|
Prepares SQL Server for database mirroring
|
|
|
|
.DESCRIPTION
|
|
ToDo: Describe
|
|
#>
|
|
|
|
param(
|
|
[parameter(Mandatory = $true)]
|
|
[String]$EncryptionPassword,
|
|
[parameter(Mandatory = $true)]
|
|
[String]$WorkDir
|
|
)
|
|
|
|
$Folder = Get-Item $WorkDir
|
|
|
|
$H = $Env:COMPUTERNAME -replace '[^A-Za-z0-9_]', ''
|
|
|
|
$CreateMasteeKey = "USE master;
|
|
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '$EncryptionPassword';
|
|
GO
|
|
|
|
CREATE CERTIFICATE ${H}_cert WITH SUBJECT = '$H certificate';
|
|
GO
|
|
|
|
CREATE ENDPOINT Endpoint_Mirroring
|
|
STATE = STARTED
|
|
AS TCP (
|
|
LISTENER_PORT=7024
|
|
, LISTENER_IP = ALL
|
|
)
|
|
FOR DATABASE_MIRRORING (
|
|
AUTHENTICATION = CERTIFICATE ${H}_cert
|
|
, ENCRYPTION = REQUIRED ALGORITHM AES
|
|
, ROLE = ALL
|
|
);
|
|
GO
|
|
|
|
BACKUP CERTIFICATE ${H}_cert TO FILE = '$Folder\certificate.cer';
|
|
GO
|
|
"
|
|
|
|
Invoke-SQLText -SQL $CreateMasteeKey
|
|
}
|
|
|
|
Export-ModuleMember -Function New-SQLServer
|
|
Export-ModuleMember -Function Remove-SQLServer
|
|
Export-ModuleMember -Function Invoke-SQLText
|
|
Export-ModuleMember -Function Initialize-MirroringEndpoint
|