WingetBatch
2.10.0
Minimum PowerShell version
7.4
Installation Options
Owners
Copyright
(c) 2025-2026 Matthew Bubb. All rights reserved.
Package Details
Author(s)
- Matthew Bubb
Tags
winget package-manager windows batch-install utility github-api interactive cache updates PwshSpectreConsole
Functions
Start-WingetUpdateCheck Install-WingetAll Get-WingetNewPackages Get-WingetUpdates Enable-WingetUpdateNotifications Disable-WingetUpdateNotifications Set-WingetBatchGitHubToken New-WingetBatchGitHubToken Remove-WingetRecent Export-WingetBatchConfig Import-WingetBatchConfig Set-WingetBatchConfig Get-WingetBatchConfig Invoke-WingetBatchCleanup Update-WingetBatch Invoke-WinGetBatch Repair-WingetBatchManager Get-WingetMachineState Get-WingetPackageInfo Get-WingetHistory Watch-WingetPackages Find-WingetDuplicate Register-WingetMaintenance Get-WingetDependencyGraph Start-WingetServer Get-WingetRecommend Invoke-WingetFleet Restore-WingetSnapshot Test-WingetCompliance Get-WingetHealthScore Send-WingetWebhook Export-WingetOffline Install-WingetProfile Get-WingetChangelog
PSEditions
Dependencies
Release Notes
v2.10.0 - Reliability Release
- REQUIREMENT: PowerShell 7.4+ is now declared (PwshSpectreConsole already required it; 11 commands never parsed on 5.1).
- FIXED: Installs/updates/uninstalls reported success when the installer failed. WinGet returns a Status instead of throwing; every command now checks it and shows the real error and reboot requirement.
- FIXED: Modules that export the same command names (e.g. Cobalt) hijacked Get-WinGetPackage, so Get-WingetUpdates always said "up to date". All WinGet calls are now module-qualified.
- FIXED: Get-WingetMachineState failed on every call (helpers defined after use). -RemoveExtraneous now only touches WinGet-sourced packages and lists them first; pinned versions are honored; new -Force and -IncludeUnmanaged.
- FIXED: Get-WingetDependencyGraph failed on every call (wrong parameter name); tree output and Mermaid labels fixed.
- FIXED: Get-Date -ToString (invalid) broke Restore-WingetSnapshot -Take, Invoke-WingetFleet, Send-WingetWebhook (Discord), Test-WingetCompliance reports, Export-WingetOffline and the maintenance task.
- FIXED: Register-WingetMaintenance tasks never updated anything (called the interactive Get-WingetUpdates). -IncludeStore, NotifyOnly (webhooks) and Monthly schedules now work.
- FIXED: Start-WingetServer used a non-existent Pode cmdlet (Add-PodeRouteMiddleware); routes no longer call interactive commands; crypto-random API key; -Https uses a self-signed certificate.
- FIXED: Get-WingetNewPackages used local time as UTC, shifting the search window by the UTC offset; background detail jobs never received the parser, losing descriptions and licenses.
- FIXED: Get-WingetPackageInfo -ShowManifest/-ShowVersions, Get-WingetChangelog release notes and Get-WingetHealthScore manifest checks read the wrong files; version lists sorted as text (9.x above 10.x).
- FIXED: Get-WingetHealthScore flagged almost every package as pre-release ("Source" contains "rc") and scored freshness by version count; it now uses the real last-commit date.
- FIXED: Install-WingetProfile -Path could not load its own -Export output; 20 built-in profile/recommendation IDs did not exist in winget.
- FIXED: Enable-WingetUpdateNotifications overwrote config.json (losing webhooks and search settings). Config writes now merge.
- FIXED: Invoke-WinGetBatch ignored version pins and ran a download phase whose files were never used (and which always failed). -ThrottleLimit is now ignored.
- FIXED: Remove-WingetRecent could attach the wrong install date via loose name matching; now uses the COM API and exact/registry-key matching.
- FIXED: Export-WingetOffline ignored -Architecture and ran MSIs without msiexec; now built on Export-WinGetPackage with hash verification and per-installer silent switches.
- FIXED: Invoke-WingetFleet lost machine names on failure and -RetryFailed ignored -UseSSH; timeouts reported.
- FIXED: Test-WingetCompliance -NewPolicy -PolicyPath could not bind; Send-WingetWebhook -SaveConfig prompted for -Event; Teams now uses Adaptive Cards.
- FIXED: Watch-WingetPackages -Once crashed when output was redirected; showed 0 updates and misaligned borders.
- NEW: Get-WingetUpdates -ListOnly, Get-WingetHistory -PassThru, Restore-WingetSnapshot -RestoreVersions/-Force, Install-WingetProfile -Force.
- NEW: -AutoSnapshot now actually snapshots before every WingetBatch install/update/uninstall; -UndoLast 1 undoes the latest one.
- NEW: Update notifications share the update cache with Get-WingetUpdates, so it opens instantly after a background check.
- LIVE-TESTED against real installs, updates, uninstalls, downloads and a running API server. Fixes from that pass:
* Results are verified, not trusted: an update that leaves the old version reports NotUpdated, an uninstall that leaves the program reports StillInstalled (both happen in practice with WinGet 1.30).
* Pinning/rollback to an older version uninstalls first, then installs and verifies (installing over the top left two registered copies of VLC).
* ARP\ and MSIX\ packages (Add/Remove Programs entries) can be updated/uninstalled; WinGet's ID search rejects those IDs.
* Install-WingetAll -Id is an exact match (VideoLAN.VLC also installed VideoLAN.VLC.Nightly); summary table renders colors.
* Start-WingetServer: never started ($using in the main Pode block), API-key check read a non-existent property, /api/health crashed, rate limit was per-thread, result counts were wrong. Errors now log to ~/.wingetbatch/server_errors_*.log; responses carry X-RateLimit-Remaining.
* Invoke-WingetFleet: an edit had left the old implementation in place; machine names and per-package errors now reported.
* Install-Offline.ps1 accepts "-PackageId a,b" from powershell.exe -File / cmd.
* winget show parsing handles multi-line Description, Tags and Release Notes.
* Pode/WinGet.Client/WingetBatch installs and Update-WingetBatch work with PSResourceGet without prompting.
* Get-WingetChangelog processes every piped package ID.
- TESTS: 30 new regression tests (78 total).
Full history: https://github.com/thebubbsy/WingetBatch/blob/main/CHANGELOG.md
FileList
- WingetBatch.nuspec
- .github\workflows\publish.yml
- CHANGELOG.md
- LICENSE
- Private\Compare-WingetVersion.ps1
- Private\ConvertTo-SpectreEscaped.ps1
- Private\ConvertTo-WingetActionResult.ps1
- Private\Export-WingetHtmlReport.ps1
- Private\Get-GitHubApiRequestCount.ps1
- Private\Get-PackageDetailsCache.ps1
- Private\Get-WingetBatchConfigData.ps1
- Private\Get-WingetBatchConfigDir.ps1
- Private\Get-WingetBatchGitHubToken.ps1
- Private\Get-WingetPkgsManifest.ps1
- Private\Get-WingetSourceIndexAge.ps1
- Private\Install-WingetBatchDependency.ps1
- Private\Invoke-WingetPackageAction.ps1
- Private\New-WingetSnapshot.ps1
- Private\Parse-WingetShowOutput.ps1
- Private\Register-WingetBatchCompleters.ps1
- Private\Set-PackageDetailsCache.ps1
- Private\Set-WingetPackageVersion.ps1
- Private\Show-WingetPackageDetails.ps1
- Private\Sort-WingetVersion.ps1
- Private\Start-PackageDetailJobs.ps1
- Private\Start-WingetBatchJob.ps1
- Private\Update-GitHubApiRequestCount.ps1
- Public\Disable-WingetUpdateNotifications.ps1
- Public\Enable-WingetUpdateNotifications.ps1
- Public\Export-WingetBatchConfig.ps1
- Public\Export-WingetOffline.ps1
- Public\Find-WingetDuplicate.ps1
- Public\Get-WingetBatchConfig.ps1
- Public\Get-WingetChangelog.ps1
- Public\Get-WingetDependencyGraph.ps1
- Public\Get-WingetHealthScore.ps1
- Public\Get-WingetHistory.ps1
- Public\Get-WingetMachineState.ps1
- Public\Get-WingetNewPackages.ps1
- Public\Get-WingetPackageInfo.ps1
- Public\Get-WingetRecommend.ps1
- Public\Get-WingetUpdates.ps1
- Public\Import-WingetBatchConfig.ps1
- Public\Install-WingetAll.ps1
- Public\Install-WingetProfile.ps1
- Public\Invoke-WinGetBatch.ps1
- Public\Invoke-WingetBatchCleanup.ps1
- Public\Invoke-WingetFleet.ps1
- Public\New-WingetBatchGitHubToken.ps1
- Public\Register-WingetMaintenance.ps1
- Public\Remove-WingetRecent.ps1
- Public\Repair-WingetBatchManager.ps1
- Public\Restore-WingetSnapshot.ps1
- Public\Send-WingetWebhook.ps1
- Public\Set-WingetBatchConfig.ps1
- Public\Set-WingetBatchGitHubToken.ps1
- Public\Start-WingetServer.ps1
- Public\Start-WingetUpdateCheck.ps1
- Public\Test-WingetCompliance.ps1
- Public\Update-WingetBatch.ps1
- Public\Watch-WingetPackages.ps1
- README.md
- WingetBatch.psd1
- WingetBatch.psm1
- WingetBatch_Standalone.ps1
- build.ps1
- docs\architecture_nextgen.md
- publish.ps1
- tests\ConvertTo-SpectreEscaped.Tests.ps1
- tests\Get-WingetBatchConfigDir.Tests.ps1
- tests\Helpers.Tests.ps1
- tests\NewCommands.Tests.ps1
- tests\Parse-WingetShowOutput.Tests.ps1
- tests\Show-WingetPackageDetails.Tests.ps1
- wiki\Architecture.md
- wiki\Command-Reference.md
- wiki\Configuration.md
- wiki\Home.md
- wiki\Installation-and-Setup.md
- wiki\Troubleshooting.md
- wiki\_Sidebar.md
Version History
| Version | Downloads | Last updated |
|---|---|---|
| 2.10.0 (current version) | 6 | 9/26/2026 |
| 2.9.0 | 133 | 7/28/2026 |
| 2.8.0 | 14 | 7/28/2026 |
| 2.7.0 | 16 | 7/27/2026 |
| 2.6.2 | 63 | 7/8/2026 |
| 2.6.1 | 5 | 7/8/2026 |
| 2.6.0 | 45 | 6/26/2026 |
| 2.5.0 | 16 | 6/25/2026 |
| 2.4.7 | 48 | 6/9/2026 |
| 2.4.6 | 18 | 6/8/2026 |
| 2.4.5 | 7 | 6/8/2026 |
| 2.4.4 | 7 | 6/8/2026 |
| 2.4.3 | 8 | 6/8/2026 |
| 2.4.2 | 7 | 6/8/2026 |
| 2.4.1 | 10 | 6/8/2026 |
| 2.4.0 | 9 | 6/8/2026 |
| 2.3.1 | 49 | 5/22/2026 |
| 2.3.0 | 5 | 5/22/2026 |
| 2.2.1 | 49 | 5/8/2026 |
| 2.2.0 | 34 | 5/4/2026 |
| 2.1.2 | 21 | 5/2/2026 |
| 2.0.0 | 124 | 11/5/2025 |