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: ''
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: ''
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.
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 helpful 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.
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: ''
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.
System.String
OUTPUTS
PackageUpdate.Info