Octopus.Script exported 2021-09-16 by harrisonmeister belongs to ‘SQL Server’ category.
Executes SQL script file(s) against the specified database using either SQL or Windows authentication. SQL Scripts can be hardcoded value or can be from an extracted NuGet package.
Parameters
When steps based on the template are included in a project’s deployment process, the parameters below can be set.
Server Instance Name
serverInstance
The SQL Server Instance name
Database Name
dbName
The database name
Authentication
Authentication
The authentication method
Username
Username
The username to use to connect (only applies with SqlAuthentication selected)
Password
Password
The password to use to connect (only applies with SqlAuthentication selected)
SQL Scripts
SQLScripts
Full path to each script name on a new line Wildcards are accepted, eg. C:\Scripts*.sql, C:\Scripts\Deploy*.sql
DACPAC Package Extract Step Name
DacpacPackageExtractStepName
Optional: The step in which the DACPAC package was installed. Can be left as blank if SQLScripts is a hardcoded value.
Script body
Steps based on this template will execute the following PowerShell script.
function Get-DBConnection
{
[CmdletBinding()]
param
(
[Parameter(Position = 0)]
[string]
[ValidateNotNullorEmpty()]
$serverInstance,
[switch]
$SqlAuthentication,
[string]
$Username,
[string]
$Password
)
try
{
$connection = (New-Object Microsoft.SqlServer.Management.Smo.Server($serverInstance))
if ($SqlAuthentication)
{
$connection.ConnectionContext.LoginSecure = $false
$connection.ConnectionContext.set_Login($Username)
$securePassword = ConvertTo-SecureString $Password -AsPlainText -Force
$connection.ConnectionContext.set_SecurePassword($securePassword)
}
$connection.Refresh()
return $connection
}
catch
{
throw $_.Exception.ToString()
}
}
function Invoke-ExecuteSQLScript {
[CmdletBinding()]
param
(
[parameter(Mandatory = $true, Position = 0)]
[ValidateNotNullOrEmpty()]
[string]
$serverInstance,
[parameter(Mandatory = $true, Position = 1)]
[ValidateNotNullOrEmpty()]
[string]
$dbName,
[string]
$Authentication,
[string]
$Username,
[string]
$Password,
[string]
$SQLScripts
)
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.SMO") | out-null
if ($Authentication -eq "SqlAuthentication")
{
$SqlServer = Get-DBConnection -serverInstance $serverInstance -SqlAuthentication -Username $Username -Password $Password
}
else
{
$SqlServer = Get-DBConnection -serverInstance $serverInstance
}
if ($null -eq $SqlServer.Databases[$dbName])
{
throw "Database $dbName does not exist on server $serverInstance"
}
if ($null -ne $SqlServer)
{
foreach ($SQLScript in $SQLScripts.Split("`n"))
{
try
{
$children = $SQLScript -replace ".*\\"
$replacematch = $children -replace "\*","\*" -replace "\.","\."
$parent = $SQLScript -replace $replacematch
$scripts = Get-ChildItem -Path $parent -Filter $children
foreach ($script in $scripts)
{
$sr = New-Object System.IO.StreamReader($script.FullName)
$scriptContent = $sr.ReadToEnd()
$SqlServer.Databases[$dbName].ExecuteNonQuery($scriptContent)
$sr.Close()
write-verbose ("Executed manual script - {0}" -f $script.Name)
}
}
catch
{
Write-Error $_.Exception
}
}
}
}
if (Test-Path Variable:OctopusParameters)
{
if ($null -ne $DacpacPackageExtractStepName -and $DacpacPackageExtractStepName -ne '')
{
Write-Verbose "Dacpac Package Extract Step Name not empty. Locating scripts located in the Dacpac Extract Step."
$installDirPathKey = 'Octopus.Action[{0}].Output.Package.InstallationDirectoryPath' -f $DacpacPackageExtractStepName
$installDirPath = $OctopusParameters[$installDirPathKey]
$ScriptsToExecute = Join-Path $installDirPath $SqlScripts
}
else
{
Write-Verbose "Locating scripts from the literal entry of Octopus Parameter SQLScripts"
$ScriptsToExecute = $OctopusParameters["SQLScripts"]
}
if ($OctopusParameters["Authentication"] -eq "SqlAuthentication")
{
Write-Verbose "Using Sql Authentication"
Invoke-ExecuteSQLScript -serverInstance $OctopusParameters["serverInstance"] `
-dbName $OctopusParameters["dbName"] `
-Authentication $OctopusParameters["Authentication"] `
-Username $OctopusParameters["Username"] `
-Password $OctopusParameters["Password"] `
-SQLScripts $ScriptsToExecute
}
else
{
Write-Verbose "Using Windows Integrated Authentication"
Invoke-ExecuteSQLScript -serverInstance $OctopusParameters["serverInstance"] `
-dbName $OctopusParameters["dbName"] `
-SQLScripts $ScriptsToExecute
}
}
Provided under the Apache License version 2.0.
To use this template in Octopus Deploy, copy the JSON below and paste it into the Library → Step templates → Import dialog.
{
"Id": "3ec610a8-f75c-43da-8d82-8c9b7b334084",
"Name": "SQL - Execute SQL Script with SQL or Windows Authentication",
"Description": "Executes SQL script file(s) against the specified database using either SQL or Windows authentication. SQL Scripts can be hardcoded value or can be from an extracted NuGet package.",
"Version": 169,
"ExportedAt": "2021-09-16T08:42:00.000+00:00",
"ActionType": "Octopus.Script",
"Author": "harrisonmeister",
"Parameters": [
{
"Id": "0ac8c815-697d-4212-aa73-85e265bd1a7a",
"Name": "serverInstance",
"Label": "Server Instance Name",
"HelpText": "The SQL Server Instance name",
"DefaultValue": null,
"DisplaySettings": {
"Octopus.ControlType": "SingleLineText"
}
},
{
"Id": "63a2671c-cd1e-4bd3-acad-59f656f9a698",
"Name": "dbName",
"Label": "Database Name",
"HelpText": "The database name",
"DefaultValue": null,
"DisplaySettings": {
"Octopus.ControlType": "SingleLineText"
}
},
{
"Id": "bc768cdf-3d5f-4a94-8b08-647056eb3977",
"Name": "Authentication",
"Label": "Authentication",
"HelpText": "The authentication method",
"DefaultValue": null,
"DisplaySettings": {
"Octopus.ControlType": "Select",
"Octopus.SelectOptions": "SqlAuthentication\nWindowsIntegrated"
}
},
{
"Id": "e4d6eca3-5de6-4901-8f94-5253c2aea18d",
"Name": "Username",
"Label": "Username",
"HelpText": "The username to use to connect (only applies with SqlAuthentication selected)",
"DefaultValue": null,
"DisplaySettings": {
"Octopus.ControlType": "SingleLineText"
}
},
{
"Id": "d00b988d-bdf3-4376-aec7-90954e3cb635",
"Name": "Password",
"Label": "Password",
"HelpText": "The password to use to connect (only applies with SqlAuthentication selected)",
"DefaultValue": null,
"DisplaySettings": {
"Octopus.ControlType": "SingleLineText"
}
},
{
"Id": "4de1507a-3824-46b0-bf11-126b953c73da",
"Name": "SQLScripts",
"Label": "SQL Scripts",
"HelpText": "Full path to each script name on a new line\nWildcards are accepted, eg. C:\\Scripts\\*.sql, C:\\Scripts\\Deploy*.sql",
"DefaultValue": null,
"DisplaySettings": {
"Octopus.ControlType": "MultiLineText"
}
},
{
"Id": "0fd3b146-02d1-41fc-9f5c-a830e062b239",
"Name": "DacpacPackageExtractStepName",
"Label": "DACPAC Package Extract Step Name",
"HelpText": "Optional: The step in which the DACPAC package was installed. Can be left as blank if SQLScripts is a hardcoded value.",
"DefaultValue": null,
"DisplaySettings": {
"Octopus.ControlType": "StepName"
}
}
],
"Properties": {
"Octopus.Action.Script.ScriptBody": "function Get-DBConnection\n{\n [CmdletBinding()]\n param\n (\n [Parameter(Position = 0)]\n [string]\n [ValidateNotNullorEmpty()]\n $serverInstance,\n\n [switch]\n $SqlAuthentication,\n\n [string]\n $Username,\n\n [string]\n $Password\n )\n try\n {\n $connection = (New-Object Microsoft.SqlServer.Management.Smo.Server($serverInstance))\n\n if ($SqlAuthentication)\n {\n $connection.ConnectionContext.LoginSecure = $false\n $connection.ConnectionContext.set_Login($Username)\n $securePassword = ConvertTo-SecureString $Password -AsPlainText -Force\n $connection.ConnectionContext.set_SecurePassword($securePassword)\n }\n \n $connection.Refresh()\n \n return $connection\n }\n catch\n {\n throw $_.Exception.ToString()\n }\n \n}\n\nfunction Invoke-ExecuteSQLScript {\n\n [CmdletBinding()]\n param\n (\n [parameter(Mandatory = $true, Position = 0)]\n [ValidateNotNullOrEmpty()]\n [string]\n $serverInstance,\n\n [parameter(Mandatory = $true, Position = 1)]\n [ValidateNotNullOrEmpty()]\n [string]\n $dbName,\n\n [string]\n $Authentication,\n\n [string]\n $Username,\n\n [string]\n $Password,\n\n [string]\n $SQLScripts\n )\n\n [System.Reflection.Assembly]::LoadWithPartialName(\"Microsoft.SqlServer.SMO\") | out-null\n\n if ($Authentication -eq \"SqlAuthentication\")\n {\n $SqlServer = Get-DBConnection -serverInstance $serverInstance -SqlAuthentication -Username $Username -Password $Password\n }\n else\n {\n $SqlServer = Get-DBConnection -serverInstance $serverInstance\n }\n\n if ($null -eq $SqlServer.Databases[$dbName])\n {\n throw \"Database $dbName does not exist on server $serverInstance\"\n }\n \n if ($null -ne $SqlServer)\n {\n foreach ($SQLScript in $SQLScripts.Split(\"`n\"))\n {\n try \n {\n $children = $SQLScript -replace \".*\\\\\"\n $replacematch = $children -replace \"\\*\",\"\\*\" -replace \"\\.\",\"\\.\"\n $parent = $SQLScript -replace $replacematch\n\n $scripts = Get-ChildItem -Path $parent -Filter $children\n\n foreach ($script in $scripts)\n {\n $sr = New-Object System.IO.StreamReader($script.FullName)\n $scriptContent = $sr.ReadToEnd()\n $SqlServer.Databases[$dbName].ExecuteNonQuery($scriptContent)\n $sr.Close()\n\n\t\t\t\t\twrite-verbose (\"Executed manual script - {0}\" -f $script.Name)\n }\n }\n catch \n {\n Write-Error $_.Exception\n }\n }\n }\n}\n\nif (Test-Path Variable:OctopusParameters)\n{\n\tif ($null -ne $DacpacPackageExtractStepName -and $DacpacPackageExtractStepName -ne '')\n {\n Write-Verbose \"Dacpac Package Extract Step Name not empty. Locating scripts located in the Dacpac Extract Step.\"\n $installDirPathKey = 'Octopus.Action[{0}].Output.Package.InstallationDirectoryPath' -f $DacpacPackageExtractStepName\n $installDirPath = $OctopusParameters[$installDirPathKey]\n $ScriptsToExecute = Join-Path $installDirPath $SqlScripts\n }\n else\n { \n Write-Verbose \"Locating scripts from the literal entry of Octopus Parameter SQLScripts\"\n $ScriptsToExecute = $OctopusParameters[\"SQLScripts\"]\n }\n if ($OctopusParameters[\"Authentication\"] -eq \"SqlAuthentication\")\n {\n Write-Verbose \"Using Sql Authentication\"\n Invoke-ExecuteSQLScript -serverInstance $OctopusParameters[\"serverInstance\"] `\n -dbName $OctopusParameters[\"dbName\"] `\n -Authentication $OctopusParameters[\"Authentication\"] `\n -Username $OctopusParameters[\"Username\"] `\n -Password $OctopusParameters[\"Password\"] `\n -SQLScripts $ScriptsToExecute\n }\n else\n {\n Write-Verbose \"Using Windows Integrated Authentication\"\n Invoke-ExecuteSQLScript -serverInstance $OctopusParameters[\"serverInstance\"] `\n -dbName $OctopusParameters[\"dbName\"] `\n -SQLScripts $ScriptsToExecute\n }\n}",
"Octopus.Action.Script.Syntax": "PowerShell",
"Octopus.Action.Script.ScriptSource": "Inline",
"Octopus.Action.RunOnServer": "false"
},
"Category": "SQL Server",
"HistoryUrl": "https://github.com/OctopusDeploy/Library/commits/master/step-templates//opt/buildagent/work/75443764cd38076d/step-templates/sql-execute-script-with-authentication.json",
"Website": "/step-templates/3ec610a8-f75c-43da-8d82-8c9b7b334084",
"Logo": "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",
"$Meta": {
"Type": "ActionTemplate"
}
}
Page updated on Thursday, September 16, 2021