From bf96fd2399e7eb7e71783582402be43607a56f60 Mon Sep 17 00:00:00 2001 From: Stephan Yelle Date: Thu, 26 Feb 2026 20:29:31 -0500 Subject: [PATCH] Update src/svsmsp.install.ps1 --- src/svsmsp.install.ps1 | 43 +++++++++++++++++++++++++++++++++--------- 1 file changed, 34 insertions(+), 9 deletions(-) diff --git a/src/svsmsp.install.ps1 b/src/svsmsp.install.ps1 index d354679..4f78409 100644 --- a/src/svsmsp.install.ps1 +++ b/src/svsmsp.install.ps1 @@ -54,19 +54,44 @@ function Install-SVSMSP { } } + function Ensure-PowerShellGetV2 { + Ensure-NuGetProvider + try { + Remove-Module PowerShellGet,PackageManagement -Force -ErrorAction SilentlyContinue + + # Prefer modern versions (avoid PowerShellGet 1.0.0.1) + Import-Module PackageManagement -RequiredVersion 1.4.8.1 -Force -ErrorAction Stop + Import-Module PowerShellGet -RequiredVersion 2.2.5 -Force -ErrorAction Stop + return $true + } catch { + Write-LogHybrid "Failed to load required PowerShellGet/PackageManagement versions: $($_.Exception.Message)" "Warning" "SVSModule" -LogToEvent + return $false + } + } + function Get-InstallStrategy { # 1) PSResourceGet if present/usable - if (Ensure-PSResourceGet) { - if (Get-Command Register-PSResourceRepository -ErrorAction SilentlyContinue) { return "PSResourceGet" } - } + if (Ensure-PSResourceGet) { return "PSResourceGet" } - # 2) PowerShellGet v2 cmdlets if present - if (Get-Command Register-PSRepository -ErrorAction SilentlyContinue) { return "PowerShellGetV2" } + # 2) Only use PSGet v2 if we can force-load the good versions + if (Ensure-PowerShellGetV2) { return "PowerShellGetV2" } # 3) NuGet provider fallback return "NuGetProvider" } + function Import-InstalledModuleOrThrow { + param([Parameter(Mandatory=$true)][string]$Name) + + try { + Import-Module $Name -Force -ErrorAction Stop + } catch { + Write-LogHybrid "Module import failed for '$Name': $($_.Exception.Message)" "Error" "SVSModule" -LogToEvent + throw + } + } + + function Register-Repo_PSResourceGet { Write-LogHybrid "Registering PSResourceGet repo $NewRepositoryName…" "Info" "SVSModule" -LogToEvent if (-not (Get-PSResourceRepository -Name $NewRepositoryName -ErrorAction SilentlyContinue)) { @@ -77,7 +102,7 @@ function Install-SVSMSP { function Install-Module_PSResourceGet { Write-LogHybrid "Installing module $NewModuleName via PSResourceGet…" "Info" "SVSModule" -LogToEvent Install-PSResource -Name $NewModuleName -Repository $NewRepositoryName -Scope AllUsers -Reinstall -ErrorAction Stop - Import-Module $NewModuleName -Force -ErrorAction SilentlyContinue + Import-InstalledModuleOrThrow -Name $NewModuleName } function Register-Repo_PowerShellGetV2 { @@ -90,7 +115,7 @@ function Install-SVSMSP { function Install-Module_PowerShellGetV2 { Write-LogHybrid "Installing module $NewModuleName via PowerShellGet…" "Info" "SVSModule" -LogToEvent Install-Module -Name $NewModuleName -Repository $NewRepositoryName -Scope AllUsers -Force -ErrorAction Stop - Import-Module $NewModuleName -Force -ErrorAction SilentlyContinue + Import-InstalledModuleOrThrow -Name $NewModuleName } function Register-Repo_NuGetProvider { @@ -131,7 +156,7 @@ function Install-SVSMSP { New-Item -ItemType Directory -Path $dest -Force | Out-Null Copy-Item -Path (Join-Path $moduleRoot '*') -Destination $dest -Recurse -Force - Import-Module $NewModuleName -Force -ErrorAction SilentlyContinue + Import-InstalledModuleOrThrow -Name $NewModuleName } catch { Write-LogHybrid "NuGet promotion step skipped/failed: $($_.Exception.Message)" "Warning" "SVSModule" -LogToEvent } @@ -269,7 +294,7 @@ function Install-SVSMSP { Install-Module_PSResourceGet } "PowerShellGetV2" { - Ensure-NuGetProvider + if (-not (Ensure-PowerShellGetV2)) { throw "PowerShellGetV2 not usable on this system." } Register-Repo_PowerShellGetV2 Install-Module_PowerShellGetV2 }