ps/Modules/Alkami.PowerShell.Database/Public/Initialize-AlkamiDatabase.ps1

91 lines
3.3 KiB
PowerShell
Raw Normal View History

2023-05-30 22:51:22 -07:00
function Initialize-AlkamiDatabase {
<#
.SYNOPSIS
Initialize an Alkami Database
#>
[CmdletBinding()]
[OutputType([System.Boolean])]
Param(
$connectionString,
$databaseName
)
process{
if (!(Test-IsDeveloperMachine)) {
throw 'this should only be run on a developer machine'
}
if (($connectionString).ToString() -notmatch 'data source=localhost') {
Write-Warning "Not connecting to a local database instance. Not attempting to create a database for '$databaseName'"
return $false
}
if (Test-DatabaseExists $connectionString $databaseName) {
return $true
}
$dbPath = (Get-DatabaseInstallPath);
if (!(Test-Path $dbPath)){
(New-Item -ItemType Directory -Force -Path $dbPath) | Out-Null
}
if ($connectionString -match 'AlkamiMaster') {
$connectionString = $connectionString -replace 'AlkamiMaster','master'
}
$sqlConnection = New-Object System.Data.SqlClient.SqlConnection($connectionString)
[System.Data.SqlClient.SqlCommand]$command = $sqlConnection.CreateCommand()
$command.CommandText = "CREATE DATABASE [$databaseName] CONTAINMENT = NONE"
$sqlConnection.Open()
if ($databaseName -eq "DeveloperDynamic") {
[System.Data.SqlClient.SqlCommand]$filePathsCommand = $sqlConnection.CreateCommand()
$filePathsCommand.CommandText = "SELECT SERVERPROPERTY('InstanceDefaultDataPath') as InstanceDefaultDataPath,SERVERPROPERTY('InstanceDefaultLogPath') as InstanceDefaultLogPath;"
[System.Data.SqlClient.SqlDataReader]$reader = $filePathsCommand.ExecuteReader()
$dataPath = ""
$logPath = ""
if ($reader.Read()) {
$dataPath = (Join-Path $reader[0].ToString() "$databaseName.mdf")
$logPath = (Join-Path $reader[1].ToString() "$($databaseName)_log.ldf")
} else {
Write-Warning "No results from ExecuteReader"
}
$reader.Dispose()
$backupFilepath = (Join-Path (Get-MigrationRunnerPath) 'DeveloperDynamic.bak')
if (Test-Path $backupFilepath) {
$command.CommandText = "RESTORE DATABASE [DeveloperDynamic] FROM DISK = N'$backupFilepath' WITH FILE = 1, MOVE N'DeveloperDynamic' TO N'$dataPath', MOVE N'DeveloperDynamic_log' TO N'$logPath', NOUNLOAD, REPLACE, STATS = 5"
}
}
$command.ExecuteNonQuery()
[System.Data.SqlClient.SqlCommand]$command = $sqlConnection.CreateCommand()
$command.CommandText = "ALTER DATABASE [$databaseName] MODIFY FILE (NAME = N'$databaseName', MAXSIZE = UNLIMITED, FILEGROWTH = 10%);"
$command.ExecuteNonQuery()
[System.Data.SqlClient.SqlCommand]$command = $sqlConnection.CreateCommand()
$command.CommandText = "ALTER DATABASE [$databaseName] MODIFY FILE (NAME = N'$($databaseName)_log', MAXSIZE = UNLIMITED, FILEGROWTH = 10%);"
$command.ExecuteNonQuery()
[System.Data.SqlClient.SqlCommand]$command = $sqlConnection.CreateCommand()
$command.CommandText = "ALTER DATABASE [$databaseName] COLLATE SQL_Latin1_General_CP1_CI_AS;"
$command.ExecuteNonQuery()
[System.Data.SqlClient.SqlCommand]$command = $sqlConnection.CreateCommand()
$command.CommandText = "ALTER DATABASE [$databaseName] SET COMPATIBILITY_LEVEL = 110;"
$command.ExecuteNonQuery()
[System.Data.SqlClient.SqlCommand]$command = $sqlConnection.CreateCommand()
$command.CommandText = "EXEC sp_change_users_login 'Auto_Fix', 'user';"
$command.ExecuteNonQuery()
$sqlConnection.Close()
return $true
}
}