Förhandsversioner av modulen

Från och med version 1.6.0 ger PowerShellGet och PowerShell-galleriet stöd för taggning av versioner som är större än 1.0.0 som förhandsversion. Före den här funktionen var förhandsversionspaket begränsade till att ha en version som började med 0. Målet med dessa funktioner är att ge större stöd för SemVer v1.0.0-versionskonventionen utan att bryta bakåtkompatibilitet med PowerShell version 3 och senare eller befintliga versioner av PowerShellGet. Det här avsnittet fokuserar på modulspecifika funktioner. Motsvarande funktioner för skript finns i avsnittet Förhandsversioner av skript . Med hjälp av dessa funktioner kan utgivare identifiera en modul eller ett skript som version 2.5.0-alpha och senare släppa en produktionsklar version 2.5.0 som ersätter förhandsversionen.

På hög nivå omfattar förhandsversionsmodulfunktionerna:

  • Om du lägger till en förhandsversionssträng i avsnittet PSData i modulmanifestet identifieras modulen som en förhandsversion. När modulen publiceras till PowerShell-galleriet extraheras dessa data från manifestet och används för att identifiera förhandsversionspaket.
  • För att hämta förhandsversionspaket måste du lägga -AllowPrerelease till flaggan i PowerShellGet-kommandona Find-Module, Install-Module, Update-Moduleoch Save-Module. Om flaggan inte anges visas inte förhandsversionspaketen.
  • Modulversioner som visas av Find-Module, Get-InstalledModuleoch i PowerShell-galleriet visas som en enda sträng med prerelease-strängen tillagd, som i 2.5.0-alpha.

Information om funktionerna finns nedan.

Dessa ändringar påverkar inte det modulversionsstöd som är inbyggt i PowerShell och är kompatibla med PowerShell 3.0, 4.0 och 5.

Identifiera en modulversion som en förhandsversion

PowerShellGet-stöd för förhandsversioner kräver användning av två fält i modulmanifestet:

  • ModuleVersion som ingår i modulmanifestet måste vara en version i tre delar om en förhandsversion används och måste följa befintlig PowerShell-versionshantering. Versionsformatet skulle vara A.B.C, där A, B och C alla är heltal.
  • Strängen Prerelease anges i modulmanifestet i avsnittet PSData i PrivateData.

Detaljerade krav för förhandsversionssträngen finns nedan.

Ett exempelavsnitt i ett modulmanifest som definierar en modul som en förhandsversion skulle se ut så här:

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

De detaljerade kraven för förhandsversionssträngen är:

  • Förhandsversionssträngen kan bara anges när ModuleVersion är 3 segment för Major.Minor.Build. Detta överensstämmer med SemVer v1.0.0.
  • Ett bindestreck är avgränsaren mellan build-numret och prerelease-strängen. Ett bindestreck kan endast ingå i förhandsversionssträngen som det första tecknet.
  • Prerelease-strängen får endast innehålla ASCII-alfanumeriska tecken [0-9A-Za-z-]. Det är en bra idé att börja prereleasesträngen med ett alfatecken, eftersom det blir lättare att identifiera att detta är en förhandsversion när du skannar en lista med paket.
  • Endast SemVer v1.0.0-förhandsversionssträngar stöds just nu. Förhandsversionssträngen får inte innehålla punkt eller + [.+], som tillåts i SemVer 2.0.
  • Exempel på förhandsversionssträngar som stöds är: -alpha, -alpha1, -BETA, -update20171020

Versionshantering i förväg påverkar sorteringsordningen och installationsmapparna

Sorteringsordningen ändras när du använder en förhandsversion, vilket är viktigt när du publicerar till PowerShell-galleriet och när du installerar moduler med PowerShellGet-kommandon. Om strängen Prerelease anges för två moduler baseras sorteringsordningen på strängdelen efter bindestrecket. Så version 2.5.0-alpha är mindre än 2.5.0-beta, vilket är mindre än 2.5.0-gamma. Om två moduler har samma ModuleVersion och endast en har en prerelease-sträng antas modulen utan prerelease-strängen vara produktionsklar och sorteras som en senare version än förhandsversionen (som innehåller prerelease-strängen). När du till exempel jämför versionerna 2.5.0 och 2.5.0-beta anses versionen 2.5.0 vara större av de två.

När du publicerar till PowerShell-galleriet måste den version av modulen som publiceras som standard ha en senare version än någon tidigare publicerad version som finns i PowerShell-galleriet.

Hitta och hämta förhandsversionspaket med PowerShellGet-kommandon

Hantering av förhandsversionspaket med hjälp av PowerShellGet Find-Module, Install-Module, Update-Module och Save-Module kommandon kräver att flaggan -AllowPrerelease läggs till. Om -AllowPrerelease anges inkluderas förhandsversionspaket om de finns. Om flaggan -AllowPrerelease inte har angetts visas inte förhandsversionspaket.

De enda undantagen till detta i PowerShellGet-modulkommandona är Get-InstalledModule och vissa fall med Uninstall-Module.

  • Get-InstalledModule visar alltid automatiskt förhandsinformationen i versionssträngen för moduler.
  • Uninstall-Module avinstallerar som standard den senaste versionen av en modul, om ingen version har angetts. Det beteendet har inte ändrats. Men om en förhandsversion anges med hjälp av -RequiredVersion krävs -AllowPrerelease.

Exempel

Anta att PowerShell-galleriet har TestPackage-modulversionerna 1.8.0 och 1.9.0-alpha. Om -AllowPrerelease inte anges returneras endast version 1.8.0.

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...

Om du vill installera en förhandsversion anger du alltid -AllowPrerelease. Det räcker inte att ange en förhandsversionssträng.

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

Föregående kommando misslyckades eftersom -AllowPrerelease inte angavs. Om du lägger till -AllowPrerelease kommer det att lyckas.

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...

Sida vid sida-installation av versioner av en modul som endast skiljer sig på grund av den angivna förhandsversionen stöds inte. När du installerar en modul med PowerShellGet installeras olika versioner av samma modul sida vid sida genom att ett mappnamn skapas med hjälp av ModuleVersion. ModuleVersion, utan förhandsversionssträngen, används för mappnamnet. Om en användare installerar MyModule version 2.5.0-alpha installeras den i mappen MyModule\2.5.0 . Om användaren sedan installerar 2.5.0-beta skriver versionen 2.5.0-beta över innehållet i mappen MyModule\2.5.0. En fördel med den här metoden är att du inte behöver avinstallera förhandsversionen när du har installerat den produktionsklara versionen. Exemplet nedan visar vad du kan förvänta dig:

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 tar bort den senaste versionen av en modul när -RequiredVersion inte har angetts. Om -RequiredVersion har angetts och är en förhandsversion måste -AllowPrerelease läggas till i kommandot .

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...

Mer information