166 lines
4.6 KiB
PowerShell
166 lines
4.6 KiB
PowerShell
|
################################################################################
|
||
|
# Logging functions
|
||
|
################################################################################
|
||
|
#region
|
||
|
function Print {
|
||
|
Param (
|
||
|
[String]$message,
|
||
|
[Switch]$NoNewLine
|
||
|
)
|
||
|
if ($NoNewLine) {
|
||
|
Write-Host " $message" -NoNewLine
|
||
|
} else {
|
||
|
Write-Host " $message"
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function Print-Info {
|
||
|
Param (
|
||
|
[String]$message,
|
||
|
[Switch]$NoNewLine
|
||
|
)
|
||
|
if ([String]::IsNullOrEmpty($message)) {
|
||
|
return
|
||
|
}
|
||
|
|
||
|
Write-Host "[" -NoNewLine
|
||
|
Write-Host "+" -NoNewLine -ForegroundColor Green
|
||
|
Write-Host "]" -NoNewLine
|
||
|
|
||
|
if ($NoNewLine) {
|
||
|
Write-Host " $message" -NoNewLine
|
||
|
} else {
|
||
|
Write-Host " $message"
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function Print-Warning {
|
||
|
Param (
|
||
|
[String]$message,
|
||
|
[Switch]$NoNewLine
|
||
|
)
|
||
|
if ([String]::IsNullOrEmpty($message)) {
|
||
|
return
|
||
|
}
|
||
|
|
||
|
Write-Host "[" -NoNewLine
|
||
|
Write-Host "!" -NoNewLine -ForegroundColor Magenta
|
||
|
Write-Host "]" -NoNewLine
|
||
|
|
||
|
if ($NoNewLine) {
|
||
|
Write-Host " $message" -NoNewLine
|
||
|
} else {
|
||
|
Write-Host " $message"
|
||
|
}
|
||
|
}
|
||
|
|
||
|
# Avoid stacktrace to be displayed along side the error message.
|
||
|
# We want things simplistic.
|
||
|
# src.: https://stackoverflow.com/q/38064704/3514658
|
||
|
# src.: https://stackoverflow.com/a/38064769
|
||
|
# We won't use [Console]::*Write* not $host.ui.Write* statements
|
||
|
# as they are UI items
|
||
|
# src.: https://web.archive.org/web/20190720224207/https://docs.microsoft.com/en-us/powershell/developer/cmdlet/types-of-cmdlet-output
|
||
|
# Rewriting the error printing function in C# and calling it from Posh is not
|
||
|
# working either because the redirection to stderr doesn't work under Posh but
|
||
|
# is working when the Posh script is run from cmd.exe. We are giving up here
|
||
|
# and simply using Write-Host without stderr redirection.
|
||
|
function Print-Error {
|
||
|
Param (
|
||
|
[String]$message,
|
||
|
[Switch]$NoNewLine
|
||
|
)
|
||
|
if ([String]::IsNullOrEmpty($message)) {
|
||
|
return
|
||
|
}
|
||
|
|
||
|
Write-Host "[" -NoNewLine
|
||
|
Write-Host "-" -NoNewLine -ForegroundColor Red
|
||
|
Write-Host "]" -NoNewLine
|
||
|
|
||
|
if ($NoNewLine) {
|
||
|
Write-Host " $message" -NoNewLine
|
||
|
} else {
|
||
|
Write-Host " $message"
|
||
|
}
|
||
|
}
|
||
|
# endregion
|
||
|
|
||
|
################################################################################
|
||
|
# OS related functions
|
||
|
################################################################################
|
||
|
# region
|
||
|
|
||
|
function Check-Command($cmdname) {
|
||
|
return [bool](Get-Command -Name $cmdname -ErrorAction SilentlyContinue)
|
||
|
}
|
||
|
|
||
|
function Refresh-Path {
|
||
|
$env:Path =
|
||
|
[System.Environment]::GetEnvironmentVariable("Path", "Machine") +
|
||
|
";" +
|
||
|
[System.Environment]::GetEnvironmentVariable("Path", "User")
|
||
|
}
|
||
|
|
||
|
function Get-RootDir {
|
||
|
return "$(Split-Path $PSCommandPath)\..\"
|
||
|
}
|
||
|
# endregion
|
||
|
|
||
|
################################################################################
|
||
|
# finding tools related functions
|
||
|
################################################################################
|
||
|
# region
|
||
|
function Get-WixDir {
|
||
|
$progFile = (${env:ProgramFiles(x86)}, ${env:ProgramFiles} -ne $null)[0]
|
||
|
$wixDirs = @(Get-ChildItem -Path $progFile -Recurse -Filter "*wix toolset*" -Attributes Directory -Depth 2 -ErrorAction SilentlyContinue)
|
||
|
if ($wixDirs[0] -eq $null) {
|
||
|
return $null
|
||
|
}
|
||
|
$wixDir = Join-Path -Path "$progFile" -ChildPath "$($wixDirs[0])"
|
||
|
$wixDir = Join-Path -Path "$wixDir" -ChildPath "bin"
|
||
|
return $wixDir
|
||
|
}
|
||
|
|
||
|
function Get-SignToolDir {
|
||
|
$progFile = (${env:ProgramFiles(x86)}, ${env:ProgramFiles} -ne $null)[0]
|
||
|
$signToolDir = Join-Path -Path "$progFile" -ChildPath "Windows Kits\10\bin\"
|
||
|
# Check if we are on 64 bits or not.
|
||
|
if ($env:PROCESSOR_ARCHITECTURE -ilike '*64*') {
|
||
|
$arch = "x64"
|
||
|
} else {
|
||
|
$arch = "x86"
|
||
|
}
|
||
|
[array]$signToolExes = (
|
||
|
Get-ChildItem -Path "$signToolDir" -Filter "signtool.exe" -Recurse -ErrorAction SilentlyContinue -Force | % {
|
||
|
if ($_.FullName -ilike '*x64*') {
|
||
|
return $_.FullName;
|
||
|
}
|
||
|
}
|
||
|
)
|
||
|
if ($signToolExes -eq $null -or
|
||
|
[string]::IsNullOrEmpty($signToolExes[0])) {
|
||
|
return $null
|
||
|
}
|
||
|
|
||
|
if (Test-Path $signToolExes[0]) {
|
||
|
return Split-Path $signToolExes[0]
|
||
|
}
|
||
|
return $null
|
||
|
}
|
||
|
|
||
|
function Get-NpmDir {
|
||
|
# npm is always installed as a nodejs dependency. 64 bits version available.
|
||
|
# C:\Program Files\nodejs\npm with a shortcut leading to
|
||
|
# C:\Program Files\nodejs\node_modules\npm\bin
|
||
|
$progFile = ${env:ProgramFiles}
|
||
|
$npmDir = Join-Path -Path "$progFile" -ChildPath "nodejs"
|
||
|
if ([System.IO.File]::Exists("$npmDir\npm.cmd")) {
|
||
|
return $npmDir
|
||
|
}
|
||
|
return $null
|
||
|
}
|
||
|
|
||
|
# endregion
|
||
|
|