Prerelease-moduleversies

Vanaf versie 1.6.0 bieden PowerShellGet en de PowerShell Gallery ondersteuning voor het taggen van versies groter dan 1.0.0 als een voorlopige versie. Vóór deze functie waren prereleasepakketten beperkt tot een versie die begint met 0. Het doel van deze functies is om meer ondersteuning te bieden voor de versieconventie van SemVer v1.0.0 zonder dat de compatibiliteit met eerdere versies van PowerShell 3 en hoger of bestaande versies van PowerShellGet wordt verbroken. Dit onderwerp is gericht op de modulespecifieke functies. De equivalente functies voor scripts vindt u in het onderwerp Voorlopige versies van scripts . Met deze functies kunnen uitgevers een module of script identificeren als versie 2.5.0-alpha en later een productieklare versie 2.5.0 vrijgeven die de voorlopige versie vervangt.

Op hoog niveau zijn de functies van de prerelease-module:

  • Als u een prerelease-tekenreeks toevoegt aan de sectie PSData van het modulemanifest, wordt de module geïdentificeerd als een voorlopige versie. Wanneer de module wordt gepubliceerd naar de PowerShell Gallery, worden deze gegevens uit het manifest geëxtraheerd en gebruikt om pakketten vooraf te identificeren.
  • Voor het verkrijgen van voorlopige pakketten moet een vlag worden toegevoegd -AllowPrerelease aan de PowerShellGet-opdrachten Find-Module, Install-Module, Update-Moduleen Save-Module. Als de vlag niet is opgegeven, worden prereleasepakketten niet weergegeven.
  • Moduleversies die worden weergegeven door Find-Module, Get-InstalledModuleen in de PowerShell Gallery worden weergegeven als één tekenreeks waaraan de prerelease-tekenreeks is toegevoegd, zoals in 2.5.0-alpha.

Details voor de functies vindt u hieronder.

Deze wijzigingen hebben geen invloed op de moduleversieondersteuning die is ingebouwd in PowerShell en zijn compatibel met PowerShell 3.0, 4.0 en 5.

Een moduleversie identificeren als een voorlopige versie

PowerShellGet-ondersteuning voor voorlopige versies vereist het gebruik van twee velden in het modulemanifest:

  • De ModuleVersion die is opgenomen in het modulemanifest, moet een driedelige versie zijn als er een voorlopige versie wordt gebruikt en moet voldoen aan bestaande PowerShell-versiebeheer. De versie-indeling is A.B.C, waarbij A, B en C allemaal gehele getallen zijn.
  • De prerelease-tekenreeks wordt opgegeven in het modulemanifest in de sectie PSData van PrivateData.

Gedetailleerde vereisten voor de prerelease-tekenreeks staan hieronder.

Een voorbeeldsectie van een modulemanifest waarin een module als voorlopige versie wordt gedefinieerd, ziet er als volgt uit:

@{
    ModuleVersion = '2.5.0'
    #---
    PrivateData = @{
        PSData = @{
            Prerelease = 'alpha'
        }
    }
}

De gedetailleerde vereisten voor prerelease-tekenreeks zijn:

  • Prerelease-tekenreeks kan alleen worden opgegeven wanneer de ModuleVersion 3 segmenten is voor Major.Minor.Build. Dit komt overeen met SemVer v1.0.0.
  • Een afbreekstreepje is het scheidingsteken tussen het buildnummer en de tekenreeks Prerelease. Een afbreekstreepje kan alleen als eerste teken worden opgenomen in de prerelease-tekenreeks.
  • De prereleasetekenreeks mag alleen ASCII-alfanumerieke tekens [0-9A-Za-z-] bevatten. Het is een best practice om de prerelease-tekenreeks te beginnen met een alfateken, omdat het gemakkelijker is om te herkennen dat dit een voorlopige versie is bij het scannen van een lijst met pakketten.
  • Op dit moment worden alleen SemVer v1.0.0-prereleasetekenreeksen ondersteund. Prerelease-tekenreeks mag geen punt of + [.+] bevatten, die zijn toegestaan in SemVer 2.0.
  • Voorbeelden van ondersteunde prereleasetekenreeks zijn: -alpha, -alpha1, -BETA, -update20171020

Invloed van voorlopige versiebeheer op sorteervolgorde en installatiemappen

