forked from openhab/openhab-distro
-
Notifications
You must be signed in to change notification settings - Fork 1
/
backup.ps1
110 lines (95 loc) · 5.09 KB
/
backup.ps1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
Function Backup-openHAB {
<#
.SYNOPSIS
Backsup openHAB files.
.DESCRIPTION
The Backup-openHAB function performs the necessary tasks to backup openHAB.
.PARAMETER OHDirectory
The directory where openHAB is installed (default: current directory).
.PARAMETER OHBackups
The directory to backup the files to.
.PARAMETER ZipFileOut
The name of the zip file to create
.EXAMPLE
Backup an openHAB instance to a zip file
Backup-openHAB
.EXAMPLE
Backup the openHAB distribution in the C:\openHAB2 directory to c:\openHAB2-backup\backup.zip
Backup-openHAB -OHDirectory C:\openHAB2 -OHBackups c:\openHAB2-backup -ZipFileOut backup.zip
#>
[CmdletBinding()]
param(
[Parameter(ValueFromPipeline=$True)]
[string]$OHDirectory = ".",
[Parameter(ValueFromPipeline=$True)]
[string]$OHBackups,
[Parameter(ValueFromPipeline=$True)]
[string]$ZipFileOut
)
begin {}
process {
if (!([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity]::GetCurrent()
).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)) {
throw "This script must be run as an Administrator. Start PowerShell with the Run as Administrator option"
}
Write-Host -ForegroundColor Cyan "Checking the specified openHAB directory..."
if (!(Test-Path "$OHDirectory\userdata") -And !(Test-Path -Path "$OHDirectory\conf")) {
throw "$OHDirectory\userdata doesn't exist! Make sure you are in the " +
"openHAB directory or specify the -OHDirectory parameter!"
}
if ($OHDirectory -eq '.') {$OHDirectory = pwd }
if ([Environment]::GetEnvironmentVariable("OPENHAB_CONF", "Machine")) {
$OHConf = [Environment]::GetEnvironmentVariable("OPENHAB_CONF", "Machine")
} else {
$OHConf = "$OHDirectory\conf"
}
if ([Environment]::GetEnvironmentVariable("OPENHAB_USERDATA", "Machine")) {
$OHUserdata = [Environment]::GetEnvironmentVariable("OPENHAB_USERDATA", "Machine")
} else {
$OHUserdata = "$OHDirectory\userdata"
}
if (!($OHBackups)) {
if ([Environment]::GetEnvironmentVariable("OPENHAB_BACKUPS", "Machine")) {
$OHBackups = [Environment]::GetEnvironmentVariable("OPENHAB_BACKUPS", "Machine")
} else {
$OHBackups = "$OHDirectory\backups"
if (!(Test-Path "$OHDirectory\backups")){
mkdir "$OHBackups" | Out-Null
}
}
}
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"
$TempDir=([Environment]::GetEnvironmentVariable("TEMP", "Machine"))+"\openhab"
New-Item $TempDir -Type directory -Force | Out-Null
$VersionLine = Get-Content "$OHDirectory\userdata\etc\version.properties" | Where-Object { $_.Contains("openhab-distro")}
$CurrentVersionIndex = $VersionLine.IndexOf(":")
$CurrentVersion = $VersionLine.Substring($currentVersionIndex + 2)
$timestamp = Get-Date -Format yyyyMMddHHmm
Write-Output "version=$CurrentVersion" | Set-Content "$TempDir\backup.properties"
Write-Output "timestamp=$timestamp" | Add-Content "$TempDir\backup.properties"
Write-Output "user=openhab" | Add-Content "$TempDir\backup.properties"
Write-Output "group=openhab" | Add-Content "$TempDir\backup.properties"
Write-Host -ForegroundColor Cyan "Copying userdata and conf folder contents to temp directory"
mkdir "$TempDir\userdata" | Out-Null
Copy-Item $OHUserdata $TempDir -Recurse -Force
mkdir "$TempDir\conf" | Out-Null
Copy-Item $OHConf $TempDir -Recurse -Force
Write-Host -ForegroundColor Cyan "Removing unnecessary files..."
foreach($FileName in Get-Content "$OHDirectory\runtime\bin\userdata_sysfiles.lst"){
Remove-Item ($TempDir + '\userdata\etc\' + $FileName) -ErrorAction SilentlyContinue
}
Remove-Item ($TempDir + '\userdata\cache') -Recurse -ErrorAction SilentlyContinue
Remove-Item ($TempDir + '\userdata\tmp') -Recurse -ErrorAction SilentlyContinue
Write-Host -ForegroundColor Cyan "Removing backup folder from backup userdata if it exists..."
if (Test-Path "$TempDir\userdata\backups") {Remove-Item "$TempDir\userdata\backups" -Recurse -ErrorAction SilentlyContinue}
Write-Host -ForegroundColor Cyan "Zipping up files..."
Add-Type -AssemblyName System.IO.Compression.FileSystem
if (!($ZipFileOut)) {$ZipFileOut = "$OHBackups\openhab2-backup-$timestamp.zip"}
[System.IO.Compression.ZipFile]::CreateFromDirectory($TempDir, $ZipFileOut)
Write-Host -ForegroundColor Cyan "Removing temp files..."
Remove-Item $TempDir -Recurse -ErrorAction SilentlyContinue
Write-Host -ForegroundColor Green "Backup created at $OHBackups\openhab2-backup-$timestamp.zip"
}
}