This is the multi-page printable view of this section. Click here to print.

Return to the regular view of this page.

About this documentation

This is the official documentation site for PackageUpdateInfo, a PowerShell module that helps you staying up to date with your installed modules by checking all locally installed PowerShell modules and reporting which ones need an update.

About the module

PackageUpdateInfo was born from a real-world need: keeping track of module updates across many installed PowerShell modules is tedious and easy to forget. This module bridges that gap by automatically checking all installed modules against the PowerShell Gallery and presenting a clear overview of available updates.

Key design principles:

  • Cross-platform — supports Windows, Linux, and macOS
  • Cross-edition compatibility — supports PowerShell Desktop (5.1+) and Core (7.x)
  • Configurable — customize update check intervals, version sensitivity rules, and exclusions
  • Pipeline-friendly — integrates naturally with PowerShell’s pipeline architecture
  • Notification support — optional BurntToast desktop notifications on Windows

Resources

Contributing

Contributions are welcome. If you find issues, errors, or have suggestions for improvements, please open an issue or pull request on the GitHub repository.

1 - Overview

PackageUpdateInfo helps you keep installed PowerShell modules up to date. It compares local module versions with versions from configured online repositories (for example PSGallery) and reports when newer versions are available.

What does PackageUpdateInfo do?

The module can:

  • Query locally installed modules.
  • Discover current online versions.
  • Compare versions with configurable sensitivity (major, minor, build, revision).
  • Show rich output including repository, release notes, author, and project links.
  • Export results for later import and fast startup workflows.

Why use PackageUpdateInfo?

Convenience

  • Quickly identify outdated modules without manually checking each one.
  • Export and import update information for offline or delayed review.
  • Run update checks in background jobs.
  • Use optional toast notifications on Windows.

Automation

  • Schedule update checks using your profile, scheduled tasks, or startup routines.
  • Enforce an update-check interval to reduce unnecessary repository queries.
  • Keep custom rules per module pattern for update sensitivity.
  • Reuse previously exported data for low-latency shell startup.

Flexibility

  • Include or exclude module name patterns.
  • Define rule scope and precedence with default and custom rules.
  • Works on Windows, Linux, and macOS.
  • Supports Windows PowerShell 5.1 and PowerShell 7+.

Prerequisites

  • Windows PowerShell 5.1 or PowerShell 7+.
  • PowerShellGet access to your target repository (for example PSGallery).
  • Optional: BurntToast module for toast notifications on Windows.

Installation

Install for all users (requires administrative rights):

Install-Module PackageUpdateInfo

Install for the current user:

Install-Module PackageUpdateInfo -Scope CurrentUser

Quick start

Run an interactive check:

Get-PackageUpdateInfo

Show only modules that need an update:

Get-PackageUpdateInfo -ShowOnlyNeededUpdate

Force a check even if the configured update interval has not expired:

Get-PackageUpdateInfo -Force

Use toast notifications (Windows with BurntToast):

Get-PackageUpdateInfo -ShowToastNotification

Practical automation pattern

Export update data in a background job and import it on shell startup:

Start-Job -ScriptBlock { Get-PackageUpdateInfo -ShowOnlyNeededUpdate -ShowToastNotification | Export-PackageUpdateInfo } | Out-Null
Import-PackageUpdateInfo

This keeps startup interactive while still surfacing recent update information.

Next steps

  • Continue with Operational best practices for tuning, rule design, and automation.
  • Continue with Troubleshooting for common errors and recovery flows.

2 - Operational best practices

This page describes recommended operating patterns for PackageUpdateInfo in interactive shells, profiles, and automation.

Start with default behavior

Reset settings before introducing custom tuning, especially on shared systems:

Set-PackageUpdateSetting -Reset

Inspect current configuration and rules:

Get-PackageUpdateSetting
Get-PackageUpdateRule -IncludeDefaultRule

Use update intervals to reduce noise

Get-PackageUpdateInfo respects UpdateCheckInterval. If the last effective check is still within the configured interval, the cmdlet returns early.

