WingetBatch
2.9.0
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-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
Dependencies
Release Notes
v2.9.0 - The Full Arsenal
- NEW: Get-WingetRecommend - AI-powered package recommendations (persona matching + personality clone).
- NEW: Invoke-WingetFleet - SCCM-lite fleet management over WinRM/SSH.
- NEW: Restore-WingetSnapshot - Package-level rollback engine (undo, restore, diff).
- NEW: Test-WingetCompliance - Policy/compliance engine (required, banned, version floors).
- NEW: Get-WingetHealthScore - Package trustworthiness rating (0-100, A+ through F).
- NEW: Send-WingetWebhook - Discord/Slack/Teams notifications for package events.
- NEW: Export-WingetOffline - Air-gapped offline package deployment with hash verification.
- NEW: Install-WingetProfile - Shareable community setup profiles (8 built-in).
- NEW: Get-WingetChangelog - Version history and release notes diff between versions.
- 34 total commands. Author/Architect: Matthew Bubb.
v2.8.0 - Automation, Visualization & Remote Management
- NEW: Register-WingetMaintenance - Scheduled maintenance tasks for automatic package updates.
* Daily/Weekly/Monthly recurrence with configurable time and actions.
* Actions: UpdateAll, UpdateOutdated, CleanupTemp, AuditDrift, NotifyOnly.
* JSON reports with 30-report retention. Runs as SYSTEM or current user.
* -Status, -Unregister, -RunNow for full lifecycle management.
- NEW: Get-WingetDependencyGraph - Package dependency graph visualization.
* Output formats: Mermaid (GitHub/docs), DOT (Graphviz), ASCII Tree, Object.
* Circular dependency detection and highlighting.
* Fetches dependency data from winget-pkgs GitHub manifests.
* Configurable depth, external dependency inclusion, and file output.
- NEW: Start-WingetServer - REST API server for remote package management (Pode).
* Full CRUD: install, uninstall, update, search packages over HTTP.
* Endpoints: /api/packages, /api/updates, /api/state, /api/history, /api/stats.
* API key authentication, rate limiting, request logging.
* Self-documenting: GET / returns full endpoint catalog.
- Author/Architect: Matthew Bubb.
v2.7.0 - Machine-as-Code & Developer Experience
- NEW: Get-WingetMachineState - Full machine state snapshot, drift comparison, and reconciliation (Machine-as-Code).
* Export installed packages to portable JSON/YAML manifests.
* Compare current state against a golden baseline for drift detection.
* Reconcile: auto-install missing, update outdated, optionally remove extraneous packages.
- NEW: Get-WingetPackageInfo - Rich brew-info-style package explorer with GitHub manifest fetching.
- NEW: Get-WingetHistory - Installation history timeline from registry and winget logs.
- NEW: Watch-WingetPackages - Live terminal dashboard (htop-style) for package monitoring.
- NEW: Find-WingetDuplicate - Detect duplicate packages, multi-source installs, and version clusters.
- NEW: Tab-completion argument completers for package IDs across all commands.
- SECURITY: Eliminated all Invoke-Expression usage in Invoke-WinGetBatch (command injection fix).
- SECURITY: Replaced hardcoded paths with dynamic environment resolution.
- FIXED: Package deduplication bug in Install-WingetAll (duplicates were shown and installed).
- ENHANCED: Installation progress counter [N/M] for all batch operations.
- ENHANCED: Invoke-WinGetBatch now uses COM API as primary install path with CLI fallback.
- Author/Architect: Matthew Bubb.
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
- .github\workflows\publish.yml
- LICENSE
- 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\Register-WingetBatchCompleters.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\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\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.9.0 (current version) | 10 | 7/28/2026 |
| 2.8.0 | 7 | 7/28/2026 |
| 2.7.0 | 14 | 7/27/2026 |
| 2.6.2 | 61 | 7/8/2026 |
| 2.6.1 | 3 | 7/8/2026 |
| 2.6.0 | 43 | 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 |