Contents Menu Expand Light mode Dark mode Auto light/dark, in light mode Auto light/dark, in dark mode Skip to content
Meta Package Manager has been maintained for 10+ years, and is free to use. You can help if you 🤝 purchase business support or 🫶 sponsor the project.
Meta Package Manager
Light Logo Dark Logo
  • Installation
  • Package managers
    • AppImage Manager
    • Antidote
    • Zsh Antigen
    • Alpine apk
    • Atom apm
    • Debian apt
    • apt-cyg
    • Linux Mint apt
    • asdf
    • Basalt
    • bin
    • bob
    • bpkg
    • Homebrew Formulae
    • Bun
    • Rust cargo
    • Homebrew Cask
    • cave
    • Chocolatey
    • Chromebrew
    • clib
    • PHP Composer
    • Conda
    • Perl CPAN
    • deb-get
    • devkitPro pacman
    • Fedora DNF
    • Fedora DNF5
    • dotnet tool
    • Lean elan
    • Gentoo emerge
    • Solus eopkg
    • Fink
    • Fish fisher
    • Flatpak
    • Linux fwupd
    • Google Cloud CLI
    • RubyGems
    • getnf
    • GNOME Shell extensions
    • GitHub CLI extensions
    • Haskell ghcup
    • GNU Guix
    • Haxe haxelib
    • jpm
    • Julia juliaup
    • kubectl krew
    • Neovim lazy-nvim
    • LuaRocks
    • MacPorts
    • Mamba
    • Mac App Store
    • Neovim mason-nvim
    • micro editor
    • Micromamba
    • MiKTeX
    • mise
    • Nala
    • Nimble
    • Nix
    • Node npm
    • Fish Oh My Fish
    • Ollama
    • OCaml opam
    • opkg
    • Arch Linux pacaur
    • Arch Linux pacman
    • Pacstall
    • Manjaro pamac
    • Arch Linux paru
    • Arch Linux pikaur
    • Python pip
    • Python pipx
    • pixi
    • PackageKit
    • FreeBSD pkg
    • OpenBSD pkg tools
    • Pkgin
    • Node pnpm
    • FreeBSD Ports Collection
    • PowerShell Gallery
    • Python pyenv
    • raco
    • Rust rustup
    • Scoop
    • SDKMAN
    • Scoop sfsu
    • Sheldon
    • slapt-get
    • Snap
    • Soar
    • Sorcery
    • Spack
    • Valve SteamCMD
    • stew
    • Solaris SVR4 package tools
    • Clear Linux Software Updater
    • TazPkg
    • TeX Live Manager
    • Topgrade
    • Arch Linux trizen
    • urpmi
    • Python uv
    • Python uvx
    • Vagrant
    • vcpkg
    • Neovim vim-pack
    • Volta
    • Visual Studio Code
    • VSCodium
    • WinGet
    • Void XBPS
    • Xcode xcodes
    • Yarn Classic
    • Yarn Berry
    • Arch Linux yay
    • Yazi ya
    • Fedora YUM
    • Zef
    • zerobrew
    • Zero Install
    • Zsh Zim
    • Zinit
    • Zsh zplug
    • openSUSE Zypper
  • Manager augmentations
  • Cross-manager operations
  • JSON & CSV exports
  • Snapshot and export
  • SBOM: Software Bill of Materials
  • CLI parameters
  • Man pages
  • Configuration
  • Per-manager overrides
  • Cooldown
  • Concurrency
  • Privilege escalation and sudo
  • Security model
  • Desktop menus
    • SwiftBar & Xbar plugin
    • GNOME Shell extension
  • Benchmark
  • Unsupported managers
  • Falsehoods programmers believe about package managers

