Förhandsversioner av skript

Från och med version 1.6.0 ger PowerShellGet och PowerShell-galleriet stöd för taggningsversioner som är större än 1.0.0 som förhandsversioner. 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åtkompatibiliteten med PowerShell version 3 och senare, eller befintliga versioner av PowerShellGet. Det här avsnittet fokuserar på de skriptspecifika funktionerna. Motsvarande funktioner för moduler finns i avsnittet Förhandsversioner av modulen . Med hjälp av dessa funktioner kan utgivare identifiera ett skript som version 2.5.0-alfa och senare släppa en produktionsklar version 2.5.0 som ersätter förhandsversionen.

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

  • Lägga till suffixet PrereleaseString 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 hämta förhandsversionspaket krävs att flaggan -AllowPrerelease läggs till 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 en förhandsversion

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

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 versionen är 3 segment för Major.Minor.Build. Detta överensstämmer med SemVer v1.0.0
  • Prerelease-suffixet är en sträng som börjar med ett bindestreck och kan innehålla ASCII-alfanumeriska [0-9A-Za-z-]
  • Endast SemVer v1.0.0 förhandsversionssträngar stöds just nu, så prerelease-suffixet får inte innehålla antingen period eller + [.+], som tillåts i SemVer 2.0
  • Exempel på prereleaseString-strängar som stöds är: -alpha, -alpha1, -BETA, -update20171020

Versionspåverkan i förväg på sorteringsordning och installationsmappar

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 PowerShellGet-kommandon. Om det finns två skriptversioner med versionsnumret baseras sorteringsordningen på strängdelen efter bindestrecket. Så version 2.5.0-alfa är mindre än 2.5.0-beta, vilket är mindre än 2.5.0-gamma. Om två skript har samma versionsnummer och endast ett har en PrereleaseString antas skriptet utan förhandssuffixet 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 anses 2.5.0-versionen vara större av de två.

När du publicerar till 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örhandssuffix).

Söka efter och hämta förhandsversionspaket med PowerShellGet-kommandon

För att hantera förhandsversionspaket med Hjälp av PowerShellGet-kommandona Find-Script, Install-Script, Update-Script och Save-Script måste du lägga till flaggan -AllowPrerelease. 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-skriptkommandona är Get-InstalledScript och vissa fall med Uninstall-Script.

  • Get-InstalledScript visar alltid automatiskt förhandsversionsinformationen 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. Men om en förhandsversion anges med , -RequiredVersion-AllowPrerelease kommer att krävas.

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