Check for Module Updates

It seems to me that the topic of finding or detecting module updates on the PowerShell Gallery has gotten a lot of interest over the last few days. So I thought I’d contribute my bit of code to check currently installed modules against their online versions in the PowerShell Gallery.

I have a PowerShell script I called Check-ModuleUpdate, which you can find as a gist on Github.

The script gets all currently installed scripts and filters out those that do not have a value for the RepositorySourceLocation.  On my computer I’ve only installed from the PSGallery so the links are all the same. If you will have multiple locations you’ll need to modify the code, especially with Find-Module to accommodate the differences.

The script then uses a ForEach loop to get the online version so that it can compare it with the installed version. The script writes a custom object to the pipeline. I’ve also included code to indicate if you have multiple versions of a module installed.

image

Another use is to pipe to Out-Gridview and use that as an object picker to update selected modules.

I’ll admit this isn’t a perfect script. You might even prefer to have it as a function. So I’ll leave enhancements and updates to you.

8 thoughts on “Check for Module Updates

  1. hello, really nice ! i added this :
    Path = $module.ModuleBase
    At end of the pscustomobject.
    Like this if i have more than one version of a module, i can see where they are ..

    • Good call. I thought about this as well, got sidetracked, and never added it. I think I’ll update my version as well.

  2. I’m already using your function compare-module which is great.
    Doesn’t this have the same functionality as Check-ModuleUpdate or am I missing something..?

  3. That is indeed helpful. Not sure why I missed that command. Unless it is something the product team slipped into 5.1 release. I don’t recall it in v5.

  4. I found the $gallery = $modules.where({$_.repositorysourcelocation}) check errored out in PS4, so I had replaced it with $gallery = $modules.where({$_.PrivateData}), but thanks to APraestegaard’s suggestion above, I’m changing it to rely on the collection from Get-InstalledModule (which appears to be available in my PS 4.0).

    I also moved the PSGallery check out of the loop, finding it more efficient to load a full inventory from the online gallery, and then iterate through comparing my local modules with the version of the gallery module, instead of querying via Find-Module for each installed module (I found the 1 full Find-Module -Repository PSGallery took my about 10 seconds, while each individual Find-Module -name $module.name -Repository PSGallery took nearly 7 sec. x the dozen or so locally installed modules).

Comments are closed.