Sorteervolgordewijzigingen bij het gebruik van een voorlopige versie, wat belangrijk is bij het publiceren naar de PowerShell Gallery en bij het installeren van modules met behulp van PowerShellGet-opdrachten. Als de prerelease-tekenreeks is opgegeven voor twee modules, is de sorteervolgorde gebaseerd op het tekenreeksgedeelte na het afbreekstreepje. Versie 2.5.0-alpha is dus kleiner dan 2.5.0-beta, wat minder is dan 2.5.0-gamma. Als twee modules dezelfde ModuleVersion hebben en slechts één een prerelease-tekenreeks heeft, wordt ervan uitgegaan dat de module zonder de prerelease-tekenreeks de productieklare versie is en wordt deze gesorteerd als een grotere versie dan de prerelease-versie (die de prerelease-tekenreeks bevat). Bij het vergelijken van releases 2.5.0 en 2.5.0-beta wordt de versie 2.5.0 als de grootste van de twee beschouwd.

Wanneer u publiceert naar de PowerShell Gallery, moet de versie van de module die wordt gepubliceerd standaard een hogere versie hebben dan alle eerder gepubliceerde versies in de PowerShell Gallery.

Voorlopige pakketten zoeken en verkrijgen met behulp van PowerShellGet-opdrachten

Voor het verwerken van prereleasepakketten met behulp van PowerShellGet Find-Module, Install-Module, Update-Module en Save-Module opdrachten moet de vlag -AllowPrerelease worden toegevoegd. Als -AllowPrerelease is opgegeven, worden prerelease-pakketten opgenomen als ze aanwezig zijn. Als de vlag -AllowPrerelease niet is opgegeven, worden prereleasepakketten niet weergegeven.

De enige uitzonderingen hierop in de PowerShellGet-moduleopdrachten zijn Get-InstalledModule en in sommige gevallen met Uninstall-Module.

  • Get-InstalledModule geeft altijd automatisch de prerelease-informatie weer in de versietekenreeks voor modules.
  • Uninstall-Module verwijdert standaard de meest recente versie van een module als er geen versie is opgegeven. Dat gedrag is niet veranderd. Als echter een voorlopige versie is opgegeven met behulp van -RequiredVersion, is -AllowPrerelease vereist.

Voorbeelden

Stel dat de PowerShell Gallery testpackage-moduleversies 1.8.0 en 1.9.0-alpha heeft. Als -AllowPrerelease niet is opgegeven, wordt alleen versie 1.8.0 geretourneerd.

find-module TestPackage
Version        Name           Repository  Description
-------        ----           ----------  -----------
1.8.0          TestPackage    PSGallery   Package used to validate changes to the PowerShe...
find-module TestPackage -AllowPrerelease
Version        Name           Repository  Description
-------        ----           ----------  -----------
1.9.0-alpha    TestPackage    PSGallery   Package used to validate changes to the PowerShe...

Als u een voorlopige versie wilt installeren, geeft u altijd -AllowPrerelease op. Het opgeven van een voorlopige versietekenreeks is niet voldoende.

Install-module TestPackage -RequiredVersion 1.9.0-alpha
PackageManagement\Find-Package : No match was found for the specified search criteria and module name 'TestPackage'.
Try Get-PSRepository to see all available registered module repositories.
At C:\Program Files\WindowsPowerShell\Modules\PowerShellGet\1.6.0\PSModule.psm1:1455 char:3
+         PackageManagement\Find-Package @PSBoundParameters | Microsoft ...
+         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : ObjectNotFound: (Microsoft.Power...ets.FindPackage:FindPackage) [Find-Package], Exception
    + FullyQualifiedErrorId : NoMatchFoundForCriteria,Microsoft.PowerShell.PackageManagement.Cmdlets.FindPackage

De vorige opdracht is mislukt omdat -AllowPrerelease niet is opgegeven. Als u toevoegt -AllowPrerelease , wordt dit voltooid.

Install-module TestPackage -RequiredVersion 1.9.0-alpha -AllowPrerelease
Get-InstalledModule TestPackage
Version         Name          Repository  Description
-------         ----          ----------  -----------
1.9.0-alpha     TestPackage   PSGallery   Package used to validate changes to the PowerShe...