Set an interval that matches your environment:

Set-PackageUpdateSetting -UpdateCheckInterval (New-TimeSpan -Hours 6)

Use -Force only for ad-hoc verification runs:

Get-PackageUpdateInfo -Force

Prefer non-blocking shell startup

A practical profile pattern is:

Start-Job -ScriptBlock {
    Get-PackageUpdateInfo -ShowOnlyNeededUpdate | Export-PackageUpdateInfo
} | Out-Null

Import-PackageUpdateInfo

Why this works well:

  • Startup remains fast because import reads cached data.
  • The expensive online check runs in the background.
  • You still get useful update visibility in each session.

Scope checks explicitly when needed

Use scope parameters when permissions differ between user and system modules:

Get-PackageUpdateInfo -CurrentUser
Get-PackageUpdateInfo -AllUsers

Use -Repository in environments with multiple configured repositories:

Get-PackageUpdateInfo -Repository PSGallery

Design rules carefully

Use broad excludes only when intentional. Excluding large patterns can hide important updates.

Create focused custom rules for high-churn modules:

Add-PackageUpdateRule -IncludeModuleForChecking "Az.*" -ReportChangeOnMajor $true -ReportChangeOnMinor $true -ReportChangeOnBuild $false -ReportChangeOnRevision $false

Review rule precedence by listing all rules:

Get-PackageUpdateRule -IncludeDefaultRule | Sort-Object Id

Use export/import intentionally

Default export and import paths are platform-specific and include PowerShell edition and major version in the filename. This helps avoid mixing data from different runtimes.

Common export options:

Get-PackageUpdateInfo | Export-PackageUpdateInfo -OutputFormat XML
Get-PackageUpdateInfo | Export-PackageUpdateInfo -OutputFormat JSON
Get-PackageUpdateInfo | Export-PackageUpdateInfo -OutputFormat CSV

Recommended guidance:

  • Use XML when you want to preserve typed objects for re-import.
  • Use JSON or CSV for external reporting and integration.
  • Use -IncludeTimeStamp for historical tracking.

Keep notifications useful

Use toast notifications only where they add value:

  • On Windows hosts with BurntToast installed.
  • On sessions where interactive alerts are expected.

For servers, CI, and non-interactive shells, prefer exported reports over toast notifications.

3 - Troubleshooting

Use this guide when PackageUpdateInfo does not return expected results, skips checks, or fails to import and export data.

Get actionable diagnostics first

Run with verbose output:

Get-PackageUpdateInfo -Verbose

Validate settings and rules:

Get-PackageUpdateSetting
Get-PackageUpdateRule -IncludeDefaultRule

Check is skipped unexpectedly

Symptom:

  • You see a warning that update checks are skipped because the check interval is not expired.

Cause:

  • UpdateCheckInterval and recent LastCheck or LastSuccessfulCheck are preventing a new online check.

Resolution:

Get-PackageUpdateInfo -Force

Or reduce the interval:

Set-PackageUpdateSetting -UpdateCheckInterval (New-TimeSpan -Minutes 30)

Configuration file is missing or corrupted

Symptom:

  • Get-PackageUpdateSetting warns that the module configuration file was not found, then throws.

Cause:

  • Configuration file path does not exist or contains invalid JSON.

Resolution:

Set-PackageUpdateSetting -Reset
Get-PackageUpdateSetting

No modules are returned

Symptom:

  • Get-PackageUpdateInfo returns nothing even though modules are installed.

Common causes:

  • Include and exclude rules filter all modules.
  • -CurrentUser or -AllUsers filters out the modules you expect.
  • Repository filtering excludes the relevant modules.

Resolution steps:

Get-PackageUpdateRule -IncludeDefaultRule
Get-PackageUpdateInfo -Force
Get-PackageUpdateInfo -CurrentUser -Force
Get-PackageUpdateInfo -AllUsers -Force

Export fails with path errors

Symptom:

  • Export reports invalid path or directory issues.

Cause:

  • -Path points to a directory or a non-existing location without -Force.

