Files
greenhouse-openHAB/runtime/bin/common.psm1

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"