Private/Initialize-Module.ps1
<#
.Synopsis Created on: 30/12/2024 Updated on: 01/01/2025 Created by: Ben Whitmore Filename: Initialize-Module.ps1 .Description Function to install and import required PowerShell modules .PARAMETER Modules Array of module names to install/import .PARAMETER PackageProvider Package provider required for module installation .PARAMETER ModuleScope Scope for module installation (CurrentUser/AllUsers) .PARAMETER LogId Component name for logging #> function Initialize-Module { [CmdletBinding()] param( [Parameter(Mandatory = $true, HelpMessage = 'Array of module names to install')] [array]$Modules, [Parameter(Mandatory = $false, HelpMessage = 'Package provider required for module installation')] [string]$PackageProvider = "NuGet", [Parameter(Mandatory = $false, HelpMessage = 'Scope for module installation')] [ValidateSet('CurrentUser', 'AllUsers')] [string]$ModuleScope = "CurrentUser", [Parameter(Mandatory = $false, HelpMessage = 'Component name for logging')] [string]$LogId = $($MyInvocation.MyCommand).Name ) begin { Write-LogAndHost -Message ("Function: Initialize-Module was called for module(s): {0}" -f ($Modules -join ', ')) -LogId $LogId -ForegroundColor Cyan } process { try { # Check PackageProvider if (-not (Get-PackageProvider -ListAvailable -Name $PackageProvider)) { Write-LogAndHost -Message ("PackageProvider not found. Installing '{0}'" -f $PackageProvider) -LogId $LogId -ForegroundColor Cyan Install-PackageProvider -Name $PackageProvider -ForceBootstrap -Confirm:$false } # Process each module foreach ($Module in $Modules) { if (-not (Get-Module -ListAvailable -Name $Module)) { Write-LogAndHost -Message ("Installing module '{0}' in scope '{1}'" -f $Module, $ModuleScope) -LogId $LogId -ForegroundColor Cyan Install-Module -Name $Module -Scope $ModuleScope -AllowClobber -Force -Confirm:$false } if (-not (Get-Module -Name $Module)) { Write-LogAndHost -Message ("Importing module '{0}'" -f $Module) -LogId $LogId -ForegroundColor Cyan try { # Import the module Import-Module $Module } catch { Write-LogAndHost -Message ("Error importing module '{0}': {1}" -f $Module, $_.Exception.Message) -LogId $LogId -Severity 3 break } } else { Write-LogAndHost -Message ("Module '{0}' already imported" -f $Module) -LogId $LogId -ForegroundColor Green } } } catch { Write-LogAndHost -Message ("Module installation failed: {0}" -f $_.Exception.Message) -LogId $LogId -Severity 3 throw } } } |