<# Runs ON the IIS server (invoked over SSH by scripts\run-migrations-remote.ps1). Not meant to be run by hand except for troubleshooting. Applies pending migrations to the live database WITHOUT touching the deployed site files: - Copies the live public\web.config from RemoteDir into WorkDir, so runMigrations.vbs picks up the real production connection string without it being hard-coded here. - Runs `runMigrations.vbs status` (for the log) then `up` from WorkDir. - Deletes WorkDir when done, win or lose - nothing is left behind on the server. #> param( [Parameter(Mandatory = $true)][string]$RemoteDir, [Parameter(Mandatory = $true)][string]$WorkDir ) $ErrorActionPreference = 'Stop' $liveWebConfig = Join-Path $RemoteDir 'public\web.config' if(!(Test-Path $liveWebConfig)){ throw "No deployed web.config found at $liveWebConfig - is the site actually deployed at -RemoteDir?" } $workPublicDir = Join-Path $WorkDir 'public' New-Item -ItemType Directory -Force -Path $workPublicDir | Out-Null Copy-Item $liveWebConfig (Join-Path $workPublicDir 'web.config') -Force try { Push-Location $WorkDir Write-Host '-- status before --' & cscript.exe //nologo scripts\runMigrations.vbs status if($LASTEXITCODE -ne 0){ throw 'runMigrations.vbs status failed - see output above' } Write-Host '' Write-Host '-- applying pending migrations --' & cscript.exe //nologo scripts\runMigrations.vbs up if($LASTEXITCODE -ne 0){ throw 'runMigrations.vbs up failed - see output above' } } finally { Pop-Location Write-Host '' Write-Host "Cleaning up $WorkDir" Remove-Item -Recurse -Force $WorkDir -ErrorAction SilentlyContinue } Write-Host 'Remote migration apply complete.'