Development

  • Contribution guide
  • Add a new package manager
  • Add a packaging channel
  • API
    • meta_package_manager.managers package
      • meta_package_manager.managers.am module
      • meta_package_manager.managers.antidote module
      • meta_package_manager.managers.antigen module
      • meta_package_manager.managers.apk module
      • meta_package_manager.managers.apm module
      • meta_package_manager.managers.apt module
      • meta_package_manager.managers.asdf module
      • meta_package_manager.managers.bin module
      • meta_package_manager.managers.composer module
      • meta_package_manager.managers.conda module
      • meta_package_manager.managers.deb_get module
      • meta_package_manager.managers.dnf module
      • meta_package_manager.managers.dotnet module
      • meta_package_manager.managers.emerge module
      • meta_package_manager.managers.eopkg module
      • meta_package_manager.managers.fisher module
      • meta_package_manager.managers.flatpak module
      • meta_package_manager.managers.fwupd module
      • meta_package_manager.managers.gem module
      • meta_package_manager.managers.gext module
      • meta_package_manager.managers.ghcup module
      • meta_package_manager.managers.guix module
      • meta_package_manager.managers.homebrew module
      • meta_package_manager.managers.luarocks module
      • meta_package_manager.managers.mamba module
      • meta_package_manager.managers.mas module
      • meta_package_manager.managers.miktex module
      • meta_package_manager.managers.mise module
      • meta_package_manager.managers.nala module
      • meta_package_manager.managers.neovim module
      • meta_package_manager.managers.nimble module
      • meta_package_manager.managers.nix module
      • meta_package_manager.managers.npm module
      • meta_package_manager.managers.oh_my_fish module
      • meta_package_manager.managers.pacman module
      • meta_package_manager.managers.pacstall module
      • meta_package_manager.managers.pip module
      • meta_package_manager.managers.pipx module
      • meta_package_manager.managers.pixi module
      • meta_package_manager.managers.pkcon module
      • meta_package_manager.managers.pkg module
      • meta_package_manager.managers.pnpm module
      • meta_package_manager.managers.pwsh_gallery module
      • meta_package_manager.managers.scoop module
      • meta_package_manager.managers.sdkman module
      • meta_package_manager.managers.sfsu module
      • meta_package_manager.managers.sheldon module
      • meta_package_manager.managers.snap module
      • meta_package_manager.managers.spack module
      • meta_package_manager.managers.sun_tools module
      • meta_package_manager.managers.tazpkg module
      • meta_package_manager.managers.uv module
      • meta_package_manager.managers.vagrant module
      • meta_package_manager.managers.vcpkg module
      • meta_package_manager.managers.volta module
      • meta_package_manager.managers.winget module
      • meta_package_manager.managers.xbps module
      • meta_package_manager.managers.yarn module
      • meta_package_manager.managers.zef module
      • meta_package_manager.managers.zim module
      • meta_package_manager.managers.zinit module
      • meta_package_manager.managers.zplug module
      • meta_package_manager.managers.zypper module
    • meta_package_manager.sbom package
      • meta_package_manager.sbom.base module
      • meta_package_manager.sbom.cyclonedx module
      • meta_package_manager.sbom.spdx module
      • meta_package_manager.sbom.vulnerabilities module
    • meta_package_manager.bar_plugin module
    • meta_package_manager.bar_plugin_renderer module
    • meta_package_manager.brewfile module
    • meta_package_manager.capabilities module
    • meta_package_manager.cli module
    • meta_package_manager.cli_explore module
    • meta_package_manager.cli_maintenance module
    • meta_package_manager.cli_sbom module
    • meta_package_manager.cli_snapshots module
    • meta_package_manager.config module
    • meta_package_manager.cooldown module
    • meta_package_manager.definitions module
    • meta_package_manager.dispatch module
    • meta_package_manager.docstring_corpus module
    • meta_package_manager.execution module
    • meta_package_manager.labels module
    • meta_package_manager.logo module
    • meta_package_manager.manager module
    • meta_package_manager.package module
    • meta_package_manager.platforms module
    • meta_package_manager.pool module
    • meta_package_manager.specifier module
    • meta_package_manager.sudo module
    • meta_package_manager.summary module
    • meta_package_manager.tables module
    • meta_package_manager.version module
  • tests package
    • tests.conftest module
    • tests.destructive_plan module
    • tests.fake_manager module
    • tests.test_bar_plugin module
    • tests.test_brewfile module
    • tests.test_cli module
    • tests.test_cli_backup module
    • tests.test_cli_dump module
    • tests.test_cli_install_remove module
    • tests.test_cli_installed module
    • tests.test_cli_managers module
    • tests.test_cli_orphans module
    • tests.test_cli_outdated module
    • tests.test_cli_restore module
    • tests.test_cli_sbom module
    • tests.test_cli_search module
    • tests.test_cli_upgrade module
    • tests.test_cli_which module
    • tests.test_cooldown module
    • tests.test_dispatch module
    • tests.test_docs module
    • tests.test_docstring_corpus module
    • tests.test_doctor module
    • tests.test_execution module
    • tests.test_gnome_extension module
    • tests.test_help module
    • tests.test_logo module
    • tests.test_manager_apt module
    • tests.test_manager_definition module
    • tests.test_manager_homebrew module
    • tests.test_manager_mas module
    • tests.test_manager_mise module
    • tests.test_manager_overrides module
    • tests.test_manager_pip module
    • tests.test_manager_pipx module
    • tests.test_manager_pwsh_gallery module
    • tests.test_manager_uv module
    • tests.test_manager_winget module
    • tests.test_managers module
    • tests.test_metadata module
    • tests.test_orphans module
    • tests.test_pool module
    • tests.test_sbom module
    • tests.test_sbom_vulnerabilities module
    • tests.test_specifier module
    • tests.test_sphinx_crossrefs module
    • tests.test_sudo module
    • tests.test_version module
  • Downstream packaging
  • Binaries
  • Infrastructure
  • Releasing
  • Index
  • Module Index
  • Changelog
  • History
  • Todo-list
  • Code of conduct
  • Legal notices
  • GitHub repository
  • Funding
