openHAB install after windows service feature install
This commit is contained in:
244
runtime/bin/restore.ps1
Normal file
244
runtime/bin/restore.ps1
Normal file
@@ -0,0 +1,244 @@
|
||||
#Requires -Version 5.0
|
||||
Set-StrictMode -Version Latest
|
||||
|
||||
Function Restore-openHAB {
|
||||
<#
|
||||
.SYNOPSIS
|
||||
Restores openHAB files from a backup file.
|
||||
.DESCRIPTION
|
||||
The Restore-openHAB function performs the necessary tasks to restore openHAB from a backup file.
|
||||
.PARAMETER OHDirectory
|
||||
The directory where openHAB is installed (default: current directory).
|
||||
.PARAMETER OHBackups
|
||||
The directory where backup the files are.
|
||||
.PARAMETER FileName
|
||||
The name of the backup file to use (do not specify to use the latest)
|
||||
.PARAMETER AutoConfirm
|
||||
Whether to auto confirm ($true) replacement of files (used for headless mode)
|
||||
.EXAMPLE
|
||||
Restore an openHAB instance from the latest backup file
|
||||
Restore-openHAB
|
||||
.EXAMPLE
|
||||
Restore the openHAB distribution in the C:\openHAB2 directory from c:\openHAB2-backup\backup.zip without any user interaction
|
||||
Restore-openHAB -OHDirectory C:\openHAB2 -OHBackups c:\openHAB2-backup -FileName backup.zip -AutoConfirm $true
|
||||
#>
|
||||
|
||||
[CmdletBinding()]
|
||||
param(
|
||||
[Parameter(ValueFromPipeline = $True)]
|
||||
[string]$OHDirectory = ".",
|
||||
[Parameter(ValueFromPipeline = $True)]
|
||||
[string]$OHBackups = "",
|
||||
[Parameter(ValueFromPipeline = $True)]
|
||||
[string]$FileName = "",
|
||||
[Parameter(ValueFromPipeline = $True)]
|
||||
[boolean]$AutoConfirm = $False
|
||||
)
|
||||
|
||||
begin {}
|
||||
process {
|
||||
|
||||
Import-Module $PSScriptRoot\common.psm1 -Force
|
||||
|
||||
Write-Host ""
|
||||
BoxMessage "openHAB 2.x.x restore script" Magenta
|
||||
Write-Host ""
|
||||
|
||||
try {
|
||||
$StartDir = Get-Location -ErrorAction Stop
|
||||
}
|
||||
catch {
|
||||
exit PrintAndReturn "Can't retrieve the current location - exiting" $_
|
||||
}
|
||||
|
||||
# Check for admin (commented out - don't think we need it)
|
||||
# CheckForAdmin
|
||||
|
||||
# Check for openhab running
|
||||
CheckOpenHABRunning
|
||||
|
||||
|
||||
Write-Host -ForegroundColor Cyan "Checking the specified openHAB directory"
|
||||
$OHDirectory = GetOpenHABRoot $OHDirectory
|
||||
if ($OHDirectory -eq "") {
|
||||
exit PrintAndReturn "Could not find the userdata directory! Make sure you are in the openHAB directory or specify the -OHDirectory parameter!"
|
||||
}
|
||||
|
||||
$OHConf = GetOpenHABDirectory "OPENHAB_CONF" "$OHDirectory\conf"
|
||||
$OHUserData = GetOpenHABDirectory "OPENHAB_USERDATA" "$OHDirectory\userdata"
|
||||
|
||||
if (([string]::IsNullOrEmpty($OHBackups))) {
|
||||
$OHBackups = GetOpenHABDirectory "OPENHAB_BACKUPS" "$OHDirectory\backups"
|
||||
}
|
||||
|
||||
if (-NOT (Test-Path -Path $OHConf -PathType Container)) {
|
||||
exit PrintAndReturn "Configuration directory does not exist: $OHConf"
|
||||
}
|
||||
|
||||
if (-NOT (Test-Path -Path $OHUserData -PathType Container)) {
|
||||
exit PrintAndReturn "Userdata directory does not exist: $OHUserData"
|
||||
}
|
||||
|
||||
if (-NOT (Test-Path -Path $OHBackups -PathType Container)) {
|
||||
exit PrintAndReturn "Backups directory does not exist: $OHBackups"
|
||||
}
|
||||
|
||||
|
||||
if ([string]::IsNullOrEmpty($FileName)) {
|
||||
Write-Host -ForegroundColor Yellow "No backup file specified. Finding latest backup: " -NoNewline
|
||||
$FileName = Get-ChildItem -Path $OHBackups -Filter *.zip | Sort LastWriteTime -Descending | Select -Exp Name -First 1
|
||||
Write-Host -ForegroundColor Green $FileName
|
||||
}
|
||||
|
||||
if ([string]::IsNullOrEmpty($FileName)) {
|
||||
throw "No backup filename was specified and no files were found in the $OHBackups - ending"
|
||||
}
|
||||
|
||||
Write-Host -ForegroundColor Cyan "Changing location to $OHDirectory"
|
||||
try {
|
||||
Set-Location -Path $OHDirectory
|
||||
}
|
||||
catch {
|
||||
exit PrintAndReturn "Could not change location to $OHDirectory - exiting" $_
|
||||
}
|
||||
|
||||
$TempDir = "$(GetOpenHABTempDirectory)\restore"
|
||||
Write-Host -ForegroundColor Cyan "Creating temporary restore directory $TempDir"
|
||||
try {
|
||||
CreateDirectory $TempDir
|
||||
}
|
||||
catch {
|
||||
exit PrintAndReturn "Could not create directory $TempDir - exiting" $_
|
||||
}
|
||||
|
||||
Write-Host -ForegroundColor Yellow "Using $OHConf as conf folder"
|
||||
Write-Host -ForegroundColor Yellow "Using $OHUserData as userdata folder"
|
||||
Write-Host -ForegroundColor Yellow "Using $OHBackups as backups folder"
|
||||
Write-Host -ForegroundColor Yellow "Using $TempDir as temporary restore directory"
|
||||
|
||||
$ArchiveName = Join-Path $OHBackups $FileName
|
||||
|
||||
$Failed = $False
|
||||
try {
|
||||
try {
|
||||
Expand-Archive -Path $ArchiveName -DestinationPath $TempDir -Force -ErrorAction Stop
|
||||
}
|
||||
catch {
|
||||
return PrintAndThrow "Could not unzip $ArchiveName to $TempDir - exiting" $_
|
||||
}
|
||||
|
||||
try {
|
||||
Get-Content "$TempDir\backup.properties" -ErrorAction Stop | ForEach-Object {
|
||||
$idx = $_.IndexOf("=")
|
||||
if ($idx -ge 0) {
|
||||
$propName = $_.Substring(0, $idx)
|
||||
$propValue = $_.Substring($idx + 1);
|
||||
if ($propName -eq "version") {
|
||||
$BackupVersion = $propValue
|
||||
}
|
||||
ElseIf ($propName -eq "timestamp") {
|
||||
$BackupTime = $propValue
|
||||
}
|
||||
ElseIf ($propName -eq "user") {
|
||||
$OHUser = $propValue
|
||||
}
|
||||
ElseIf ($propName -eq "group") {
|
||||
$OHGroup = $propValue
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
catch {
|
||||
return PrintAndThrow "Error occurred reading/processing $TempDir\backup.properties - exiting" $_
|
||||
}
|
||||
|
||||
$CurrentVersion = GetOpenHABVersion $OHUserData
|
||||
|
||||
Write-Host ""
|
||||
Write-Host -ForegroundColor Cyan " Backup Information:"
|
||||
Write-Host -ForegroundColor Cyan " -------------------"
|
||||
Write-Host -ForegroundColor Cyan " Backup File | " -NoNewline
|
||||
Write-Host -ForegroundColor Yellow $FileName
|
||||
Write-Host -ForegroundColor Cyan " Backup Version | " -NoNewline
|
||||
Write-Host -ForegroundColor Yellow "$BackupVersion (You are on $CurrentVersion)"
|
||||
Write-Host -ForegroundColor Cyan " Backup Timestamp | " -NoNewline
|
||||
Write-Host -ForegroundColor Yellow $BackupTime
|
||||
Write-Host -ForegroundColor Cyan " Config belongs to user | " -NoNewline
|
||||
Write-Host -ForegroundColor Yellow $OHUser
|
||||
Write-Host -ForegroundColor Cyan " from group | " -NoNewline
|
||||
Write-Host -ForegroundColor Yellow $OHGroup
|
||||
Write-Host ""
|
||||
Write-Host -ForegroundColor Cyan "Any existing files with the same name will be replaced."
|
||||
Write-Host -ForegroundColor Cyan "Any file without a replacement will be deleted."
|
||||
Write-Host ""
|
||||
|
||||
if (-Not $AutoConfirm) {
|
||||
$confirmation = Read-Host "Okay to Continue? [y/N]"
|
||||
if ($confirmation -ne 'y') {
|
||||
exit PrintAndReturn "Cancelling restore"
|
||||
}
|
||||
}
|
||||
|
||||
Write-Host -ForegroundColor Cyan "Copying the $TempDir\conf to $OHConf"
|
||||
try {
|
||||
# Replace the entire directory
|
||||
DeleteIfExists "$OHConf\*" $True
|
||||
Copy-Item -Path "$TempDir\conf\*" -Destination $OHConf -Force -Recurse -ErrorAction Stop
|
||||
}
|
||||
catch {
|
||||
return PrintAndThrow "Error copy $TempDir\conf to $OHConf - exiting" $_
|
||||
}
|
||||
|
||||
Write-Host -ForegroundColor Cyan "Copying the $TempDir\userdata to $OHUserData"
|
||||
try {
|
||||
# Remove everything not in the 'etc' directory (or backups if user put the backups there)
|
||||
# Will overwrite existing files in 'etc' leaving any non-match (ie new) files intact
|
||||
Get-ChildItem -Path "$OHUserData\" -Recurse -ErrorAction Stop | Where-Object { (($_.FullName -NotMatch ".*\\etc\\*.*") -and ($_.FullName -NotMatch ".*\\backups\\*.*")) } | ForEach-Object {
|
||||
DeleteIfExists $_.fullname
|
||||
}
|
||||
Copy-Item -Path "$TempDir\userdata\*" -Destination $OHUserData -Recurse -Force -ErrorAction Stop
|
||||
}
|
||||
catch {
|
||||
return PrintAndThrow "Error copy $TempDir\userdata to $OHUserData - exiting" $_
|
||||
}
|
||||
|
||||
Write-Host -ForegroundColor Green "Restore has completed"
|
||||
|
||||
} catch {
|
||||
# Exception occurred
|
||||
$Failed = $True
|
||||
exit -1
|
||||
}
|
||||
finally {
|
||||
$confirmation = 'n'
|
||||
if ($Failed -eq $True) {
|
||||
Write-Host -ForegroundColor Yellow "Error restoring from $TempDir"
|
||||
$confirmation = Read-Host "Do you wish remove the temporary directory (choose 'n' to restore the files yourself)? [y/N]"
|
||||
}
|
||||
|
||||
if (($Failed -eq $False) -or ($AutoConfirm -eq $True) -or ($confirmation -eq 'y')) {
|
||||
$parent = (Get-Item $TempDir).Parent.FullName
|
||||
try {
|
||||
Write-Host -ForegroundColor Cyan "Removing temporary directory $TempDir"
|
||||
DeleteIfExists $TempDir $True
|
||||
}
|
||||
catch {
|
||||
Write-Host -ForegroundColor Red "Could not delete $TempDir - delete it manually"
|
||||
}
|
||||
|
||||
try {
|
||||
if (-Not (Test-Path "$parent\*")) {
|
||||
Write-Host -ForegroundColor Cyan "Removing temporary directory $parent"
|
||||
DeleteIfExists $parent $True
|
||||
}
|
||||
}
|
||||
catch {
|
||||
Write-Host -ForegroundColor Red "Could not delete $parent - delete it manually"
|
||||
}
|
||||
}
|
||||
|
||||
Write-Host -ForegroundColor Cyan "Setting location back to $StartDir"
|
||||
Set-Location -Path $StartDir -ErrorAction Continue
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user