meta_package_manager.managers.pwsh_gallery module¶
- class meta_package_manager.managers.pwsh_gallery.PWSH_Gallery[source]¶
Bases:
PackageManagerPowerShell 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 -AsArrayand are parsed as JSON;outdatedhas no native cmdlet, so its installed-versus-gallery comparison runs inside that singlepwshcall 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 shipsPowerShellGetv2, which depends on the NuGet provider and prompts to trustPSGalleryon first install.PSResourceGetships bundled withpwsh7.4+ and supersedes the v2 cmdlets with cleaner, JSON-friendly objects.Caution
All install and search operations target
-Scope CurrentUserso thatmpmdoes not require elevation.upgradeandremoveare scope- agnostic and operate on whichever scope holds each module.Caution
Install-PSResourceis invoked with-TrustRepositoryso the confirmation prompt on the defaultPSGalleryrepository is bypassed. Only the default repository is consulted: third-partyPSRepositoryregistrations are out of scope.Initialize
cli_errorslist.- name: str = 'PowerShell Gallery'¶
The metaclass derives
id = "pwsh-gallery"from the class name (PWSH_Gallery: lowercased, underscore→dash).namehere 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
frozensetofPlatforminstances at instantiation.
- requirement: str | None = '>=7.4.0'¶
PSResourceGetis 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
pythonorpython3.
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
pwshnon-interactively, with no user profile, and run a single-Commandexpression. Each operation passes one PowerShell expression as the final argument; subprocess receives a clean argv list so no shell quoting is required between Python andpwsh.Note
Version detection (
pwsh --version) skipspre_argsbecauseversioncallsrun_cliwithauto_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-InstalledPSResourceenumerates every module, script and DSC resource in every installed scope. TheVersionproperty is aNuGetVersionobject:ConvertTo-Jsonwould otherwise serialise it as a structured{Major, Minor, ...}mapping, so it is projected to a string up-front.ConvertTo-Json -AsArrayforces 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.
PSResourceGethas no built-inoutdatedcmdlet. The comparison is done server-side in a singlepwshinvocation: each installed resource is looked up viaFind-PSResourceand only emitted when the gallery version is strictly greater. Running the loop insidepwshavoids 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 -Nameaccepts a wildcard pattern. Wildcards are added aroundqueryfor fuzzy search and dropped for exact match.extendedsearch (matching against description) is not supported byFind-PSResource: results are refiltered in Python by the framework whenextended=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..."}]
- install(package_id, version=None)[source]¶
Install one resource into the current-user scope.
-TrustRepositorybypasses theUntrusted repositoryprompt thatPSGalleryemits on first install.-AcceptLicensesilently accepts any module-bundled license.-Reinstallis not passed: re-runninginstallon an already-installed resource is a no-op, matchingpip installbehaviour.$ pwsh -NoProfile -NonInteractive -Command \ "Install-PSResource -Name 'PSReadLine' -Scope CurrentUser \ -TrustRepository -AcceptLicense"
- Return type:
- 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"
- 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.