In the most simplistic case, you can check all your installed modules for updates with just a one-liner (remove -WhatIf to actually perform the update):
PS C:\> Get-InstalledModule | Update-Module -WhatIf
Get-InstalledModule lists all modules that were installed in a “managed” way (using Install-Module) and includes information about where the module was installed from (i.e. PowerShell Gallery website). That’s the information Update-Module needs to be able to check for new versions.
If you’re just interested to see whether any of your modules need an update, and if you are focused on modules installed from the PowerShell Gallery only, then here’s a much faster way to check for updates:
function Test-GalleryModuleUpdate { param ( [Parameter(Mandatory,ValueFromPipelineByPropertyName)] [string] $Name, [Parameter(Mandatory,ValueFromPipelineByPropertyName)] [version] $Version, [switch] $NeedUpdateOnly ) process { $URL = "https://www.powershellgallery.com/packages/$Name" $page = Invoke-WebRequest -Uri $URL -UseBasicParsing -Maximum 0 -ea Ignore [version]$latest = Split-Path -Path $page.Headers.Location -Leaf $needsupdate = $Latest -gt $Version if ($needsupdate -or (!$NeedUpdateOnly.IsPresent)) { [PSCustomObject]@{ ModuleName = $Name CurrentVersion = $Version LatestVersion = $Latest NeedsUpdate = $needsupdate } } } } Get-InstalledModule | Where-Object Repository -eq PSGallery | Test-GalleryModuleUpdate #-NeedUpdateOnly
The function Test-GalleryModuleUpdate takes the modules emitted by Get-InstalledModule and checks whether there is a new version published at powershellgallery.com. This check is done by URL resolution in a very fast way. If you add the -NeedUpdateOnly switch parameter, then Test-GalleryModuleUpdate returns only modules that need updates (may be none).
Here is a sample output:
ModuleName CurrentVersion LatestVersion NeedsUpdate ---------- -------------- ------------- ----------- ImportExcel 7.5.2 7.5.3 True PSEventViewer 1.0.17 1.0.22 True Az.Tools.P... 0.5.0 1.0.1 True Microsoft.... 16.0.21116.... 16.0.22413... True MicrosoftT... 2.3.1 4.4.1 True PSReadLine 2.2.2 2.2.5 True PSWriteHTML 0.0.172 0.0.174 True ...