private/Assert-ModuleDependency.ps1
|
function Assert-ModuleDependency { [CmdletBinding()] param( [Parameter(Mandatory)] [ValidateSet('ImportExcel', 'powershell-yaml')] [string] $ModuleName ) $ErrorActionPreference = 'Stop' [bool] $IsDebug = $DebugPreference -ne 'SilentlyContinue' [bool] $IsVerbose = $VerbosePreference -ne 'SilentlyContinue' [version] $MinimumVersion = switch ($ModuleName) { 'ImportExcel' { '7.8.10' } 'powershell-yaml' { '0.0.0' } default { '0.0.0' } } Write-Debug "Asserting $ModuleName with $MinimumVersion" # --- Check: Is already loaded? $LoadedModule = Get-Module -Name $ModuleName -ErrorAction Ignore if ($LoadedModule) { if ($LoadedModule.Version -lt $MinimumVersion) { throw "The module '$ModuleName' is loaded in version $($LoadedModule.Version), but version $MinimumVersion or higher is required. Update with: Update-Module $ModuleName" } return } # --- Check: Installed/available? $AvailableModule = Get-Module -Name $ModuleName -ListAvailable -ErrorAction Ignore | Sort-Object Version -Descending | Select-Object -First 1 if (-not $AvailableModule) { throw "The required module '$ModuleName' is not installed. Install with: Install-Module $ModuleName" } if ($AvailableModule.Version -lt $MinimumVersion) { throw "The module '$ModuleName' is installed in version $($AvailableModule.Version), but version $MinimumVersion or higher is required. Update with: Update-Module $ModuleName" } throw "The module '$ModuleName' is installed but not loaded. Import with: Import-Module $ModuleName" } |