Skip to content

Specification: PowerShell Module Full Parity#6290

Draft
denelon wants to merge 3 commits into
microsoft:masterfrom
denelon:spec/powershell-module-parity
Draft

Specification: PowerShell Module Full Parity#6290
denelon wants to merge 3 commits into
microsoft:masterfrom
denelon:spec/powershell-module-parity

Conversation

@denelon

@denelon denelon commented Jun 17, 2026

Copy link
Copy Markdown
Collaborator

📖 Description

Specification for achieving full functional parity between the WinGet PowerShell module and the CLI. Covers new cmdlets for configure/pin/download/repair/settings, enhanced source management, and SYSTEM context support.

Authored with GitHub Copilot assistance.

🔗 References

Related Issues:

🔍 Validation

Spec document — no code changes to validate.

✅ Checklist

📋 Issue Type

  • Bug fix
  • Feature
  • Task
Microsoft Reviewers: Open in CodeFlow

Specification for achieving full functional parity between the WinGet
PowerShell module and the CLI, including SYSTEM context support,
new cmdlets for configure/pin/download/repair/settings operations,
and enhanced source management.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
// Pin management
interface IPackagePinManager
{
IAsyncOperation<IVectorView<PackagePin>> GetPinsAsync();

@Trenly Trenly Jun 17, 2026

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Implementation details at this level should be kept out of specificaitons, in my opinion. The inputs and outputs from the powershell cmdlets I understand, but the interface is a bit much

```powershell
# Intune remediation script
$pins = Get-WinGetPin
if ($pins | Where-Object { $_.Id -eq "Microsoft.Edge" -and $_.IsBlocking }) {

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggest $_.PinType instead of $_.IsBlocking for future expandability and for being able to check gating pins too

- Azure Automation runbooks can manage packages across fleets
- Potential for a `WinGet` PowerShell drive provider (`Get-ChildItem WinGet:\installed\`)

## Resources

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Demitrius Nelon and others added 2 commits June 17, 2026 13:01
WinGet ships two separate PowerShell modules:
- Microsoft.WinGet.Client (package management)
- Microsoft.WinGet.Configuration (configuration/DSC operations)

Update spec to clearly delineate which cmdlets belong to which module,
add Configuration-specific gaps (history, abort, delete), update the
architecture diagram, and note module consolidation as a future
consideration.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- Remove detailed IDL interface definitions (too implementation-level
  for a spec; keep high-level description of needed COM surface)
- Use PinType property instead of IsBlocking for future expandability
  (supports checking gating pins too)
- Add PR microsoft#6190 (Configuration module improvements) to Resources

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants