Wersje wstępne skryptów

Począwszy od wersji 1.6.0, Moduł PowerShellGet i Galeria programu PowerShell zapewniają obsługę tagowania wersji większych niż 1.0.0 jako wersja wstępna. Przed tą funkcją pakiety wersji wstępnej były ograniczone do wersji rozpoczynającej się od 0. Celem tych funkcji jest zapewnienie większej obsługi konwencji wersji SemVer w wersji 1.0.0 bez przerywania zgodności z poprzednimi wersjami programu PowerShell w wersji 3 lub nowszej lub istniejących wersji modułu PowerShellGet. Ten temat koncentruje się na funkcjach specyficznych dla skryptu. Równoważne funkcje modułów znajdują się w temacie Wersje modułów w wersji wstępnej . Korzystając z tych funkcji, wydawcy mogą zidentyfikować skrypt jako wersję 2.5.0-alfa, a później wydać wersję gotową do produkcji w wersji 2.5.0, która zastępuje wersję wstępną.

Na wysokim poziomie funkcje skryptu wersji wstępnej obejmują:

  • Dodanie sufiksu PrereleaseString do ciągu wersji w manifeście skryptu. Po opublikowaniu skryptów w Galeria programu PowerShell te dane są wyodrębniane z manifestu i używane do identyfikowania pakietów wstępnych.
  • Uzyskiwanie pakietów wstępnych wymaga dodania flagi -AllowPrerelease do poleceń Find-Script, Install-Script, Update-Script i Save-Script. Jeśli flaga nie zostanie określona, pakiety wersji wstępnej nie zostaną wyświetlone.
  • Wersje skryptów wyświetlane przez polecenie Find-Script, Get-InstalledScript i w Galeria programu PowerShell będą wyświetlane przy użyciu narzędzia PrereleaseString, tak jak w wersji 2.5.0-alpha.

Szczegółowe informacje o funkcjach znajdują się poniżej.

Identyfikowanie wersji skryptu jako wersji wstępnej

Obsługa modułów PowerShellGet dla wersji wstępnych jest łatwiejsza dla skryptów niż moduły. Przechowywanie wersji skryptów jest obsługiwane tylko przez moduł PowerShellGet, dlatego nie występują problemy ze zgodnością spowodowane dodaniem ciągu wersji wstępnej. Aby zidentyfikować skrypt w Galeria programu PowerShell jako wersję wstępną, dodaj sufiks wersji wstępnej do prawidłowo sformatowanego ciągu wersji w metadanych skryptu.

Przykładowa sekcja manifestu skryptu z wersją wstępną wygląda następująco:

<#PSScriptInfo

.VERSION 3.2.1-alpha12

.GUID

...

#>

Aby użyć sufiksu wersji wstępnej, ciąg wersji musi spełniać następujące wymagania:

  • Sufiks wersji wstępnej może być określony tylko wtedy, gdy wersja to 3 segmenty dla wersji Major.Minor.Build. Jest to zgodne z programem SemVer w wersji 1.0.0
  • Sufiks wersji wstępnej jest ciągiem rozpoczynającym się od łącznika i może zawierać alfanumeryczne ASCII [0-9A-Za-z-]
  • Obecnie obsługiwane są tylko ciągi wersji wstępnej SemVer w wersji 1.0.0, więc sufiks wersji wstępnej nie może zawierać okresu lub + [.+], które są dozwolone w programie SemVer 2.0
  • Przykłady obsługiwanych ciągów prereleaseString to: -alpha, -alpha1, -BETA, -update20171020

Wpływ na wersje wstępne dotyczące kolejności sortowania i folderów instalacyjnych

Sortowanie zmian kolejności podczas korzystania z wersji wstępnej, co jest ważne podczas publikowania w Galeria programu PowerShell i podczas instalowania skryptów przy użyciu poleceń PowerShellGet. Jeśli istnieją dwie wersje skryptów z numerem wersji, kolejność sortowania jest oparta na części ciągu po łączniku. Dlatego wersja 2.5.0-alfa jest mniejsza niż 2.5.0-beta, która jest mniejsza niż 2.5.0-gamma. Jeśli dwa skrypty mają ten sam numer wersji, a tylko jeden ma prereleaseString, skrypt bez sufiksu wersji wstępnej jest zakładany jako wersja gotowa do produkcji i zostanie posortowany jako większa wersja niż wersja wstępna. Na przykład podczas porównywania wersji 2.5.0 i 2.5.0-beta wersja 2.5.0 zostanie uznana za większą z tych dwóch wersji.

Podczas publikowania w Galeria programu PowerShell domyślnie wersja opublikowanego skryptu musi mieć wyższą wersję niż jakakolwiek wcześniej opublikowana wersja, która znajduje się w Galeria programu PowerShell. Wydawca może zaktualizować wersję 2.5.0-alfa z wersją 2.5.0-beta lub 2.5.0 (bez sufiksu wersji wstępnej).

Znajdowanie i uzyskiwanie pakietów wstępnych przy użyciu poleceń PowerShellGet

Obsługa pakietów wstępnych przy użyciu poleceń Programu PowerShellGet Find-Script, Install-Script, Update-Script i Save-Script wymaga dodania flagi -AllowPrerelease. Jeśli określono parametr -AllowPrerelease, pakiety wersji wstępnej będą uwzględniane, jeśli są obecne. Jeśli flaga -AllowPrerelease nie zostanie określona, pakiety wersji wstępnej nie zostaną wyświetlone.

Jedynymi wyjątkami od tego w poleceniach skryptu PowerShellGet są Get-InstalledScript, a niektóre przypadki z poleceniem Uninstall-Script.

  • Get-InstalledScript zawsze będzie automatycznie wyświetlać informacje o wersji wstępnej w ciągu wersji, jeśli jest obecny.
  • Uninstall-Script domyślnie odinstaluje najnowszą wersję skryptu, jeśli nie określono żadnej wersji . To zachowanie nie uległo zmianie. Jeśli jednak wersja wstępna zostanie określona przy użyciu polecenia -RequiredVersion, -AllowPrerelease będzie wymagana.

Przykłady

# 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 usunie bieżącą wersję skryptu, gdy parametr -RequiredVersion nie zostanie podany. Jeśli parametr -RequiredVersion jest określony i jest w wersji wstępnej, do polecenia należy dodać polecenie AllowPrerelease.

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

Więcej szczegółów