224 lines
6.2 KiB
PowerShell
224 lines
6.2 KiB
PowerShell
#Requires -Version 5.0
|
|
Set-StrictMode -Version Latest
|
|
|
|
function CheckForAdmin() {
|
|
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"
|
|
}
|
|
}
|
|
function GetOpenHABRoot() {
|
|
param(
|
|
[Parameter(Mandatory = $true)]
|
|
[string] $dirName
|
|
)
|
|
|
|
function IsOpenHabRoot() {
|
|
param(
|
|
[Parameter(Mandatory = $true)]
|
|
[string] $dirName
|
|
)
|
|
return ((Test-Path "$dirName\userdata") -And (Test-Path -Path "$dirName\conf")) -Or (Test-Path -Path "$dirName\runtime");
|
|
}
|
|
|
|
if ($dirName -eq ".") {
|
|
$dirName = $PWD
|
|
}
|
|
|
|
if (-Not (IsOpenHabRoot $dirName)) {
|
|
$dirName = GetOpenHABDirectory "OPENHAB_HOME" ""
|
|
if (-NOT $dirName -eq "") {
|
|
return $dirName
|
|
}
|
|
|
|
$dirName = $PSScriptRoot;
|
|
while ($dirName -ne "" -and -not(IsOpenHabRoot $dirName)) {
|
|
$dirName = Split-Path -Path $dirName -Parent
|
|
}
|
|
}
|
|
|
|
return $dirName
|
|
}
|
|
|
|
function CreateDirectory() {
|
|
param(
|
|
[Parameter(Mandatory = $True)]
|
|
[string] $itemName
|
|
)
|
|
|
|
New-Item -Path $itemName -ItemType directory -Force -Confirm:$False -ErrorAction Stop | Out-Null
|
|
}
|
|
|
|
function CreateFile() {
|
|
param(
|
|
[Parameter(Mandatory = $True)]
|
|
[string] $itemName
|
|
)
|
|
|
|
New-Item -Path $itemName -ItemType file -Force -Confirm:$False -ErrorAction Stop | Out-Null
|
|
}
|
|
|
|
function DeleteIfExists() {
|
|
param(
|
|
[Parameter(Mandatory = $True)]
|
|
[string] $itemName,
|
|
[Parameter(Mandatory = $False)]
|
|
[boolean] $fallback
|
|
|
|
)
|
|
|
|
if (Test-Path $itemName -PathType Container) {
|
|
try {
|
|
Remove-Item $itemName -Force -Recurse -Confirm:$False -ErrorAction Stop | Out-Null
|
|
} catch {
|
|
# if fallback, try to remove all the files (recursively) instead of the directory
|
|
if ($fallback -eq $True) {
|
|
Get-ChildItem $itemName -File -Recurse -ErrorAction Stop | Remove-Item -Force -ErrorAction Stop
|
|
} else {
|
|
throw $_
|
|
}
|
|
}
|
|
}
|
|
ElseIf (Test-Path $itemName) {
|
|
# note: -Recurse because sometimes check above doesn't catch a directory for some reason
|
|
Remove-Item $itemName -Force -Recurse -Confirm:$False -ErrorAction Stop | Out-Null
|
|
}
|
|
}
|
|
|
|
function GetOpenHABVersion() {
|
|
param(
|
|
[Parameter(Mandatory = $True)]
|
|
[string] $OHUserData
|
|
)
|
|
|
|
if (Test-Path "$OHUserData\etc\version.properties" -ErrorAction SilentlyContinue) {
|
|
$VersionLine = Get-Content "$OHUserData\etc\version.properties" -ErrorAction SilentlyContinue | Where-Object { $_.Contains("openhab-distro")} -ErrorAction SilentlyContinue
|
|
$CurrentVersionIndex = $VersionLine.IndexOf(":")
|
|
if ($CurrentVersionIndex -gt -1) {
|
|
return $VersionLine.Substring($currentVersionIndex + 2)
|
|
}
|
|
}
|
|
|
|
return "";
|
|
}
|
|
|
|
function GetOpenHABTempDirectory() {
|
|
return (GetOpenHABDirectory "TEMP" "c:\temp") + "\openhab"
|
|
}
|
|
|
|
function GetOpenHABDirectory() {
|
|
param(
|
|
[Parameter(Mandatory = $True)]
|
|
[string] $environmentVariable,
|
|
[Parameter(Mandatory = $True)]
|
|
[AllowEmptyString()]
|
|
[string] $defaultValue
|
|
|
|
)
|
|
# Check the user variables first, then the process variables then the machine variables
|
|
$setting = "$([Environment]::GetEnvironmentVariable($environmentVariable, "User"))"
|
|
if ($setting) {
|
|
return $setting
|
|
}
|
|
|
|
$setting = "$([Environment]::GetEnvironmentVariable($environmentVariable, "Process"))"
|
|
if ($setting) {
|
|
return $setting
|
|
}
|
|
|
|
$setting = "$([Environment]::GetEnvironmentVariable($environmentVariable, "Machine"))"
|
|
if ($setting) {
|
|
return $setting
|
|
}
|
|
|
|
return $defaultValue
|
|
}
|
|
|
|
function CheckOpenHABRunning() {
|
|
$m = (Get-WmiObject Win32_Process -Filter "name = 'java.exe'" |
|
|
Where-Object { $_.CommandLine.Contains("openhab") } | Measure-Object)
|
|
if ($m.Count -gt 0) {
|
|
throw "openHAB seems to be running, stop it before running this update script"
|
|
}
|
|
|
|
}
|
|
function GetRelativePath() {
|
|
param(
|
|
[Parameter(Mandatory = $True)]
|
|
[string] $root,
|
|
[Parameter(Mandatory = $True)]
|
|
[string] $absPath
|
|
)
|
|
|
|
$tmp = Get-Location -ErrorAction Stop
|
|
Set-Location $root -ErrorAction Stop
|
|
try {
|
|
return Resolve-Path $absPath -Relative -ErrorAction Stop
|
|
}
|
|
finally {
|
|
Set-Location $tmp -ErrorAction Stop
|
|
}
|
|
}
|
|
|
|
function PrintAndReturn {
|
|
param(
|
|
[Parameter(Mandatory = $True)]
|
|
[string] $msg,
|
|
[Parameter(Mandatory = $False)]
|
|
[System.Management.Automation.ErrorRecord] $ex,
|
|
[Parameter(Mandatory = $False)]
|
|
[int] $rc
|
|
)
|
|
BoxMessage $msg Red
|
|
|
|
if ($ex) {
|
|
Write-Error $ex
|
|
}
|
|
|
|
if ($rc) {
|
|
return $rc
|
|
}
|
|
return -1
|
|
}
|
|
|
|
function PrintAndThrow {
|
|
param(
|
|
[Parameter(Mandatory = $True)]
|
|
[string] $msg,
|
|
[Parameter(Mandatory = $True)]
|
|
[System.Management.Automation.ErrorRecord] $ex
|
|
)
|
|
BoxMessage $msg Red
|
|
Write-Error $ex
|
|
|
|
throw $ex.Exception
|
|
}
|
|
|
|
function BoxMessage {
|
|
param(
|
|
[Parameter(Mandatory = $True)]
|
|
[string] $msg,
|
|
[Parameter(Mandatory = $True)]
|
|
[System.ConsoleColor] $color
|
|
|
|
)
|
|
$pad = "#".PadRight($msg.Length + 6, "#")
|
|
Write-Host -ForegroundColor $color $pad
|
|
Write-Host -ForegroundColor $color "# $msg #"
|
|
Write-Host -ForegroundColor $color $pad
|
|
}
|
|
|
|
Export-ModuleMember -Function "BoxMessage"
|
|
Export-ModuleMember -Function "CheckForAdmin"
|
|
Export-ModuleMember -Function "CheckOpenHABRunning"
|
|
Export-ModuleMember -Function "CreateDirectory"
|
|
Export-ModuleMember -Function "CreateFile"
|
|
Export-ModuleMember -Function "DeleteIfExists"
|
|
Export-ModuleMember -Function "GetOpenHABRoot"
|
|
Export-ModuleMember -Function "GetOpenHABTempDirectory"
|
|
Export-ModuleMember -Function "GetOpenHABDirectory"
|
|
Export-ModuleMember -Function "GetOpenHABVersion"
|
|
Export-ModuleMember -Function "GetRelativePath"
|
|
Export-ModuleMember -Function "PrintAndReturn"
|
|
Export-ModuleMember -Function "PrintAndThrow"
|