Back to top
View this page
Edit this page

meta_package_manager.managers.pwsh_gallery module¶

class meta_package_manager.managers.pwsh_gallery.PWSH_Gallery[source]¶

Bases: PackageManager

PowerShell Gallery client, driven through the modern Microsoft.PowerShell.PSResourceGet module.

Note

Every operation is one PowerShell expression, run non-interactively with no user profile loaded. Reads emit ConvertTo-Json -AsArray and are parsed as JSON; outdated has no native cmdlet, so its installed-versus-gallery comparison runs inside that single pwsh call rather than as one round trip per installed module.

Note

Only pwsh (PowerShell 7+) is supported. Legacy Windows PowerShell 5.1 is intentionally excluded: it ships PowerShellGet v2, which depends on the NuGet provider and prompts to trust PSGallery on first install. PSResourceGet ships bundled with pwsh 7.4+ and supersedes the v2 cmdlets with cleaner, JSON-friendly objects.

Caution

All install and search operations target -Scope CurrentUser so that mpm does not require elevation. upgrade and remove are scope- agnostic and operate on whichever scope holds each module.

Caution

Install-PSResource is invoked with -TrustRepository so the confirmation prompt on the default PSGallery repository is bypassed. Only the default repository is consulted: third-party PSRepository registrations are out of scope.

Initialize cli_errors list.

name: str = 'PowerShell Gallery'¶

The metaclass derives id = "pwsh-gallery" from the class name (PWSH_Gallery: lowercased, underscore→dash). name here is the official product name shown to users.

homepage_url: str | None = 'https://www.powershellgallery.com'¶

Home page of the project, only used in documentation for reference.