Resolution:

Get-PackageUpdateInfo | Export-PackageUpdateInfo -Path "$HOME\PackageUpdateInfo\updates.xml" -Force

Import returns no data

Symptom:

  • Import-PackageUpdateInfo returns nothing.

Common causes:

  • The file is empty or too small to contain records.
  • -InputFormat does not match the exported format.
  • Wrong file path for current runtime and edition.

Resolution:

Import-PackageUpdateInfo -InputFormat XML -Verbose
Import-PackageUpdateInfo -Path "$HOME\PackageUpdateInfo\updates.json" -InputFormat JSON

Toast notifications do not appear

Symptom:

  • -ShowToastNotification is used, but no toast appears.

Common causes:

  • BurntToast is not installed.
  • Host platform does not support Windows toast notifications.
  • No module in the result has NeedUpdate = $true.

Resolution:

Install-Module BurntToast -Scope CurrentUser
Get-PackageUpdateInfo -ShowOnlyNeededUpdate -ShowToastNotification -Force

Rules cannot be added or modified

Symptom:

  • Adding a rule fails with duplicate Id, include, or exclude values.

Cause:

  • Existing custom rules already contain the same identifiers or patterns.

Resolution:

Get-PackageUpdateRule
Add-PackageUpdateRule -IncludeModuleForChecking "MyModule.*"
Set-PackageUpdateRule -Id 1 -ReportChangeOnRevision $false
Remove-PackageUpdateRule -Id 1

Repository and network issues

Symptom:

  • Online version lookup fails or is incomplete.

Common causes:

  • Repository is not registered or unreachable.
  • Temporary network issues.

Resolution:

Get-PSRepository
Find-Module PackageUpdateInfo -Repository PSGallery
Get-PackageUpdateInfo -Repository PSGallery -Force

Recovery flow

If behavior remains inconsistent, use this reset sequence:

Set-PackageUpdateSetting -Reset
Get-PackageUpdateInfo -Force | Export-PackageUpdateInfo
Import-PackageUpdateInfo

4 - Module commands reference

Within here, you can find a reference for all commands in the module. This reference is designed to help you quickly find the command you need and understand how to use it effectively.

By clicking on a command, you will be taken to a detailed page that provides comprehensive information about the command, including its syntax, parameters, examples, and any additional notes or tips for usage.

4.1 - Export-PackageUpdateInfo

SYNOPSIS

Export PackageUpdateInfo to a data file

SYNTAX

__AllParameterSets

Export-PackageUpdateInfo [[-Path] <string>] -InputObject <Info[]> [-OutputFormat <string>]
 [-Encoding <string>] [-Force] [-Append] [-IncludeTimeStamp] [-PassThru] [-WhatIf] [-Confirm]
 [<CommonParameters>]

ALIASES

This cmdlet has the following aliases,

DESCRIPTION

Export PackageUpdateInfo to a data file

EXAMPLES

EXAMPLE 1

PS C:\> Get-PackageUpdateInfo | Export-PackageUpdateInfo

Example for usage of Export-PackageUpdateInfo

PARAMETERS

-Append

The output file will not be replaced. All information will be appended.

Type: SwitchParameter
DefaultValue: False
SupportsWildcards: false
Aliases: []
ParameterSets:
- Name: (All)
  Position: Named
  IsRequired: false
  ValueFromPipeline: false
  ValueFromPipelineByPropertyName: false
  ValueFromRemainingArguments: false
DontShow: false
AcceptedValues: []
HelpMessage: ''

-Confirm

If this switch is enabled, you will be prompted for confirmation before executing any operations that change state.

Type: SwitchParameter
DefaultValue: ''
SupportsWildcards: false
Aliases:
- cf
ParameterSets:
- Name: (All)
  Position: Named
  IsRequired: false
  ValueFromPipeline: false
  ValueFromPipelineByPropertyName: false
  ValueFromRemainingArguments: false
DontShow: false
AcceptedValues: []
HelpMessage: ''

-Encoding

File Encoding for the file

Type: String
DefaultValue: default
SupportsWildcards: false
Aliases: []
ParameterSets:
- Name: (All)
  Position: Named
  IsRequired: false
  ValueFromPipeline: false
  ValueFromPipelineByPropertyName: false
  ValueFromRemainingArguments: false
DontShow: false
AcceptedValues: []
HelpMessage: ''

-Force

If the directory for the file is not present, but a directory other then the default is specified, the function will try to create the diretory.

Type: SwitchParameter
DefaultValue: False
SupportsWildcards: false
Aliases: []
ParameterSets:
- Name: (All)
  Position: Named
  IsRequired: false
  ValueFromPipeline: false
  ValueFromPipelineByPropertyName: false
  ValueFromRemainingArguments: false
DontShow: false
AcceptedValues: []
HelpMessage: ''

-IncludeTimeStamp

A timestamp will be added to the information records.

Type: SwitchParameter
DefaultValue: False
SupportsWildcards: false
Aliases: []
ParameterSets:
- Name: (All)
  Position: Named
  IsRequired: false
  ValueFromPipeline: false
  ValueFromPipelineByPropertyName: false
  ValueFromRemainingArguments: false
DontShow: false
AcceptedValues: []
HelpMessage: ''

-InputObject

The PackageUpdateInfo from Get-PackageUpdateInfo function.

Type: Info[]
DefaultValue: ''
SupportsWildcards: false
Aliases: []
ParameterSets:
- Name: (All)
  Position: Named
  IsRequired: true
  ValueFromPipeline: true
  ValueFromPipelineByPropertyName: true
  ValueFromRemainingArguments: false
DontShow: false
AcceptedValues: []
HelpMessage: ''

-OutputFormat

The output format for the data Available formats are “XML”,“JSON”,“CSV”

Type: String
DefaultValue: XML
SupportsWildcards: false
Aliases:
- Format
ParameterSets:
- Name: (All)
  Position: Named
  IsRequired: false
  ValueFromPipeline: false
  ValueFromPipelineByPropertyName: false
  ValueFromRemainingArguments: false
DontShow: false
AcceptedValues: []
HelpMessage: ''

-PassThru

The exported objects will be parsed to the pipeline for further processing.

Type: SwitchParameter
DefaultValue: False
SupportsWildcards: false
Aliases: []
ParameterSets:
- Name: (All)
  Position: Named
  IsRequired: false
  ValueFromPipeline: false
  ValueFromPipelineByPropertyName: false
  ValueFromRemainingArguments: false
DontShow: false
AcceptedValues: []
HelpMessage: ''

-Path

The filepath where to export the infos. Please specify a file as path.

Type: String
DefaultValue: (Join-Path $HOME "AppData\Local\Microsoft\Windows\PowerShell\PackageUpdateInfo.xml")
SupportsWildcards: false
Aliases:
- FullName
- FilePath
ParameterSets:
- Name: (All)
  Position: 0
  IsRequired: false
  ValueFromPipeline: false
  ValueFromPipelineByPropertyName: false
  ValueFromRemainingArguments: false
DontShow: false
AcceptedValues: []
HelpMessage: ''

-WhatIf

If this switch is enabled, no actions are performed but informational messages will be displayed that explain what would happen if the command were to run.

Type: SwitchParameter
DefaultValue: ''
SupportsWildcards: false
Aliases:
- wi
ParameterSets:
- Name: (All)
  Position: Named
  IsRequired: false
  ValueFromPipeline: false
  ValueFromPipelineByPropertyName: false
  ValueFromRemainingArguments: false
DontShow: false
AcceptedValues: []
HelpMessage: ''

CommonParameters

This cmdlet supports the common parameters: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutBuffer, -OutVariable, -PipelineVariable, -ProgressAction, -Verbose, -WarningAction, and -WarningVariable. For more information, see about_CommonParameters.

INPUTS

PackageUpdate.Info[]

OUTPUTS

PackageUpdate.Info

