public/Invoke-PsResourceMaintenance.ps1
function Invoke-PsResourceMaintenance { <# .SYNOPSIS Checks for updates to installed PowerShell modules and optionally updates them. .DESCRIPTION This function checks all installed PowerShell modules for updates and can optionally update them. .PARAMETER UpdateAll Updates all installed modules without prompting for confirmation. .PARAMETER Quiet Suppresses output messages. .EXAMPLE Invoke-PsResourceMaintenance -UpdateAll Updates all installed PowerShell modules to their latest versions. .EXAMPLE Invoke-PsResourceMaintenance -Quiet Checks for updates to installed PowerShell modules without displaying output messages. .LINK https://github.com/Skatterbrainz/helium/blob/master/docs/Invoke-PsResourceMaintenance.md #> [CmdletBinding()] param( [parameter(Mandatory = $False)][switch]$UpdateAll, [parameter(Mandatory = $False)][switch]$Quiet ) # get all installed modules and latest version of each $modules = Get-InstalledModule | Sort-Object Name if (!$Quiet.IsPresent) { Write-Host "$($modules.Count) modules found." } # check each module for newer versions available $updates = $modules | ForEach-Object { $module = $_ if (!$Quiet.IsPresent) { Write-Host "Checking module: $($module.Name)" } $available = Find-PSResource -Name $module.Name -ErrorAction SilentlyContinue if ($available -and $available.Version -gt $module.Version) { if ($UpdateAll.IsPresent) { if (!$Quiet.IsPresent) { Write-Host "Updating module: $($module.Name) to $($available.Version.ToString())" -ForegroundColor Yellow } Update-PSResource -Name $module.Name -Force -ErrorAction SilentlyContinue } else { # return the module with its current and latest version [PSCustomObject]@{ Name = $module.Name Current = $module.Version Latest = $available.Version Compliant = $False } } } else { [PSCustomobject]@{ Name = $module.Name Current = $module.Version Latest = $module.Version Compliant = $True } } } $updates } |