Wersje modułów w wersji wstępnej
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 obsługi 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 modułu. Równoważne funkcje skryptów znajdują się w temacie Wersje wstępne skryptów . Korzystając z tych funkcji, wydawcy mogą zidentyfikować moduł lub skrypt w wersji 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 modułu w wersji wstępnej obejmują:
- Dodanie ciągu wersji wstępnej do sekcji PSData manifestu modułu identyfikuje moduł jako wersję wstępną. Po opublikowaniu modułu 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
-AllowPrerelease
flagi do poleceńFind-Module
PowerShellGet ,Install-Module
,Update-Module
iSave-Module
. Jeśli flaga nie zostanie określona, pakiety wersji wstępnej nie zostaną wyświetlone. - Wersje modułów wyświetlane przez
Find-Module
,Get-InstalledModule
i w Galeria programu PowerShell będą wyświetlane jako pojedynczy ciąg z dołączonym ciągiem wersji wstępnej, jak w wersji 2.5.0-alpha.
Szczegółowe informacje o funkcjach znajdują się poniżej.
Te zmiany nie wpływają na obsługę wersji modułu wbudowaną w program PowerShell i są zgodne z programem PowerShell 3.0, 4.0 i 5.
Identyfikowanie wersji modułu jako wersji wstępnej
Obsługa modułu PowerShellGet dla wersji wstępnych wymaga użycia dwóch pól w manifeście modułu:
- Wersja ModuleVersion zawarta w manifeście modułu musi być wersją 3-częściową, jeśli jest używana wersja wstępna i musi być zgodna z istniejącymi wersjami programu PowerShell. Format wersji to A.B.C, gdzie A, B i C są liczbą całkowitą.
- Ciąg wersji wstępnej jest określony w manifeście modułu w sekcji PSData privateData.
Poniżej przedstawiono szczegółowe wymagania dotyczące ciągu wersji wstępnej.
Przykładowa sekcja manifestu modułu definiującego moduł jako wersję wstępną wygląda następująco:
@{
ModuleVersion = '2.5.0'
#---
PrivateData = @{
PSData = @{
Prerelease = 'alpha'
}
}
}
Szczegółowe wymagania dotyczące ciągu wersji wstępnej to:
- Ciąg wersji wstępnej może być określony tylko wtedy, gdy parametr ModuleVersion to 3 segmenty dla wersji Major.Minor.Build. Jest to zgodne z programem SemVer w wersji 1.0.0.
- Łącznik jest ogranicznikiem między numerem kompilacji a ciągiem wersji wstępnej. Łącznik może być uwzględniony w ciągu wersji wstępnej tylko jako pierwszy znak.
- Ciąg wersji wstępnej może zawierać tylko alfanumeryczne ASCII [0-9A-Za-z-]. Najlepszym rozwiązaniem jest rozpoczęcie ciągu wersji wstępnej z znakiem alfa, ponieważ łatwiej będzie zidentyfikować, że jest to wersja wstępna podczas skanowania listy pakietów.
- Obecnie obsługiwane są tylko ciągi wstępne SemVer w wersji 1.0.0. Ciąg wersji wstępnej nie może zawierać kropki lub + [.+], które są dozwolone w programie SemVer 2.0.
- Przykłady obsługiwanych ciągów wersji wstępnej 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 modułów przy użyciu poleceń PowerShellGet. Jeśli ciąg wersji wstępnej jest określony dla dwóch modułów, 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 moduły mają ten sam moduł ModuleVersion, a tylko jeden ma ciąg wersji wstępnej, moduł bez ciągu wersji wstępnej jest zakładany jako wersja gotowa do produkcji i zostanie posortowany jako większa wersja niż wersja wstępna (która zawiera ciąg wersji wstępnej). 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 modułu musi mieć wyższą wersję niż jakakolwiek wcześniej opublikowana wersja, która znajduje się w Galeria programu PowerShell.
Znajdowanie i uzyskiwanie pakietów wstępnych przy użyciu poleceń PowerShellGet
Obsługa pakietów wstępnych przy użyciu polecenia PowerShellGet Find-Module, Install-Module, Update-Module i Save-Module 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 modułu PowerShellGet są Get-InstalledModule, a niektóre przypadki z uninstall-module.
- Get-InstalledModule zawsze będzie automatycznie wyświetlać informacje o wersji wstępnej w ciągu wersji dla modułów.
- Uninstall-Module domyślnie odinstaluje najnowszą wersję modułu, jeśli nie określono żadnej wersji . To zachowanie nie uległo zmianie. Jeśli jednak zostanie określona wersja wstępna przy użyciu parametru -RequiredVersion, wymagana będzie wersja AllowPrerelease.
Przykłady
Załóżmy, że Galeria programu PowerShell ma moduł TestPackage w wersji 1.8.0 i 1.9.0-alpha. Jeśli -AllowPrerelease
nie zostanie określony, zostanie zwrócona tylko wersja 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...
Aby zainstalować wersję wstępną, zawsze określ wartość -AllowPrerelease. Określanie ciągu wersji wstępnej nie jest wystarczające.
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
Poprzednie polecenie nie powiodło się, ponieważ nie określono parametru -AllowPrerelease. Dodanie -AllowPrerelease
spowoduje powodzenie.
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...
Równoległa instalacja wersji modułu, która różni się tylko ze względu na określoną wersję wstępną, nie jest obsługiwana. Podczas instalowania modułu przy użyciu modułu PowerShellGet różne wersje tego samego modułu są instalowane obok siebie, tworząc nazwę folderu przy użyciu modułu ModuleVersion. Element ModuleVersion, bez ciągu wersji wstępnej, jest używany jako nazwa folderu. Jeśli użytkownik zainstaluje moduł MyModule w wersji 2.5.0-alfa, zostanie zainstalowany w folderze MyModule\2.5.0
. Jeśli użytkownik zainstaluje wersję 2.5.0-beta, wersja 2.5.0-beta zastąpi zawartość folderu MyModule\2.5.0
. Jedną z zalet tego podejścia jest to, że nie trzeba instalować wersji wstępnej po zainstalowaniu wersji gotowej do produkcji. W poniższym przykładzie pokazano, czego można oczekiwać:
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 usunie najnowszą wersję modułu, gdy nie podano parametru -RequiredVersion. Jeśli parametr -RequiredVersion jest określony i jest w wersji wstępnej, do polecenia należy dodać polecenie 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.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...
Więcej szczegółów
PowerShell Gallery