4.2 - Get-PackageUpdateInfo

SYNOPSIS

Get info about up-to-dateness for installed modules

SYNTAX

DefaultSet1 (Default)

Get-PackageUpdateInfo [-Name <string[]>] [-Repository <string[]>] [-ShowOnlyNeededUpdate]
 [<CommonParameters>]

CurrentUser

Get-PackageUpdateInfo [-Name <string[]>] [-Repository <string[]>] [-ShowOnlyNeededUpdate]
 [-CurrentUser] [<CommonParameters>]

AllUsers

Get-PackageUpdateInfo [-Name <string[]>] [-Repository <string[]>] [-ShowOnlyNeededUpdate]
 [-AllUsers] [<CommonParameters>]

ALIASES

This cmdlet has the following aliases,

DESCRIPTION

Get-PackageUpdateInfo query locally installed modules and compare them against the online versions for up-to-dateness

EXAMPLES

EXAMPLE 1

PS C:\> Get-PackageUpdateInfo

Outputs update information for all modules (currentUser and AllUsers). Output can look like:

Name Repository VersionInstalled VersionOnline NeedUpdate Path


PSReadline PSGallery 1.2 1.2 False C:\Program Files\WindowsPowerShell\Modules\PSReadline Pester PSGallery 4.4.0 4.4.2 True C:\Program Files\WindowsPowerShell\Modules\Pester

EXAMPLE 2

PS C:\> Get-PackageUpdateInfo -ShowOnlyNeededUpdate

This will filter output to show only modules where NeedUpdate is True Output can look like:

Name Repository VersionInstalled VersionOnline NeedUpdate Path


Pester PSGallery 4.4.0 4.4.2 True C:\Program Files\WindowsPowerShell\Modules\Pester

EXAMPLE 3

PS C:\> "Pester", "PSReadline" | Get-PackageUpdateInfo

Pipeline is supported. This returns the infos only for the two modules “Pester”, “PSReadline”

This also can be done with Get-Module cmdlet: Get-Module “Pester”, “PSReadline” | Get-PackageUpdateInfo

PARAMETERS

-AllUsers

Only look for modules in the AllUsers/system directories. Keep in mind, that admin rights are required to update those modules.

Type: SwitchParameter
DefaultValue: False
SupportsWildcards: false
Aliases: []
ParameterSets:
- Name: AllUsers
  Position: Named
  IsRequired: false
  ValueFromPipeline: false
  ValueFromPipelineByPropertyName: false
  ValueFromRemainingArguments: false
DontShow: false
AcceptedValues: []
HelpMessage: ''

-CurrentUser

Only look for modules in the current user profile. This is helpfully if you’re running without admin right, which you should always do as your default work preference.

Type: SwitchParameter
DefaultValue: False
SupportsWildcards: false
Aliases: []
ParameterSets:
- Name: CurrentUser
  Position: Named
  IsRequired: false
  ValueFromPipeline: false
  ValueFromPipelineByPropertyName: false
  ValueFromRemainingArguments: false
DontShow: false
AcceptedValues: []
HelpMessage: ''

-Name

The name of the module to check

Type: String[]
DefaultValue: ''
SupportsWildcards: false
Aliases: []
ParameterSets:
- Name: (All)
  Position: Named
  IsRequired: false
  ValueFromPipeline: true
  ValueFromPipelineByPropertyName: true
  ValueFromRemainingArguments: false
DontShow: false
AcceptedValues: []
HelpMessage: ''

-Repository

The repository to check

Type: String[]
DefaultValue: ''
SupportsWildcards: false
Aliases: []
ParameterSets:
- Name: (All)
  Position: Named
  IsRequired: false
  ValueFromPipeline: false
  ValueFromPipelineByPropertyName: false
  ValueFromRemainingArguments: false
DontShow: false
AcceptedValues: []
HelpMessage: ''

-ShowOnlyNeededUpdate

This switch suppresses up-to-date modules from the output. Only output modules needed to update.

