How To Implement:
Use PowerShell or PowerShell ISE running as Administrator to run the PowerShell script below on the target machine where you would like the PolicyPak CSE (Client-Side Extension) to be rolled back.
What This Script Does:
This script will check to see if the CSE version currently installed on a computer matches the version defined under the $OldVersion
variable, OR if there is no CSE currently installed, if either of these conditions is evaluated to TRUE then the CSE version as defined by the $URL
variable will be downloaded to “C:\Temp\PP_CSE“ and installed on the computer. If any CSE version other than the version specified under the $OldVersion
variable is installed on the computer then the script will exit without doing anything.
#### Start of Script
#### Purpose: This script rolls the PolicyPak Client-Side Extension back from ($OldVersion) 20.8.2543 to ($NewVersion) 20.7.2513.
#### Inspired by and uses portions of script submitted by Jacob Hill
Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass -Force
$software = "PolicyPak Client-Side Extension"
# $Filename should match the name of the file you uploaded.
$installed = (Get-ItemProperty HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\* | Where { $_.DisplayName -eq $software }) -ne $null
$OldVersion = "20.8.2543"
$fileName = "PolicyPak Client-Side Extension x64-2513.msi"
$URL = "https://s3.amazonaws.com/0PolicyPakSupport/OldBuilds/$fileName"
# $URL = Direct download link to MSI installer
$dir = "C:\Temp\PP_CSE\"
$logfile = $dir+"cse_rollback.log"
$OutPath = $dir+$fileName
# TIMESTAMP FUNCTION: Usage: Write-Output "$(Get-TimeStamp) Text goes here" | Out-file C:\log.txt -append
function Get-TimeStamp {
return "[{0:MM/dd/yyyy} {0:HH:mm:ss}]" -f (Get-Date)
}
Function Install-Correct-Version {
Write-Output "$(Get-TimeStamp) Install-Correct-Version Process started, downloading new CSE installation file." | Out-file $logfile -append
(New-Object Net.WebClient).DownloadFile($URL, "$OutPath")
Write-Output "$(Get-TimeStamp) Starting MSI installation." | Out-file $logfile -append
Start-Process C:\Windows\System32\msiexec.exe -Wait -ArgumentList "/i `"$outPath`" /qn /L*V `"$dir\CSE_install.log`"" -NoNewWindow
$NewVersion = (Get-ItemProperty HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\* | Where { $_.DisplayName -eq $software }).DisplayVersion
Write-Output "$(Get-TimeStamp) Installation complete! Version $newVersion installed." | Out-file $logfile -append
Return
}
# Create the storage directory if it does not exist.
If ((Test-Path -Path $dir) -eq $false)
{
New-Item -Path $dir -ItemType directory
Write-Output "$(Get-TimeStamp) Created the $dir directory." | Out-file $logfile -append
}
If(-Not $installed)
{
Write-Output "$(Get-TimeStamp) '$software' is NOT installed." | Out-file $logfile -append
Install-Correct-Version
Return
}
else
{
Write-Output "$(Get-TimeStamp) '$software' IS installed. Checking version." | Out-file $logfile -append
$version = (Get-ItemProperty HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\* | Where { $_.DisplayName -eq $software }).DisplayVersion
if ($version -eq $OldVersion)
{
Write-Output "$(Get-TimeStamp) Old version $version is installed. Uninstalling problematic version." | Out-file $logfile -append
# REPLACE - replace the MSI uninstall code. The MSI code can be obtained by running the following command in PowerShell:
# (Get-ItemProperty HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\* | Where { $_.DisplayName -eq "PolicyPak Client-Side Extension" }).UninstallString
# For example the uninstall String for CSE version 2543 is: "MsiExec.exe /X{B3A3F160-51B6-41FD-9D89-054DA19C09B7}"
Start-Process C:\Windows\System32\msiexec.exe -Wait -ArgumentList "/x {B3A3F160-51B6-41FD-9D89-054DA19C09B7} /q" -NoNewWindow
Write-Output "$(Get-TimeStamp) Uninstall complete. Now installing correct version." | Out-file $logfile -append
Install-Correct-Version
Return
}
else
{
Write-Output "$(Get-TimeStamp) CSE Version $version is installed. No further action necessary" | Out-file $logfile -append
Return
}
}
Write-Output "$(Get-TimeStamp) *** Rollback PolicyPak CSE Process Finished ***" | Out-file $logfile -append
#### End of Script
Troubleshooting:
Logs for the Rollback process and MSI install process can both be found in “C:\Temp\PP_CSE” once the script has executed.