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 } }