WingetBatch
2.6.2
Minimum PowerShell version
5.1
Installation Options
Owners
Copyright
(c) 2025 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-WingetHoroscope Test-WingetPackageVibes Convert-WingetPackageToHaiku Show-WingetMatrix Invoke-WingetRussianRoulette
Dependencies
Release Notes
v2.6.0 - Smart Search Architecture
- ENHANCED: Smart Scope Routing implemented in Install-WingetAll. Purely numeric queries automatically bypass "Id" and "Moniker" fields while retaining Tag matching.
- NEW: Added -LimitResult (default 100) mapped natively to COM API Count parameter, ending searches early to massively boost performance.
- NEW: Added -Id parameter to easily specify specific exact IDs instead of wildcard queries.
- NEW: Added SQLite cache fragmentation check directly in Install-WingetAll logic with automated rebuild recommendations.
- NEW: Implemented Set-WingetBatchConfig and Get-WingetBatchConfig module preferences.
- ENHANCED: Dynamic config-driven COM SearchMatchOption override. ContainsCaseInsensitive remains default.
- FIXED: Microsoft.WinGet.Client\Find-WinGetPackage forced namespace avoids naming collisions with shadowing modules (like Cobalt).
v2.5.0 - COM API Migration (Breaking Fix)
- CRITICAL FIX: Migrated all core functions from winget.exe CLI text-parsing to Microsoft.WinGet.Client COM API.
* Install-WingetAll now uses Find-WinGetPackage (COM) instead of parsing 'winget search' text output.
* Get-WingetUpdates now uses Get-WinGetPackage (COM) instead of parsing 'winget upgrade' text output.
* Installation now uses Install-WinGetPackage (COM) instead of shelling out to winget.exe.
* Updates now use Update-WinGetPackage (COM) instead of shelling out to winget.exe.
* This eliminates all dependency on winget.exe being in PATH (a known Windows update regression).
- NEW: Repair-WingetBatchManager - Diagnostic and self-repair tool for common winget issues.
* Checks winget.exe PATH, Microsoft.WinGet.Client module, COM API health.
* Auto-repairs by re-registering App Installer and fixing PATH.
- ENHANCED: Background detail jobs now resolve winget.exe by known filesystem paths with COM API fallback.
- ENHANCED: Added --no-progress and --disable-interactivity flags to all remaining CLI calls for cleaner output.
- DEPENDENCY: Microsoft.WinGet.Client is now a required module (auto-installed with WingetBatch).
- Author/Architect: Matthew Bubb. All credit for this architectural migration is attributed solely to him.
v2.4.0 - Security Update & Massive Feature Bloat
- FIXED: Replaced unsafe Invoke-Expression with argument array execution in Invoke-WinGetBatch.
- FIXED: Fallback PS5.1 execution for ForEach-Object -Parallel downloads.
- FIXED: Array casting fixes and character encoding parsing fixes.
- NEW: Get-WingetHoroscope - Predict the celestial fate of your package updates.
- NEW: Invoke-WingetRussianRoulette - Installs a completely random package from the Winget repository.
- NEW: Convert-WingetPackageToHaiku - Generates a 5-7-5 syllable poem for any package.
- NEW: Show-WingetMatrix - Displays your installed packages cascading down the screen like The Matrix.
- NEW: Test-WingetPackageVibes - Arbitrary algorithmic vibe check for Winget packages (Corporate = Cringe).
v2.3.0 - Next-Generation Idempotent Deployment Engine
- NEW: Invoke-WinGetBatch - Idempotent, manifest-driven package deployments using native COM APIs.
* Decoupled from fragile CLI regex parsing; uses Microsoft.WinGet.Client COM interfaces.
* Split-Phase Concurrency: Parallel downloads via native PowerShell 7 ForEach-Object -Parallel with serial, collision-free background installations.
* High-fidelity target state configuration parsing from standard JSON and YAML manifests.
* Diagnostic exit code mapping (standardizing successful exits 0, pending reboots 3010/1641, and failures).
* Forensic and auditing: compilation of structured JSON deployment reports containing detailed per-package status telemetry.
* Full integration with the winget batch environment and standalone distribution channels.
* Author/Architect: Matthew Bubb. All credit for this next-generation design is attributed solely to him.
v2.0.0 - Major Feature Release
- NEW: Get-WingetNewPackages - Discover recently added packages from winget-pkgs GitHub repository
* GitHub API integration with pagination support
* Parallel background job system (max 10 concurrent) for fetching package details
* Smart job waiting - only waits for jobs with selected packages
* 30-day package details caching system for faster repeat searches
* Comprehensive package info: Version, Publisher, GitHub links, License, Pricing, Release Notes, and 20+ fields
* Interactive re-selection with preserved package information
* Exclusion filter support to hide specific packages/publishers
* API rate limit tracking with hourly rollover
* GitHub token support for 5,000 req/hour (vs 60 unauthenticated)
- NEW: Remove-WingetRecent - Uninstall recently installed packages by date
* Reads from Windows Registry (HKLM/HKCU Uninstall keys)
* Filter by installation date (e.g., -Days 7 for last week)
* Interactive selection of packages to remove
- ENHANCED: Install-WingetAll
* Now uses --silent flag for cleaner output
* Improved error handling and reporting
- ENHANCED: Profile Integration
* Background update checks with cached results
* 30-minute cache TTL for update notifications
- NEW: Token Management
* Set-WingetBatchGitHubToken - Store GitHub PAT securely (AES encrypted CliXml)
* New-WingetBatchGitHubToken - Interactive token creation wizard with masked input
- FIXED: Date parsing bug in API rate limit tracking (timezone handling)
- FIXED: Package selection workflow when going back to change selections
Configuration stored in: ~/.wingetbatch/
- config.json - Update notification settings
- github_token.clixml - Secure GitHub Personal Access Token
- github_ratelimit.json - API usage tracking
- package_cache.json - 30-day package details cache
- update_cache.json - Cached update results
Requires: PowerShell 5.1+, winget CLI, PwshSpectreConsole (auto-installs if missing)
FileList
- WingetBatch.nuspec
- .Jules\bolt.md
- .Jules\palette.md
- .github\workflows\publish.yml
- .history\.github\copilot-instructions_20251105190908.md
- .history\.github\copilot-instructions_20251105210423.md
- .history\.github\copilot-instructions_20251105210425.md
- .history\.github\copilot-instructions_20251105210642.md
- .history\.github\copilot-instructions_20251105210653.md
- .history\.github\copilot-instructions_20251105210723.md
- .history\.github\copilot-instructions_20251105210740.md
- .history\.github\copilot-instructions_20251105215229.md
- .history\CHECKLIST_20251106025607.md
- .history\Create-ITDistributionGroup_20251107152246.ps1
- .history\Create-ITDistributionGroup_20251107152420.ps1
- .history\Create-ITDistributionGroup_20251107152520.ps1
- .history\Create-ITDistributionGroup_20251107152546.ps1
- .history\Install-WingetBatch_20251110105048.ps1
- .history\Install-WingetBatch_20251110105602.ps1
- .history\Install-WingetBatch_20251110105718.ps1
- .history\Install-WingetBatch_20251110105722.ps1
- .history\Install-WingetBatch_20251110105724.ps1
- .history\Install-WingetBatch_20251110105726.ps1
- .history\Install-WingetBatch_20251110110130.ps1
- .history\Install-WingetBatch_20251110110142.ps1
- .history\Install-WingetBatch_20251110110414.ps1
- .history\Install-WingetBatch_20251110110509.ps1
- .history\Install-WingetBatch_20251110110534.ps1
- .history\Install-WingetBatch_20251110110551.ps1
- .history\Install-WingetBatch_20251110110609.ps1
- .history\Install-WingetBatch_20251110110636.ps1
- .history\Install-WingetBatch_20251110112512.ps1
- .history\Install-WingetBatch_20251110113158.ps1
- .history\Install-WingetBatch_20251110125540.ps1
- .history\Install-WingetBatch_20251110125558.ps1
- .history\Install-WingetBatch_20251110125611.ps1
- .history\Install-WingetBatch_20251110150725.ps1
- .history\LICENSE_20251106025506
- .history\LICENSE_20251107055725
- .history\PUBLISHING_20251106025532.md
- .history\README_20251105181104.md
- .history\README_20251106030225.md
- .history\README_20251107055725.md
- .history\WingetBatch_20251105181523.psd1
- .history\WingetBatch_20251105190419.psm1
- .history\WingetBatch_20251105191221.psm1
- .history\WingetBatch_20251105191223.psm1
- .history\WingetBatch_20251105191651.psm1
- .history\WingetBatch_20251105191859.psm1
- .history\WingetBatch_20251105192828.psm1
- .history\WingetBatch_20251105192838.psd1
- .history\WingetBatch_20251105193134.psm1
- .history\WingetBatch_20251105193215.psm1
- .history\WingetBatch_20251105193349.psm1
- .history\WingetBatch_20251105193558.psm1
- .history\WingetBatch_20251105193618.psm1
- .history\WingetBatch_20251105193656.psm1
- .history\WingetBatch_20251105195452.psm1
- .history\WingetBatch_20251105195509.psm1
- .history\WingetBatch_20251105195521.psm1
- .history\WingetBatch_20251105195533.psm1
- .history\WingetBatch_20251105195603.psm1
- .history\WingetBatch_20251105195621.psm1
- .history\WingetBatch_20251105195837.psm1
- .history\WingetBatch_20251105200704.psm1
- .history\WingetBatch_20251105200738.psm1
- .history\WingetBatch_20251105200806.psm1
- .history\WingetBatch_20251105200951.psm1
- .history\WingetBatch_20251105201022.psm1
- .history\WingetBatch_20251105201235.psm1
- .history\WingetBatch_20251105201306.psm1
- .history\WingetBatch_20251105201404.psm1
- .history\WingetBatch_20251105201417.psm1
- .history\WingetBatch_20251105201724.psm1
- .history\WingetBatch_20251105201736.psm1
- .history\WingetBatch_20251105202107.psm1
- .history\WingetBatch_20251105202217.psm1
- .history\WingetBatch_20251105202237.psm1
- .history\WingetBatch_20251105203600.psm1
- .history\WingetBatch_20251105203621.psm1
- .history\WingetBatch_20251105203649.psm1
- .history\WingetBatch_20251105204026.psm1
- .history\WingetBatch_20251105204036.psm1
- .history\WingetBatch_20251105204224.psm1
- .history\WingetBatch_20251105204246.psm1
- .history\WingetBatch_20251105204330.psm1
- .history\WingetBatch_20251105204441.psm1
- .history\WingetBatch_20251105204503.psm1
- .history\WingetBatch_20251105204516.psm1
- .history\WingetBatch_20251105204853.psm1
- .history\WingetBatch_20251105204936.psm1
- .history\WingetBatch_20251105205921.psm1
- .history\WingetBatch_20251105205946.psm1
- .history\WingetBatch_20251105210423.psd1
- .history\WingetBatch_20251105210423.psm1
- .history\WingetBatch_20251105210625.psm1
- .history\WingetBatch_20251105210626.psm1
- .history\WingetBatch_20251105212144.psm1
- .history\WingetBatch_20251105212248.psm1
- .history\WingetBatch_20251105212441.psm1
- .history\WingetBatch_20251105212451.psm1
- .history\WingetBatch_20251105214002.psm1
- .history\WingetBatch_20251105214005.psm1
- .history\WingetBatch_20251105214402.psm1
- .history\WingetBatch_20251105214429.psm1
- .history\WingetBatch_20251105214448.psm1
- .history\WingetBatch_20251105215229.psd1
- .history\WingetBatch_20251105215229.psm1
- .history\WingetBatch_20251105222518.psm1
- .history\WingetBatch_20251105223546.psm1
- .history\WingetBatch_20251105223753.psm1
- .history\WingetBatch_20251105223810.psm1
- .history\WingetBatch_20251105223833.psm1
- .history\WingetBatch_20251105223858.psm1
- .history\WingetBatch_20251106025116.psm1
- .history\WingetBatch_20251106025421.psd1
- .history\WingetBatch_20251106025449.psd1
- .history\WingetBatch_20251106025507.psd1
- .history\WingetBatch_20251106025508.psd1
- .history\WingetBatch_20251106025510.psd1
- .history\WingetBatch_20251106025515.psd1
- .history\WingetBatch_20251106025541.psd1
- .history\WingetBatch_20251106025542.psd1
- .history\WingetBatch_20251106030141.psd1
- .history\WingetBatch_20251106030637.psm1
- .history\WingetBatch_20251106035209.psm1
- .history\WingetBatch_20251106035627.psm1
- .history\WingetBatch_20251106035637.psm1
- .history\WingetBatch_20251106035701.psm1
- .history\WingetBatch_20251106035717.psm1
- .history\WingetBatch_20251106035742.psm1
- .history\WingetBatch_20251106035918.psm1
- .history\WingetBatch_20251106035940.psm1
- .history\WingetBatch_20251106035959.psm1
- .history\WingetBatch_20251106040731.psm1
- .history\WingetBatch_20251106040749.psm1
- .history\WingetBatch_20251106040804.psm1
- .history\WingetBatch_20251106040822.psm1
- .history\WingetBatch_20251106040849.psm1
- .history\WingetBatch_20251106040904.psm1
- .history\WingetBatch_20251106040948.psm1
- .history\WingetBatch_20251106041334.psm1
- .history\WingetBatch_20251106041344.psm1
- .history\WingetBatch_20251106041521.psm1
- .history\WingetBatch_20251106041712.psm1
- .history\WingetBatch_20251106041831.psm1
- .history\WingetBatch_20251106041841.psm1
- .history\WingetBatch_20251106041852.psm1
- .history\WingetBatch_20251106042140.psm1
- .history\WingetBatch_20251106042230.psm1
- .history\WingetBatch_20251106042249.psd1
- .history\WingetBatch_20251106042316.psm1
- .history\WingetBatch_20251106072428.psm1
- .history\WingetBatch_20251106072937.psm1
- .history\WingetBatch_20251106072952.psm1
- .history\WingetBatch_20251106073003.psd1
- .history\WingetBatch_20251106073243.psm1
- .history\WingetBatch_20251106073254.psd1
- .history\WingetBatch_20251106073325.psm1
- .history\WingetBatch_20251106073446.psm1
- .history\WingetBatch_20251106074356.psm1
- .history\WingetBatch_20251106074409.psm1
- .history\WingetBatch_20251106074608.psm1
- .history\WingetBatch_20251106074620.psm1
- .history\WingetBatch_20251106074635.psd1
- .history\WingetBatch_20251107055723.psd1
- .history\WingetBatch_20251107055723.psm1
- .history\WingetBatch_20251107060412.psm1
- .history\WingetBatch_20251107060422.psm1
- .history\WingetBatch_20251107060432.psm1
- .history\WingetBatch_20251107152137.psm1
- .history\WingetBatch_20251110110203.psm1
- .history\WingetBatch_20251110113158.psm1
- .history\iChris-API-Pricing-Analysis_20251107184448.md
- .history\iChris-API-Pricing-Analysis_20251107184917.md
- .history\iChris-API-Pricing-Analysis_20251107185041.md
- .history\iChris-API-Pricing-Analysis_20251110105603.md
- LICENSE
- PSGetModuleInfo.xml
- Private\ConvertTo-SpectreEscaped.ps1
- Private\Export-WingetHtmlReport.ps1
- Private\Get-GitHubApiRequestCount.ps1
- Private\Get-PackageDetailsCache.ps1
- Private\Get-WingetBatchConfigDir.ps1
- Private\Get-WingetBatchGitHubToken.ps1
- Private\Parse-WingetShowOutput.ps1
- Private\Set-PackageDetailsCache.ps1
- Private\Show-WingetPackageDetails.ps1
- Private\Start-PackageDetailJobs.ps1
- Private\Start-WingetBatchJob.ps1
- Private\Start-WingetUpdateCheck.ps1
- Private\Update-GitHubApiRequestCount.ps1
- Public\Convert-WingetPackageToHaiku.ps1
- Public\Disable-WingetUpdateNotifications.ps1
- Public\Enable-WingetUpdateNotifications.ps1
- Public\Export-WingetBatchConfig.ps1
- Public\Get-WingetBatchConfig.ps1
- Public\Get-WingetHoroscope.ps1
- Public\Get-WingetNewPackages.ps1
- Public\Get-WingetUpdates.ps1
- Public\Import-WingetBatchConfig.ps1
- Public\Install-WingetAll.ps1
- Public\Invoke-WinGetBatch.ps1
- Public\Invoke-WingetBatchCleanup.ps1
- Public\Invoke-WingetRussianRoulette.ps1
- Public\New-WingetBatchGitHubToken.ps1
- Public\Remove-WingetRecent.ps1
- Public\Repair-WingetBatchManager.ps1
- Public\Set-WingetBatchConfig.ps1
- Public\Set-WingetBatchGitHubToken.ps1
- Public\Show-WingetMatrix.ps1
- Public\Start-WingetUpdateCheck.ps1
- Public\Test-WingetPackageVibes.ps1
- Public\Update-WingetBatch.ps1
- README.md
- WingetBatch.exe
- WingetBatch.psd1
- WingetBatch.psm1
- WingetBatch_Standalone.ps1
- benchmark.ps1
- benchmark_parser.ps1
- build.ps1
- docs\architecture_nextgen.md
- fix_trailing_spaces.ps1
- measure_group.ps1
- measure_install.ps1
- publish.ps1
- temp_publish.ps1
- test_hashset.ps1
- test_ux.ps1
- tests\ConvertTo-SpectreEscaped.Tests.ps1
- tests\Get-WingetBatchConfigDir.Tests.ps1
- tests\Parse-WingetShowOutput.Tests.ps1
- tests\Show-WingetPackageDetails.Tests.ps1
Version History
| Version | Downloads | Last updated |
|---|---|---|
| 2.6.2 (current version) | 11 | 7/8/2026 |
| 2.6.1 | 3 | 7/8/2026 |
| 2.6.0 | 42 | 6/26/2026 |
| 2.5.0 | 14 | 6/25/2026 |
| 2.4.7 | 46 | 6/9/2026 |
| 2.4.6 | 15 | 6/8/2026 |
| 2.4.5 | 5 | 6/8/2026 |
| 2.4.4 | 5 | 6/8/2026 |
| 2.4.3 | 6 | 6/8/2026 |
| 2.4.2 | 5 | 6/8/2026 |
| 2.4.1 | 8 | 6/8/2026 |
| 2.4.0 | 7 | 6/8/2026 |
| 2.3.1 | 47 | 5/22/2026 |
| 2.3.0 | 3 | 5/22/2026 |
| 2.2.1 | 47 | 5/8/2026 |
| 2.2.0 | 31 | 5/4/2026 |
| 2.1.2 | 18 | 5/2/2026 |
| 2.0.0 | 121 | 11/5/2025 |