Skip to content

Instantly share code, notes, and snippets.

@jhorsman
Created April 5, 2017 19:37
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jhorsman/98e738520572b6c4dd04ec13dfce9ac0 to your computer and use it in GitHub Desktop.
Save jhorsman/98e738520572b6c4dd04ec13dfce9ac0 to your computer and use it in GitHub Desktop.
PowerShell script to install hotfix XPM_8.1.1.3571 for SDL Web 8.1.1
# This script will apply hotfix XPM_8.1.1.3571 for SDL Web 8.1.1
# Tested on SDL Web 8.1.1. Probably works in a comparable way with hotfix 3571 for SDL Web 8.5 and SDL Tridion 2013 SP1
# To install the hotfix...
# - make sure you have a backup of the SDL Web Content Manager which is located in the %TRIDION_HOME% path.
# - this script will make a backup of the files it touches (it copies .old files), see the filenames in the scripts output verbose messages
# - if you run the script again it will overwrite those backup files.
# - get a copy of the hotfix, unzip it to a folder and set the path to that folder in $hotfixSource
# - run the script
# - restart the application pool for "SDL Tridion" or restart IIS
# - test if the SDL Web CME is still working
# - clean up the .old files created by the installer
# Todo; nice to haves for this script
# - script parameters for hotfix source and verbose
# - -Whatif implementation to be able to explore the script without doing any changes
# - -Confirm to require confirmation before doing changes
# - unpack the hotfix zip, in a PowerShell 4 safe way
# Unpack the hotfix.zip and set the unzip path in $hotfixSource below. This is the only configuration parameter.
$hotfixSource = "C:\Install\SDL\Hotfix\XPM_8.1.1.3571"
# only continue if you know what you are doing...
exit
## I don't always make errors but when I do I stop
$ErrorActionPreference = "Stop"
## Set some file locations, no need to change those, those files are either coming from the Tridion installation, or from the hotfix
$quickCheckFile = Join-Path $env:TRIDION_HOME "\web\WebUI\Editors\Safeguard\Scripts\quickcheck.js"
$quickCheckSourceFile = Join-Path $hotfixSource "quickcheck.js"
$contentScriptFile = Join-Path $env:TRIDION_HOME "\web\WebUI\Editors\Safeguard\Scripts\ContentScript.js"
$contentScriptSourceFile = Join-Path $hotfixSource "ContentScript.js"
$safeguardDllFile = Join-Path $env:TRIDION_HOME "\web\WebUI\WebRoot\bin\Tridion.Web.UI.Models.Safeguard.dll"
$safeguardDllSourceFile = Join-Path $hotfixSource "Tridion.Web.UI.Models.Safeguard.dll"
$safeguardEditorConfigFile = Join-Path $env:TRIDION_HOME "\web\WebUI\Editors\Safeguard\Configuration\SafeguardEditor.config"
$safeguardModelConfigFile = Join-Path $env:TRIDION_HOME "\web\WebUI\Models\Safeguard\Configuration\SafeguardModel.config"
$systemConfigFile = Join-Path $env:TRIDION_HOME "\web\WebUI\WebRoot\Configuration\System.config"
## Before doning any changes, check if all the files we need to touch are present
function AssertPathPrerequisite ($path)
{
if(!(Test-Path $path))
{
Write-Error ("Could not find {0}" -f $path)
}
}
AssertPathPrerequisite $hotfixSource
AssertPathPrerequisite $quickCheckFile
AssertPathPrerequisite $quickCheckSourceFile
AssertPathPrerequisite $contentScriptFile
AssertPathPrerequisite $contentScriptSourceFile
AssertPathPrerequisite $safeguardDllFile
AssertPathPrerequisite $safeguardDllSourceFile
AssertPathPrerequisite $safeguardEditorConfigFile
AssertPathPrerequisite $safeguardModelConfigFile
AssertPathPrerequisite $systemConfigFile
# Apply the hotfix, copying a backup of each file before applying the hotfix.
Move-Item $quickCheckFile ($quickCheckFile + ".old") -Verbose
Copy-Item $quickCheckSourceFile $quickCheckFile -Verbose
Move-Item $contentScriptFile ($contentScriptFile + ".old") -Verbose
Copy-Item $contentScriptSourceFile $contentScriptFile -Verbose
Move-Item $safeguardDllFile ($safeguardDllFile + ".old") -Verbose
Copy-Item $safeguardDllSourceFile $safeguardDllFile -Verbose
Copy-Item $safeguardEditorConfigFile ($safeguardEditorConfigFile + ".old") -Verbose
[xml] $safeguardEditorConfig = Get-Content $safeguardEditorConfigFile
$safeguardEditorConfig.Configuration.settings.customconfiguration.clientconfiguration.contextURL = "http://dqm.crownpeak.com/safeguard"
$safeguardEditorConfig.Save((Resolve-Path $safeguardEditorConfigFile))
Copy-Item $SafeguardModelConfigFile ($SafeguardModelConfigFile + ".old") -Verbose
[xml] $safeguardModelConfig = Get-Content $safeguardModelConfigFile
$safeguardModelConfig.Configuration.settings.customconfiguration.ActiveStandardsServiceUrl = "https://api.crownpeak.net/dqm-cms/v1/"
$safeguardModelConfig.Save((Resolve-Path $SafeguardModelConfigFile))
Copy-Item $systemConfigFile ($systemConfigFile + ".old") -Verbose
[xml] $systemConfig = Get-Content $systemConfigFile
if(!([int] $systemConfig.Configuration.servicemodel.server.modification -gt 0))
{
Write-Error ("Unexpeted value for Configuration\servicemodel\server\modification in {0}" -f $systemConfigFile)
}
$systemConfig.Configuration.servicemodel.server.modification = ([int] $systemConfig.Configuration.servicemodel.server.modification + 1).ToString()
$systemConfig.Save((Resolve-Path $systemConfigFile))
## Done
Write-Host "Done. Now recycle the SDL Web application pool or restart IIS"
Write-Host "Remember to clean up the .old files"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment