PSQualityTools.psm1
#Region '.\public\Show-ModuleUpdateStatus.ps1' 0 function Show-ModuleUpdateStatus { <# .SYNOPSIS Show the update status of installed module. .DESCRIPTION Show the version of all installed modules, optionally only show ones that require update. NOTE: Owing to the nature of checks against remote repositories, the function may take quite a while to run! .PARAMETER Name Name of the module to show the version information of, or a wildcard to show all. .PARAMETER RequiresUpdate Switch to only show modules that require update. .EXAMPLE Show-ModuleUpdateStatus .EXAMPLE Show-ModuleUpdateStatus -Name 'ModuleName' .EXAMPLE Show-ModuleUpdateStatus -RequiresUpdate .EXAMPLE $modules = Show-ModuleUpdateStatus -RequiresUpdate .LINK Include any applicable links #> [CmdletBinding()] [OutputType([System.Object])] param ( [Parameter(ValueFromPipeline = $true)] [ValidateNotNullorEmpty()] [string[]]$Name = "*", [switch]$RequiresUpdate ) begin { Write-Debug "Starting Show-ModuleUpdateStatus" Write-Information "Working ..." -InformationAction Continue Set-StrictMode -Version Latest $ErrorActionPreference = 'Stop' $Repositories = Get-PSRepository try { $localModules = Get-Module -Name $name -ListAvailable -ErrorAction Stop | Sort-Object -Property Name } catch { throw $_ } } process { if ($localModules -is [System.Array]) { $moduleOutput = New-Object -TypeName "System.Collections.ArrayList" foreach ($module in $localModules) { Write-Information " Processing local module: $($module.Name) ($($module.Version)) ..." -InformationAction Continue try { $moduleVersion = New-Object -TypeName "System.Collections.ArrayList" foreach ($repository in $Repositories) { Write-Verbose "Looking at repository '$($repository.Name)' for $($module.Name)" $moduleInfo = Find-Module -Name $module.Name -Repository $repository.Name -ErrorAction SilentlyContinue if ($null -eq $moduleInfo) { $moduleInfo = @{ Repository = $repository.Name Version = "n/a" } } else { $moduleInfo = @{ Repository = $repository.Name Version = $moduleInfo.Version } } $null = $moduleVersion.Add($moduleInfo) } $updateAvailable = $false foreach ($version in $moduleVersion) { if ($version.Version -gt $module.Version -and $version.Version -ne 'n/a') { $updateAvailable = $true } } $moduleData = [PsCustomObject]@{ PSTypeName = "moduleInfo" Name = $module.Name } $moduleData | Add-Member -NotePropertyName "Local" -NotePropertyValue $module.Version foreach ($version in $moduleVersion) { $moduleData | Add-Member -NotePropertyName $version.Repository -NotePropertyValue $version.Version } $moduleData | Add-Member -NotePropertyName "Update" -NotePropertyValue $updateAvailable $null = $moduleOutput.Add($moduleData) } catch { Write-Error $_ } } if ($PSBoundParameters.ContainsKey('RequiresUpdate')) { $output = $moduleOutput | Where-Object Update -EQ $true } else { $output = $moduleOutput } if ($null -ne $output) { $output | Format-Table -AutoSize } else { Write-Information '' -InformationAction Continue Write-Information 'No module(s) require update.' -InformationAction Continue Write-Information '' -InformationAction Continue } } else { Write-Warning "No modules found." } } end { Write-Debug "Leaving Show-ModuleUpdateStatus" } } #EndRegion '.\public\Show-ModuleUpdateStatus.ps1' 163 |