Installatie naast elkaar van versies van een module die alleen verschillen vanwege de opgegeven prerelease wordt niet ondersteund. Wanneer u een module installeert met behulp van PowerShellGet, worden verschillende versies van dezelfde module naast elkaar geïnstalleerd door een mapnaam te maken met behulp van de ModuleVersion. De ModuleVersion, zonder de prerelease-tekenreeks, wordt gebruikt voor de mapnaam. Als een gebruiker MyModule versie 2.5.0-alpha installeert, wordt deze geïnstalleerd in de MyModule\2.5.0 map. Als de gebruiker vervolgens 2.5.0-beta installeert, overschrijft de 2.5.0-beta-versie de inhoud van de map MyModule\2.5.0. Een voordeel van deze aanpak is dat de installatie van de voorlopige versie niet ongedaan hoeft te worden gemaakt nadat de productieklare versie is geïnstalleerd. In het onderstaande voorbeeld ziet u wat u kunt verwachten:

C:\windows\system32> Get-InstalledModule TestPackage -AllVersions

Version         Name           Repository  Description
-------         ----           ----------  -----------
1.9.0-alpha     TestPackage    PSGallery   Package used to validate changes to the PowerShe...
1.8.0           TestPackage    PSGallery   Package used to validate changes to the PowerShe...
1.1.3.2         TestPackage    PSGallery   Package used to validate changes to the PowerShe...

C:\windows\system32> find-module TestPackage -AllowPrerelease

Version        Name            Repository  Description
-------        ----            ----------  -----------
1.9.0-beta     TestPackage     PSGallery   Package used to validate changes to the PowerShe...

C:\windows\system32> Update-Module TestPackage -AllowPrerelease
C:\windows\system32> Get-InstalledModule TestPackage -AllVersions

Version         Name           Repository  Description
-------         ----           ----------  -----------
1.9.0-beta      TestPackage    PSGallery   Package used to validate changes to the PowerShe...
1.8.0           TestPackage    PSGallery   Package used to validate changes to the PowerShe...
1.1.3.2         TestPackage    PSGallery   Package used to validate changes to the PowerShe...

Uninstall-Module verwijdert de nieuwste versie van een module wanneer -RequiredVersion niet is opgegeven. Als -RequiredVersion is opgegeven en een prerelease is, moet -AllowPrerelease worden toegevoegd aan de opdracht.

C:\windows\system32> Get-InstalledModule TestPackage -AllVersions

Version         Name           Repository  Description
-------         ----           ----------  -----------
2.0.0-alpha1    TestPackage    PSGallery   Package used to validate changes to the PowerShe...
1.9.0-beta      TestPackage    PSGallery   Package used to validate changes to the PowerShe...
1.8.0           TestPackage    PSGallery   Package used to validate changes to the PowerShe...
1.1.3.2         TestPackage    PSGallery   Package used to validate changes to the PowerShe...

C:\windows\system32> Uninstall-Module TestPackage -RequiredVersion 1.9.0-beta

Uninstall-Module : The '-AllowPrerelease' parameter must be specified when using the Prerelease string in
MinimumVersion, MaximumVersion, or RequiredVersion.
At line:1 char:1
+ Uninstall-Module TestPackage -RequiredVersion 1.9.0-beta
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidArgument: (:) [Uninstall-Module], ArgumentException
    + FullyQualifiedErrorId : AllowPrereleaseRequiredToUsePrereleaseStringInVersion,Uninstall-Module

C:\windows\system32> Uninstall-Module TestPackage -RequiredVersion 1.9.0-beta -AllowPrerelease
C:\windows\system32> Get-InstalledModule TestPackage -AllVersions

Version         Name          Repository   Description
-------         ----          ----------   -----------
2.0.0-alpha1    TestPackage   PSGallery    Package used to validate changes to the PowerShe...
1.8.0           TestPackage   PSGallery    Package used to validate changes to the PowerShe...
1.1.3.2         TestPackage   PSGallery    Package used to validate changes to the PowerShe...

C:\windows\system32> Uninstall-Module TestPackage
C:\windows\system32> Get-InstalledModule TestPackage -AllVersions

Version         Name          Repository   Description
-------         ----          ----------   -----------
1.8.0           TestPackage   PSGallery    Package used to validate changes to the PowerShe...
1.1.3.2         TestPackage   PSGallery    Package used to validate changes to the PowerShe...

Meer informatie