Type: SwitchParameter
DefaultValue: False
SupportsWildcards: false
Aliases: []
ParameterSets:
- Name: (All)
  Position: Named
  IsRequired: false
  ValueFromPipeline: false
  ValueFromPipelineByPropertyName: false
  ValueFromRemainingArguments: false
DontShow: false
AcceptedValues: []
HelpMessage: ''

CommonParameters

This cmdlet supports the common parameters: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutBuffer, -OutVariable, -PipelineVariable, -ProgressAction, -Verbose, -WarningAction, and -WarningVariable. For more information, see about_CommonParameters.

INPUTS

System.String[]

OUTPUTS

PackageUpdate.Info

4.3 - Import-PackageUpdateInfo

SYNOPSIS

Import PackageUpdateInfo from a data file

SYNTAX

__AllParameterSets

Import-PackageUpdateInfo [[-Path] <string>] [-InputFormat <string>] [-Encoding <string>] [-WhatIf]
 [-Confirm] [<CommonParameters>]

ALIASES

This cmdlet has the following aliases,

DESCRIPTION

Import PackageUpdateInfo from a data file previously exported with function Export-PackageUpdateInfo.

EXAMPLES

EXAMPLE 1

PS C:\> Import-PackageUpdateInfo

Try to import the default file “$HOME\AppData\Local\Microsoft\Windows\PowerShell\PackageUpdateInfo.xml”

PARAMETERS

-Confirm

If this switch is enabled, you will be prompted for confirmation before executing any operations that change state.

Type: SwitchParameter
DefaultValue: ''
SupportsWildcards: false
Aliases:
- cf
ParameterSets:
- Name: (All)
  Position: Named
  IsRequired: false
  ValueFromPipeline: false
  ValueFromPipelineByPropertyName: false
  ValueFromRemainingArguments: false
DontShow: false
AcceptedValues: []
HelpMessage: ''

-Encoding

File Encoding for the file

Type: String
DefaultValue: default
SupportsWildcards: false
Aliases: []
ParameterSets:
- Name: (All)
  Position: Named
  IsRequired: false
  ValueFromPipeline: false
  ValueFromPipelineByPropertyName: false
  ValueFromRemainingArguments: false
DontShow: false
AcceptedValues: []
HelpMessage: ''

-InputFormat

The output format for the data Available formats are “XML”,“JSON”,“CSV”

Type: String
DefaultValue: XML
SupportsWildcards: false
Aliases:
- Format
ParameterSets:
- Name: (All)
  Position: Named
  IsRequired: false
  ValueFromPipeline: false
  ValueFromPipelineByPropertyName: false
  ValueFromRemainingArguments: false
DontShow: false
AcceptedValues: []
HelpMessage: ''

-Path

The filepath where to import the informations. Please specify a file as path.

Type: String
DefaultValue: (Join-Path $HOME "AppData\Local\Microsoft\Windows\PowerShell\PackageUpdateInfo.xml")
SupportsWildcards: false
Aliases:
- FullName
- FilePath
ParameterSets:
- Name: (All)
  Position: 0
  IsRequired: false
  ValueFromPipeline: true
  ValueFromPipelineByPropertyName: true
  ValueFromRemainingArguments: false
DontShow: false
AcceptedValues: []
HelpMessage: ''

-WhatIf

If this switch is enabled, no actions are performed but informational messages will be displayed that explain what would happen if the command were to run.

Type: SwitchParameter
DefaultValue: ''
SupportsWildcards: false
Aliases:
- wi
ParameterSets:
- Name: (All)
  Position: Named
  IsRequired: false
  ValueFromPipeline: false
  ValueFromPipelineByPropertyName: false
  ValueFromRemainingArguments: false
DontShow: false
AcceptedValues: []
HelpMessage: ''

CommonParameters

This cmdlet supports the common parameters: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutBuffer, -OutVariable, -PipelineVariable, -ProgressAction, -Verbose, -WarningAction, and -WarningVariable. For more information, see about_CommonParameters.

INPUTS

System.String

OUTPUTS

PackageUpdate.Info