91 lines
3.3 KiB
PowerShell
91 lines
3.3 KiB
PowerShell
|
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
|
|||
|
}
|
|||
|
}
|