param(
[string]$rg = $( throw "Missing required resource group parameter"),
[string]$sqlserver = $( throw "Missing required SQL Server parameter"),
[string]$dbName = $( throw "Missing required DB Name parameter"),
[string]$dacpac = $( throw "Missing required DACPAC file location")
)
function Login
{
$needLogin = $true
Try
{
$content = Get-AzureRmContext
if ($content)
{
$needLogin = ([string]::IsNullOrEmpty($content.Account))
}
}
Catch
{
if ($_ -like "*Login-AzureRmAccount to login*")
{
$needLogin = $true
}
else
{
throw
}
}
if ($needLogin)
{
$azureCred = Get-Credential -message "Enter Azure Credentials"
Login-AzureRmAccount -Credential $azureCred
}
}
Login
$database = Get-AzureRMSqlDatabase -ServerName $sqlserver -DatabaseName $dbName -ResourceGroupName $rg -ErrorAction SilentlyContinue
if ($database) {
$yes = New-Object System.Management.Automation.Host.ChoiceDescription "&Yes",""
$no = New-Object System.Management.Automation.Host.ChoiceDescription "&No",""
$choices = [System.Management.Automation.Host.ChoiceDescription[]]($yes,$no)
$caption = "Warning!"
$message = "The database $dbName already exists. Do you want to replace it?"
$result = $Host.UI.PromptForChoice($caption,$message,$choices,0)
if($result -eq 0) {
Write-Host "Deleting database $dbname"
Remove-AzureRmSqlDatabase -ServerName $sqlserver -DatabaseName $dbName -ResourceGroupName $rg -Force -ErrorAction Stop | out-null
}
else {
exit
}
}
Write-Host "Creating database $dbname"
New-AzureRmSqlDatabase -ResourceGroupName $rg -ServerName $sqlserver -DatabaseName $dbName -RequestedServiceObjectiveName "S0" | out-null
$sqlCred = Get-Credential -Message "Enter SQL Server credentials"
$BSTR = [System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($sqlCred.Password)
$plainPassword = [System.Runtime.InteropServices.Marshal]::PtrToStringAuto($BSTR)
$connectionString = "Server=tcp:$sqlserver.database.windows.net,1433;Initial Catalog=$dbname;Persist Security Info=False;User ID=$($sqlCred.UserName);Password=$plainPassword;MultipleActiveResultSets=False;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;"
& "C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\Common7\IDE\Extensions\Microsoft\SQLDB\DAC\130\sqlpackage.exe" /Action:publish /SourceFile:"$dacpac" /TargetConnectionString:"$connectionString"