platforms: frozenset[Platform] | Group | Platform | Iterable[Platform | Group] = frozenset({Platform(id='almalinux', name='AlmaLinux'), Platform(id='alpine', name='Alpine Linux'), Platform(id='altlinux', name='ALT Linux'), Platform(id='amzn', name='Amazon Linux'), Platform(id='android', name='Android'), Platform(id='arch', name='Arch Linux'), Platform(id='buildroot', name='Buildroot'), Platform(id='cachyos', name='CachyOS'), Platform(id='centos', name='CentOS'), Platform(id='chromeos', name='ChromeOS'), Platform(id='clearlinux', name='Clear Linux OS'), Platform(id='cloudlinux', name='CloudLinux OS'), Platform(id='debian', name='Debian'), Platform(id='endeavouros', name='EndeavourOS'), Platform(id='exherbo', name='Exherbo Linux'), Platform(id='fedora', name='Fedora'), Platform(id='generic_linux', name='Generic Linux'), Platform(id='gentoo', name='Gentoo Linux'), Platform(id='guix', name='Guix System'), Platform(id='ibm_powerkvm', name='IBM PowerKVM'), Platform(id='kali', name='Kali Linux'), Platform(id='kvmibm', name='KVM for IBM z Systems'), Platform(id='linuxmint', name='Linux Mint'), Platform(id='macos', name='macOS'), Platform(id='mageia', name='Mageia'), Platform(id='mandriva', name='Mandriva Linux'), Platform(id='manjaro', name='Manjaro Linux'), Platform(id='nixos', name='NixOS'), Platform(id='nobara', name='Nobara'), Platform(id='opensuse', name='openSUSE'), Platform(id='openwrt', name='OpenWrt'), Platform(id='oracle', name='Oracle Linux'), Platform(id='parallels', name='Parallels'), Platform(id='pidora', name='Pidora'), Platform(id='pikaos', name='PikaOS'), Platform(id='raspbian', name='Raspbian'), Platform(id='rhel', name='RedHat Enterprise Linux'), Platform(id='rocky', name='Rocky Linux'), Platform(id='scientific', name='Scientific Linux'), Platform(id='slackware', name='Slackware'), Platform(id='sles', name='SUSE Linux Enterprise Server'), Platform(id='slitaz', name='SliTaz GNU/Linux'), Platform(id='sourcemage', name='Source Mage GNU/Linux'), Platform(id='tuxedo', name='Tuxedo OS'), Platform(id='ubuntu', name='Ubuntu'), Platform(id='ultramarine', name='Ultramarine'), Platform(id='void', name='Void Linux'), Platform(id='windows', name='Windows'), Platform(id='wsl1', name='Windows Subsystem for Linux v1'), Platform(id='wsl2', name='Windows Subsystem for Linux v2'), Platform(id='xenserver', name='XenServer')})¶

List of platforms supported by the manager.

Allows for a mishmash of platforms and groups of platforms. Will be normalized into a frozenset of Platform instances at instantiation.

requirement: str | None = '>=7.4.0'¶

PSResourceGet is bundled with PowerShell 7.4+, which is the floor where every operation below runs without installing extra modules.

cli_names: tuple[str, ...] = ('pwsh',)¶

List of CLI names the package manager is known as.

This list of recognized CLI names is ordered by priority. That way we can influence the search of the right binary.

..hint::

This was helpful in the case of the Python transition from 2.x to 3.x, where multiple versions of the same executable were named python or python3.

By default, this property’s value is derived from the manager’s ID (see the MetaPackageManager.__init__ method above).

pre_args: tuple[str, ...] = ('-NoProfile', '-NonInteractive', '-Command')¶

Always invoke pwsh non-interactively, with no user profile, and run a single -Command expression. Each operation passes one PowerShell expression as the final argument; subprocess receives a clean argv list so no shell quoting is required between Python and pwsh.

Note

Version detection (pwsh --version) skips pre_args because version calls run_cli with auto_pre_args=False.

version_regexes: tuple[str, ...] = ('PowerShell\\s+(?P<version>\\S+)',)¶
$ pwsh --version
PowerShell 7.4.6
property installed: Iterator[Package]¶

Fetch installed PowerShell resources.

Get-InstalledPSResource enumerates every module, script and DSC resource in every installed scope. The Version property is a NuGetVersion object: ConvertTo-Json would otherwise serialise it as a structured {Major, Minor, ...} mapping, so it is projected to a string up-front. ConvertTo-Json -AsArray forces a JSON array even when zero or one resource is returned (single results would otherwise be serialised as a bare object).

$ pwsh -NoProfile -NonInteractive -Command \
    "Get-InstalledPSResource | \
     Select-Object Name, @{n='Version';e={$_.Version.ToString()}} | \
     ConvertTo-Json -AsArray -Depth 2 -Compress"
[{"Name":"PSReadLine","Version":"2.3.6"},
 {"Name":"Pester","Version":"5.5.0"}]
