Powershell script to update config for change logging
Dan Guzman
Posts: 20
Below is a Powershell script I am sharing with the Redgate community.
This script specifies a change logging database name in the local configuration file so that last Changed By information is not lost after a SQL restart in the shared development model as described in http://documentation.red-gate.com/displ ... +databases. We are rolling out SQL Source Control to dozens of developers and this script avoids the manual and error-prone task of each developer updating the configuration manually. I've also include a sample command-line file to run the script, which our developers run immediately after installing SQL Source Control.
Powershell script (UpdateRedgateEngineConfig.ps1) contents:
Sample command file (UpdateRedgateEngineConfig.cmd) contents below. Update UNC path as needed for your environment:
This script specifies a change logging database name in the local configuration file so that last Changed By information is not lost after a SQL restart in the shared development model as described in http://documentation.red-gate.com/displ ... +databases. We are rolling out SQL Source Control to dozens of developers and this script avoids the manual and error-prone task of each developer updating the configuration manually. I've also include a sample command-line file to run the script, which our developers run immediately after installing SQL Source Control.
Powershell script (UpdateRedgateEngineConfig.ps1) contents:
try { # load existing RedGate config file $redGateConfigXml = New-Object System.Xml.XmlDocument; $redGateConfigPath = [System.IO.Path]::Combine($env:localappdata, "Red GateSQL Source Control 3RedGate_SQLSourceControl_Engine_EngineOptions.xml"); $redGateConfigXml.Load($redGateConfigPath); # get EngineOptions element $engineOptionsElement = $redGateConfigXml.DocumentElement.SelectSingleNode("/EngineOptions"); if($engineOptionsElement -eq $null) { throw "Root element ""EngineOptions"" not found in config file."; } # get TraceCacheDatabase element $traceCacheDatabaseElement = $engineOptionsElement.SelectSingleNode("TraceCacheDatabase"); if($traceCacheDatabaseElement -eq $null) { # create TraceCacheDatabase if it doesn't already exist $traceCacheDatabaseElement = $redGateConfigXml.CreateElement("TraceCacheDatabase"); $traceCacheDatabaseElement = $engineOptionsElement.AppendChild($traceCacheDatabaseElement); } # specify name of RedGate audit database $traceCacheDatabaseElement.InnerText = "RedGateAudit"; $redGateConfigXml.Save($redGateConfigPath); Write-Host "SUCCESS: RedGate configuration updated."; } catch [Exception] { Write-Error $("ERROR: " + $_.Exception.Message); }
Sample command file (UpdateRedgateEngineConfig.cmd) contents below. Update UNC path as needed for your environment:
@REM Update local RedGate source control config file to specify the database name used for auditing @CLS @Powershell -ExecutionPolicy RemoteSigned -File "\<file-server><share-name>RedGateSQLSourceControl3UpdateRedgateEngineConfig.ps1" @PAUSE Press [ENTER] to close
Comments