Related to #710: harden Windows installer arch detection
This commit is contained in:
parent
1ed69d35b6
commit
1d0d23d237
2 changed files with 150 additions and 22 deletions
|
|
@ -93,6 +93,68 @@ function Test-AgentRegistration {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function Resolve-PulseArchitectureCandidate {
|
||||||
|
param(
|
||||||
|
[string]$CandidateValue
|
||||||
|
)
|
||||||
|
|
||||||
|
if ([string]::IsNullOrWhiteSpace($CandidateValue)) {
|
||||||
|
return $null
|
||||||
|
}
|
||||||
|
|
||||||
|
$normalized = $CandidateValue.Trim()
|
||||||
|
$upper = $normalized.ToUpperInvariant()
|
||||||
|
|
||||||
|
if ($upper -match 'ARM64|AARCH64') {
|
||||||
|
return [pscustomobject]@{ OsLabel = 'Arm64'; DownloadArch = 'arm64' }
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($upper -match 'AMD64|X64|64-BIT') {
|
||||||
|
return [pscustomobject]@{ OsLabel = 'X64'; DownloadArch = 'amd64' }
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($upper -match 'X86|I386|IA32|32-BIT') {
|
||||||
|
return [pscustomobject]@{ OsLabel = 'X86'; DownloadArch = '386' }
|
||||||
|
}
|
||||||
|
|
||||||
|
return $null
|
||||||
|
}
|
||||||
|
|
||||||
|
function Get-PulseArchitecture {
|
||||||
|
$candidateSources = @(
|
||||||
|
{ [System.Runtime.InteropServices.RuntimeInformation]::OSArchitecture },
|
||||||
|
{ [System.Runtime.InteropServices.RuntimeInformation,mscorlib]::OSArchitecture },
|
||||||
|
{ (Get-CimInstance -ClassName Win32_OperatingSystem -Property OSArchitecture -ErrorAction Stop).OSArchitecture },
|
||||||
|
{ (Get-WmiObject -Class Win32_OperatingSystem -ErrorAction Stop).OSArchitecture },
|
||||||
|
{ $env:PROCESSOR_ARCHITEW6432 },
|
||||||
|
{ $env:PROCESSOR_ARCHITECTURE }
|
||||||
|
)
|
||||||
|
|
||||||
|
foreach ($source in $candidateSources) {
|
||||||
|
try {
|
||||||
|
$value = & $source
|
||||||
|
} catch {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
if (-not $value) {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
$valueString = $value.ToString()
|
||||||
|
$resolved = Resolve-PulseArchitectureCandidate -CandidateValue $valueString
|
||||||
|
if ($resolved) {
|
||||||
|
return [pscustomobject]@{
|
||||||
|
OsLabel = $resolved.OsLabel
|
||||||
|
DownloadArch = $resolved.DownloadArch
|
||||||
|
RawValue = $valueString.Trim()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $null
|
||||||
|
}
|
||||||
|
|
||||||
Write-Host ""
|
Write-Host ""
|
||||||
$banner = "=" * 59
|
$banner = "=" * 59
|
||||||
Write-Host $banner -ForegroundColor Cyan
|
Write-Host $banner -ForegroundColor Cyan
|
||||||
|
|
@ -133,21 +195,23 @@ Write-Host " Interval: $Interval"
|
||||||
Write-Host " Install Path: $InstallPath"
|
Write-Host " Install Path: $InstallPath"
|
||||||
Write-Host ""
|
Write-Host ""
|
||||||
|
|
||||||
# Determine architecture
|
# Determine architecture (support both legacy Windows PowerShell and pwsh)
|
||||||
$osArch = [System.Runtime.InteropServices.RuntimeInformation]::OSArchitecture
|
$archInfo = Get-PulseArchitecture
|
||||||
switch ($osArch) {
|
if (-not $archInfo) {
|
||||||
'Arm64' { $arch = 'arm64' }
|
PulseError "Unable to determine operating system architecture"
|
||||||
'X64' { $arch = 'amd64' }
|
exit 1
|
||||||
'X86' { $arch = '386' }
|
|
||||||
default {
|
|
||||||
PulseError "Unsupported architecture: $osArch"
|
|
||||||
exit 1
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
$osArch = $archInfo.OsLabel
|
||||||
|
$arch = $archInfo.DownloadArch
|
||||||
|
$rawArchValue = $archInfo.RawValue
|
||||||
$downloadUrl = "$PulseUrl/download/pulse-host-agent?platform=windows&arch=$arch"
|
$downloadUrl = "$PulseUrl/download/pulse-host-agent?platform=windows&arch=$arch"
|
||||||
|
|
||||||
PulseInfo "System Information:"
|
PulseInfo "System Information:"
|
||||||
Write-Host " OS Architecture: $osArch"
|
if ($rawArchValue -and $rawArchValue -ne $osArch) {
|
||||||
|
Write-Host " OS Architecture: $osArch (reported as '$rawArchValue')"
|
||||||
|
} else {
|
||||||
|
Write-Host " OS Architecture: $osArch"
|
||||||
|
}
|
||||||
Write-Host " Download Architecture: $arch"
|
Write-Host " Download Architecture: $arch"
|
||||||
Write-Host " Download URL: $downloadUrl"
|
Write-Host " Download URL: $downloadUrl"
|
||||||
Write-Host ""
|
Write-Host ""
|
||||||
|
|
|
||||||
|
|
@ -93,6 +93,68 @@ function Test-AgentRegistration {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function Resolve-PulseArchitectureCandidate {
|
||||||
|
param(
|
||||||
|
[string]$CandidateValue
|
||||||
|
)
|
||||||
|
|
||||||
|
if ([string]::IsNullOrWhiteSpace($CandidateValue)) {
|
||||||
|
return $null
|
||||||
|
}
|
||||||
|
|
||||||
|
$normalized = $CandidateValue.Trim()
|
||||||
|
$upper = $normalized.ToUpperInvariant()
|
||||||
|
|
||||||
|
if ($upper -match 'ARM64|AARCH64') {
|
||||||
|
return [pscustomobject]@{ OsLabel = 'Arm64'; DownloadArch = 'arm64' }
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($upper -match 'AMD64|X64|64-BIT') {
|
||||||
|
return [pscustomobject]@{ OsLabel = 'X64'; DownloadArch = 'amd64' }
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($upper -match 'X86|I386|IA32|32-BIT') {
|
||||||
|
return [pscustomobject]@{ OsLabel = 'X86'; DownloadArch = '386' }
|
||||||
|
}
|
||||||
|
|
||||||
|
return $null
|
||||||
|
}
|
||||||
|
|
||||||
|
function Get-PulseArchitecture {
|
||||||
|
$candidateSources = @(
|
||||||
|
{ [System.Runtime.InteropServices.RuntimeInformation]::OSArchitecture },
|
||||||
|
{ [System.Runtime.InteropServices.RuntimeInformation,mscorlib]::OSArchitecture },
|
||||||
|
{ (Get-CimInstance -ClassName Win32_OperatingSystem -Property OSArchitecture -ErrorAction Stop).OSArchitecture },
|
||||||
|
{ (Get-WmiObject -Class Win32_OperatingSystem -ErrorAction Stop).OSArchitecture },
|
||||||
|
{ $env:PROCESSOR_ARCHITEW6432 },
|
||||||
|
{ $env:PROCESSOR_ARCHITECTURE }
|
||||||
|
)
|
||||||
|
|
||||||
|
foreach ($source in $candidateSources) {
|
||||||
|
try {
|
||||||
|
$value = & $source
|
||||||
|
} catch {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
if (-not $value) {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
$valueString = $value.ToString()
|
||||||
|
$resolved = Resolve-PulseArchitectureCandidate -CandidateValue $valueString
|
||||||
|
if ($resolved) {
|
||||||
|
return [pscustomobject]@{
|
||||||
|
OsLabel = $resolved.OsLabel
|
||||||
|
DownloadArch = $resolved.DownloadArch
|
||||||
|
RawValue = $valueString.Trim()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $null
|
||||||
|
}
|
||||||
|
|
||||||
Write-Host ""
|
Write-Host ""
|
||||||
$banner = "=" * 59
|
$banner = "=" * 59
|
||||||
Write-Host $banner -ForegroundColor Cyan
|
Write-Host $banner -ForegroundColor Cyan
|
||||||
|
|
@ -133,21 +195,23 @@ Write-Host " Interval: $Interval"
|
||||||
Write-Host " Install Path: $InstallPath"
|
Write-Host " Install Path: $InstallPath"
|
||||||
Write-Host ""
|
Write-Host ""
|
||||||
|
|
||||||
# Determine architecture
|
# Determine architecture (support both legacy Windows PowerShell and pwsh)
|
||||||
$osArch = [System.Runtime.InteropServices.RuntimeInformation]::OSArchitecture
|
$archInfo = Get-PulseArchitecture
|
||||||
switch ($osArch) {
|
if (-not $archInfo) {
|
||||||
'Arm64' { $arch = 'arm64' }
|
PulseError "Unable to determine operating system architecture"
|
||||||
'X64' { $arch = 'amd64' }
|
exit 1
|
||||||
'X86' { $arch = '386' }
|
|
||||||
default {
|
|
||||||
PulseError "Unsupported architecture: $osArch"
|
|
||||||
exit 1
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
$osArch = $archInfo.OsLabel
|
||||||
|
$arch = $archInfo.DownloadArch
|
||||||
|
$rawArchValue = $archInfo.RawValue
|
||||||
$downloadUrl = "$PulseUrl/download/pulse-host-agent?platform=windows&arch=$arch"
|
$downloadUrl = "$PulseUrl/download/pulse-host-agent?platform=windows&arch=$arch"
|
||||||
|
|
||||||
PulseInfo "System Information:"
|
PulseInfo "System Information:"
|
||||||
Write-Host " OS Architecture: $osArch"
|
if ($rawArchValue -and $rawArchValue -ne $osArch) {
|
||||||
|
Write-Host " OS Architecture: $osArch (reported as '$rawArchValue')"
|
||||||
|
} else {
|
||||||
|
Write-Host " OS Architecture: $osArch"
|
||||||
|
}
|
||||||
Write-Host " Download Architecture: $arch"
|
Write-Host " Download Architecture: $arch"
|
||||||
Write-Host " Download URL: $downloadUrl"
|
Write-Host " Download URL: $downloadUrl"
|
||||||
Write-Host ""
|
Write-Host ""
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue