Förhandsversioner av skript

Från och med version 1.6.0 har PowerShellGet och PowerShell-galleriet stöd för taggning av versioner som är större än 1.0.0 som förhandsversion. Innan den här funktionen var förhandsversionspaket begränsade till att ha en version som börjar 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åtkompatibiliteten med PowerShell version 3 och senare, eller befintliga versioner av PowerShellGet. Det här avsnittet fokuserar på skriptspecifika funktioner. Motsvarande funktioner för moduler finns i avsnittet Förhandsversioner av modulversioner. Med hjälp av dessa funktioner kan utgivare identifiera ett skript som version 2.5.0-alpha och senare släppa en produktionsklar version 2.5.0 som ersätter förhandsversionen.

På en hög nivå innehåller förhandsversionsskriptet följande funktioner:

  • Lägga till ett PrereleaseString-suffix i versionssträngen i skriptmanifestet. När skripten publiceras till PowerShell-galleriet extraheras dessa data från manifestet och används för att identifiera förhandsversionspaket.
  • För att kunna hämta förhandsversionspaket måste du lägga till flaggan -AllowPrerelease i PowerShellGet-kommandona Find-Script, Install-Script, Update-Script och Save-Script. Om flaggan inte anges visas inte förhandsversionspaket.
  • Skriptversioner som visas av Find-Script, Get-InstalledScript och i PowerShell-galleriet visas med PrereleaseString, som i 2.5.0-alpha.

Information om funktionerna finns nedan.

Identifiera en skriptversion som förhandsversion

PowerShellGet-stöd för förhandsversioner är enklare för skript än moduler. Versionshantering av skript stöds endast av PowerShellGet, så det finns inga kompatibilitetsproblem som orsakas av att förhandsversionssträngen läggs till. Om du vill identifiera ett skript PowerShell-galleriet en förhandsversion lägger du till ett förhandsversionssuffix i en korrekt formaterad versionssträng i skriptets metadata.

Ett exempelavsnitt i ett skriptmanifest med en förhandsversion skulle se ut så här:

<#PSScriptInfo

.VERSION 3.2.1-alpha12

.GUID

...

#>

Om du vill använda ett förhandsversionssuffix måste versionssträngen uppfylla följande krav:

  • Ett förhandsversionssuffix kan bara anges när version är 3 segment för Major.Minor.Build. Detta överensstämmer med SemVer v1.0.0
  • Förhandsversionens suffix är en sträng som börjar med ett bindestreck och kan innehålla ASCII-alfanumeriska tecken [0-9A-Za-z-]
  • Endast SemVer v1.0.0-förhandsversionssträngar stöds för närvarande, så förhandsversionssuffixet får inte innehålla någon punkt eller + [.+], som tillåts i SemVer 2.0
  • Exempel på prereleaseString-strängar som stöds är: -alpha, -alpha1, -BETA, -update20171020

Förhandsversionsversionshantering 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 skript med hjälp av PowerShellGet-kommandon. Om det finns två skriptversioner med versionsnumret baseras sorteringsordningen på strängdelen efter bindestrecket. Version 2.5.0-alpha är alltså mindre än 2.5.0-beta, vilket är mindre än 2.5.0-km/s. Om två skript har samma versionsnummer och endast ett har en förhandsversionssträng antas skriptet utan förhandsversionens suffix vara den produktionsklara versionen och sorteras som en högre version än förhandsversionen. När du till exempel jämför versionerna 2.5.0 och 2.5.0-beta betraktas 2.5.0-versionen som den större av de två.

När du publicerar PowerShell-galleriet måste som standard versionen av skriptet som publiceras ha en högre version än någon tidigare publicerad version som finns i PowerShell-galleriet. En utgivare kan uppdatera version 2.5.0-alpha med 2.5.0-beta eller med 2.5.0 (utan förhandsversionssuffix).

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

För att hantera förhandsversionspaket med PowerShellGet-kommandona Find-Script, Install-Script, Update-Script och Save-Script måste du lägga till flaggan -AllowPrerelease. Om -AllowPrerelease har angetts inkluderas förhandsversionspaket om de finns. Om flaggan -AllowPrerelease inte har angetts visas inte förhandsversionspaket.

De enda undantagen till detta i PowerShellGet-skriptkommandona är Get-InstalledScript och vissa fall med Uninstall-Script.

  • Get-InstalledScript alltid att automatiskt visa förhandsversionsinformation i versionssträngen om den finns.
  • Uninstall-Script avinstallerar som standard den senaste versionen av ett skript om ingen version har angetts. Det beteendet har inte ändrats. Om en förhandsversion anges med krävs dock -RequiredVersion -AllowPrerelease .

Exempel

# 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 tar bort den aktuella versionen av ett skript 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-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

Mer information