Public/Get-ModuleUpdate.ps1

enum ModuleUpdateStatus {
    Unknown
    PSGalleryNotFound
    UpToDate
    UpdateNeed
}

class ModuleInfo {
    [string]$Name
    [version]$LocalVersion
    [version]$GalleryVersion
    [ModuleUpdateStatus]$UpdateStatus
}


<#
.SYNOPSIS
    Übersicht von Module die aktualisiert werden könnte.
.DESCRIPTION
    Alle lokalen installierten Modulen werden mit einer vorhandenen Version in der Power Shell Gallery verglichen obe eine neuere Modulversion vorhanden ist.
#>

function Get-ModuleUpdate {
    [CmdletBinding()]
    param (
        [Parameter()]
        [string]$Name = '*',
        [Parameter()]
        [switch]$OnlyModulesNeededUpdate
    )

    begin {
    }

    process {
        Get-Module -Name $Name -ListAvailable | Sort-Object -Property 'Name' | ForEach-Object -Process {
            $GalleyModule = $_ | Find-Module -ErrorAction Ignore | Sort-Object -Property 'Version' -Descending | Select-Object -First 1
            $Result = [ModuleInfo]::new()
            $Result.Name = $_.Name
            $Result.LocalVersion = $_.Version
            $Result.UpdateStatus = [ModuleUpdateStatus]::PSGalleryNotFound
            if ($null -ne $GalleyModule) {
                $Result.GalleryVersion = $GalleyModule.Version
                $Result.UpdateStatus = [ModuleUpdateStatus]::UpToDate
                if ([version]($GalleyModule.Version) -gt $_.Version) {
                    $Result.UpdateStatus = [ModuleUpdateStatus]::UpdateNeed
                }
            }

            if ($OnlyModulesNeededUpdate) {
                if($Result.UpdateStatus -eq [ModuleUpdateStatus]::UpdateNeed) {
                    return $Result
                }
            }
            else {
                return $Result
            }

        }
    }
    end {
    }
}

<#
Get-ModuleUpdate -Name Pester
Get-ModuleUpdate -OnlyModulesNeededUpdate
#>