Checking you are up to date with PowerCLI

Now that PowerCLI is a module and in the PowerShell Gallery there have been a lot of releases and bug fixes, you would be forgiven for not having the latest version installed or even knowing what the latest version is.

With this in mind and with the latest 6.5.3 version triggering this in my mind, I created a function that checks your installed PowerCLI version against the one thats in the PowerShell Gallery online and lets you know if there is a new version.

Now of course this can be run manually and it will return the results letting you know which modules are out of date:

And once completed of course its easy to update PowerCLI to the latest version:

Even better why not add it to your profile. It does take a couple of seconds to run so maybe you will want to run it on a certain day past a certain time in your profile so it doesn’t slow down every launch of PowerShell you have, here is an example of what I have in my profile where I check every Wednesday after 2PM.

if ( ((Get-Date).tostring('%H') -ge "14" ) -and ( (Get-Date).DayofWeek -eq "Wednesday" ) ) {

Check-PowerCLIUpdate Script

Here is the function that allows you to check for updates:

Function Check-PowerCLIUpdate {
    #Based on great module by Jeff Hicks here:

    # Getting installed modules
    $modules = Get-Module -ListAvailable VMware* | Sort Version -Descending | Select-object -Unique

    #Filter to modules from the PSGallery
    $gallery = $modules.where({$_.repositorysourcelocation})

    # Comparing to online versions
    $AllUpdatedModules = @()
    foreach ($module in $gallery) {

         #find the current version in the gallery
         Try {
            $online = Find-Module -Name $ -Repository PSGallery -ErrorAction Stop
         Catch {
            Write-Warning "Module $($ was not found in the PSGallery and therefore not checked for an update"

         #compare versions
         if ($online.version -gt $module.version) {
            $AllUpdatedModules += new-object PSObject -Property @{
                Name = $
                InstalledVersion = $module.version
                OnlineVersion = $online.version
                Update = $True
                Path = $module.modulebase
    $AllUpdatedModules | Format-Table
    #Check completed


Leave a Reply