property outdated: Iterator[Package]¶

Fetch resources with a newer release on the gallery.

PSResourceGet has no built-in outdated cmdlet. The comparison is done server-side in a single pwsh invocation: each installed resource is looked up via Find-PSResource and only emitted when the gallery version is strictly greater. Running the loop inside pwsh avoids the N+1 round trips that a Python-side comparison would cause.

$ pwsh -NoProfile -NonInteractive -Command \
    "Get-InstalledPSResource | ForEach-Object { ... } | \
     ConvertTo-Json -AsArray -Depth 2 -Compress"
[{"Name":"PSReadLine","Installed":"2.3.4","Latest":"2.3.6"}]
search(query, extended, exact)[source]¶

Search the gallery.

Find-PSResource -Name accepts a wildcard pattern. Wildcards are added around query for fuzzy search and dropped for exact match.

extended search (matching against description) is not supported by Find-PSResource: results are refiltered in Python by the framework when extended=True.

$ pwsh -NoProfile -NonInteractive -Command \
    "Find-PSResource -Name '*readline*' | \
     Select-Object Name, @{n='Version';e={$_.Version.ToString()}}, Description | \
     ConvertTo-Json -AsArray -Depth 2 -Compress"
[{"Name":"PSReadLine","Version":"2.3.6",
  "Description":"Great command line editing..."}]
Return type:

Iterator[Package]

install(package_id, version=None)[source]¶

Install one resource into the current-user scope.

-TrustRepository bypasses the Untrusted repository prompt that PSGallery emits on first install. -AcceptLicense silently accepts any module-bundled license. -Reinstall is not passed: re-running install on an already-installed resource is a no-op, matching pip install behaviour.

$ pwsh -NoProfile -NonInteractive -Command \
    "Install-PSResource -Name 'PSReadLine' -Scope CurrentUser \
     -TrustRepository -AcceptLicense"
Return type:

str

id: str = 'pwsh-gallery'¶

Package manager’s ID.

Derived by defaults from the lower-cased class name in which underscores _ are replaced by dashes -.

This ID must be unique among all package manager definitions and lower-case, as they’re used as feature flags for the mpm CLI.

upgrade_all_cli()[source]¶

Upgrade every installed resource to its latest gallery version.

Scope is intentionally not constrained: any installed resource is eligible, regardless of which scope it lives in.

$ pwsh -NoProfile -NonInteractive -Command \
    "Update-PSResource -TrustRepository -AcceptLicense"
Return type:

tuple[str, ...]

virtual: bool = False¶

Should we expose the package manager to the user?

Virtual package manager are just skeleton classes used to factorize code among managers of the same family.

upgrade_one_cli(package_id, version=None)[source]¶

Upgrade a single resource.

$ pwsh -NoProfile -NonInteractive -Command \
    "Update-PSResource -Name 'PSReadLine' -TrustRepository -AcceptLicense"
Return type:

tuple[str, ...]

remove(package_id)[source]¶

Uninstall a resource from whichever scope holds it.

$ pwsh -NoProfile -NonInteractive -Command \
    "Uninstall-PSResource -Name 'PSReadLine'"
Return type:

str

Next
meta_package_manager.managers.scoop module
Previous
meta_package_manager.managers.pnpm module
Copyright © Kevin Deldycke and contributors
Made with Furo
Last updated on 2026-08-29
On this page
  • meta_package_manager.managers.pwsh_gallery module
    • PWSH_Gallery
      • PWSH_Gallery.name
      • PWSH_Gallery.homepage_url
      • PWSH_Gallery.platforms
      • PWSH_Gallery.requirement
      • PWSH_Gallery.cli_names
      • PWSH_Gallery.pre_args
      • PWSH_Gallery.version_regexes
      • PWSH_Gallery.installed
      • PWSH_Gallery.outdated
      • PWSH_Gallery.search()
      • PWSH_Gallery.install()
      • PWSH_Gallery.id
      • PWSH_Gallery.upgrade_all_cli()
      • PWSH_Gallery.virtual
      • PWSH_Gallery.upgrade_one_cli()
      • PWSH_Gallery.remove()