Prerelease-versies van scripts

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 voorlopige versies van pakketten 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 scriptspecifieke functies. De equivalente functies voor modules vindt u in het onderwerp Prerelease-moduleversies . Met deze functies kunnen uitgevers een 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 prerelease-scriptfuncties onder andere:

  • Het achtervoegsel PrereleaseString toevoegen aan de versietekenreeks in het scriptmanifest. Wanneer de scripts worden gepubliceerd naar de PowerShell Gallery, worden deze gegevens uit het manifest geëxtraheerd en gebruikt om prereleasepakketten te identificeren.
  • Voor het verkrijgen van voorlopige pakketten moet de vlag -AllowPrerelease worden toegevoegd aan de PowerShellGet-opdrachten Find-Script, Install-Script, Update-Script en Save-Script. Als de vlag niet is opgegeven, worden prereleasepakketten niet weergegeven.
  • Scriptversies die worden weergegeven door Find-Script, Get-InstalledScript en in de PowerShell Gallery worden weergegeven met prereleaseString, zoals in 2.5.0-alpha.

Details voor de functies vindt u hieronder.

Een scriptversie identificeren als een voorlopige versie

PowerShellGet-ondersteuning voor voorlopige versies is eenvoudiger voor scripts dan voor modules. Versiebeheer van scripts wordt alleen ondersteund door PowerShellGet, dus er zijn geen compatibiliteitsproblemen die worden veroorzaakt door het toevoegen van de prerelease-tekenreeks. Als u een script in de PowerShell Gallery als een voorlopige versie wilt identificeren, voegt u een prerelease-achtervoegsel toe aan een correct opgemaakte versietekenreeks in de metagegevens van het script.

Een voorbeeldsectie van een scriptmanifest met een voorlopige versie ziet er als volgt uit:

<#PSScriptInfo

.VERSION 3.2.1-alpha12

.GUID

...

#>

Als u een prerelease-achtervoegsel wilt gebruiken, moet de versietekenreeks voldoen aan de volgende vereisten:

  • Een prerelease-achtervoegsel kan alleen worden opgegeven wanneer de versie 3 segmenten is voor Major.Minor.Build. Dit wordt uitgelijnd met SemVer v1.0.0
  • Het voorlopige achtervoegsel is een tekenreeks die begint met een afbreekstreepje en mogelijk ASCII-alfanumeriek [0-9A-Za-z-] bevat
  • Alleen semver v1.0.0 prerelease-tekenreeksen worden op dit moment ondersteund, dus het achtervoegsel voor prerelease mag geen punt of + [.+] bevatten, die zijn toegestaan in SemVer 2.0
  • Voorbeelden van ondersteunde PrereleaseString-tekenreeksen 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 scripts met behulp van PowerShellGet-opdrachten. Als er twee scriptsversies met het versienummer bestaan, 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 scripts hetzelfde versienummer hebben en slechts één een PrereleaseString heeft, wordt ervan uitgegaan dat het script zonder het prerelease-achtervoegsel de versie is die gereed is voor productie en wordt deze gesorteerd als een hogere versie dan de voorlopige versie. 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.

Bij het publiceren naar de PowerShell Gallery moet de versie van het script dat wordt gepubliceerd, standaard een hogere versie hebben dan alle eerder gepubliceerde versies in de PowerShell Gallery. Een uitgever kan versie 2.5.0-alpha bijwerken met 2.5.0-beta, of met 2.5.0 (zonder achtervoegsel vooraf).

Voorlopige pakketten zoeken en verkrijgen met behulp van PowerShellGet-opdrachten

Voor het verwerken van prereleasepakketten met behulp van PowerShellGet Find-Script, Install-Script, Update-Script en Save-Script 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-scriptopdrachten zijn Get-InstalledScript en in sommige gevallen met Uninstall-Script.

  • Get-InstalledScript geeft altijd automatisch de voorlopige versiegegevens weer in de versietekenreeks als deze aanwezig is.
  • Uninstall-Script verwijdert standaard de meest recente versie van een script als er geen versie is opgegeven. Dat gedrag is niet veranderd. Als echter een voorlopige versie is opgegeven met behulp van -RequiredVersion, -AllowPrerelease is vereist.

Voorbeelden

# Assume the PowerShell Gallery has TestPackage versions 1.8.0 and 1.9.0-alpha.
# If -AllowPrerelease is not specified, only version 1.8.0 will be returned.
C:\windows\system32> Find-Script TestPackage

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

C:\windows\system32> Find-Script TestPackage -AllowPrerelease

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

# To install a prerelease, you must specify -AllowPrerelease. Specifying a prerelease version string is not sufficient.

C:\windows\system32> Install-Script TestPackage -RequiredVersion 1.9.0-alpha

PackageManagement\Find-Package : No match was found for the specified search criteria and script name 'TestPackage'.
Try Get-PSRepository to see all available registered script 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

# The previous command failed because -AllowPrerelease was not specified.
# Adding -AllowPrerelease will result in success.

C:\windows\system32> Install-Script TestPackage -RequiredVersion 1.9.0-alpha -AllowPrerelease
C:\windows\system32> Get-InstalledScript TestPackage

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

# Note that Get-InstalledScript shows the prerelease version.
# If -RequiredVersion is not specified, all installed scripts will be displayed by Get-InstalledScript

Uninstall-Script verwijdert de huidige versie van een script wanneer -RequiredVersion niet is opgegeven. Als -RequiredVersion is opgegeven en een prerelease is, moet -AllowPrerelease worden toegevoegd aan de opdracht.

C:\windows\system32> Get-InstalledScript TestPackage

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

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


C:\windows\system32> Uninstall-Script TestPackage -RequiredVersion 1.9.0-alpha -AllowPrerelease
# Since script versions are not installed side-by-side, the above could be simply "Uninstall-Script TestPackage"

C:\windows\system32> Get-Installedscript TestPackage
PackageManagement\Get-Package : No match was found for the specified search criteria and script names 'testpackage'.
At C:\Program Files\WindowsPowerShell\Modules\PowerShellGet\1.5.0.0\PSModule.psm1:4088 char:9
+         PackageManagement\Get-Package @PSBoundParameters | Microsoft. ...
+         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : ObjectNotFound: (Microsoft.Power...lets.GetPackage:GetPackage) [Get-Package], Exception
    + FullyQualifiedErrorId : NoMatchFound,Microsoft.PowerShell.PackageManagement.Cmdlets.GetPackage

Meer informatie