Param( [string]$connectionString, [string]$targetDatabaseFile ) #Import-Module SQLPS -DisableNameChecking $sqlPsModule = Join-Path $PSScriptRoot "\SQLPS\SQLPS.PSD1" Import-Module $sqlPsModule $commonModule = Join-Path $PSScriptRoot "Common.psm1" Import-Module $commonModule #region Parameters if([string]::IsNullOrWhiteSpace($connectionString) -or [string]::IsNullOrWhiteSpace($targetDatabaseFile)) { Write-Error ".\CreateDatabaseAndRunMigration.ps1 'connectionString' 'targetDatabaseFile'" return } #endregion #region Configuration $connectionValues = New-Object System.Data.SqlClient.SqlConnectionStringBuilder -argumentlist $connectionString $sqlInstaceName = $connectionValues["Data Source"] $databaseName = $connectionValues["Initial Catalog"] $userName = $connectionValues["User ID"] $password = $connectionValues["Password"] #$connectionString = "Data Source=kretalocal;User ID=kreta;Password=Porcica1.;Initial Catalog=KretaTestDevMigration;Connection Timeout=3000;" #$targetDatabaseFile = "c:\Temp\Kreta_prod_ini_empty.bak" #example: .\CreateDatabaseAndRunMigration.ps1 'Data Source=kretalocal;User ID=kreta;Password=Porcica1.;Initial Catalog=KretaTestDevMigration;Connection Timeout=3000;' 'c:\Temp\Kreta_dev_init.bak' #example: .\CreateDatabaseAndRunMigration.ps1 'Data Source=kretalocal;User ID=kreta;Password=Porcica1.;Initial Catalog=KretaTestProdMigration;Connection Timeout=3000;' 'c:\Temp\Kreta_prod_init_empty.bak' $securePassword = ConvertTo-SecureString $password -AsPlainText -Force $fileToRestore = $targetDatabaseFile $backupPath = "c:\SqlBackupDev" #endregion #region Private functions function Run-Migrator($connectionString) { $solutionDir = Join-Path $psscriptroot "..\..\" Write-Host "Solution Directory is" $psscriptroot $migrator = Join-Path $solutionDir "\packages\Ekreta.Core.FluentMigrator.1.2.56051\tools\Migrate.exe" $target = Join-Path $solutionDir "\Kreta.DataAccess.Migrations\bin\Kreta.DataAccess.Migrations.dll" & "$migrator" /connection "$connectionString" /db "SqlServer" /target "$target" /timeout 600 } #endregion #region Main try { Write-Host "---------------------Start Logging-----------------------------------------------" StartLogging Write-Host "---------------------Drop Previous Database--------------------------------------" Drop-Database $sqlInstaceName $databaseName $userName $securePassword Write-Host "---------------------Restore New Database----------------------------------------" Restore-Database $sqlInstaceName $databaseName $userName $securePassword $fileToRestore Write-Host "---------------------Run migration-----------------------------------------------" Run-Migrator $connectionString Write-Host "---------------------Reset Environment-------------------------------------------" ResetEnvironment } finally { Write-Host "---------------------Stop Logging------------------------------------------------" StopLogging } #endregion