Versi prarilis skrip

Dimulai dengan versi 1.6.0, PowerShellGet dan Galeri PowerShell menyediakan dukungan untuk menandai versi yang lebih besar dari 1.0.0 sebagai prarilis. Sebelum fitur ini, paket prarilis dibatasi untuk memiliki versi yang dimulai dengan 0. Tujuan dari fitur-fitur ini adalah untuk memberikan dukungan yang lebih besar untuk konvensi penerapan versi SemVer v1.0.0 tanpa merusak kompatibilitas mundur dengan PowerShell versi 3 dan yang lebih baru, atau versi PowerShellGet yang ada. Topik ini berfokus pada fitur khusus skrip. Fitur yang setara untuk modul ada di topik Versi Modul Prarilis . Dengan menggunakan fitur ini, penerbit dapat mengidentifikasi skrip sebagai versi 2.5.0-alpha, dan kemudian merilis versi siap produksi 2.5.0 yang menggantikan versi prarilis.

Pada tingkat tinggi, fitur skrip prarilis meliputi:

  • Menambahkan akhiran PrereleaseString ke string versi dalam manifes skrip. Saat skrip diterbitkan ke Galeri PowerShell, data ini diekstrak dari manifes, dan digunakan untuk mengidentifikasi paket prarilis.
  • Memperoleh paket prarilis memerlukan penambahan bendera -AllowPrerelease ke perintah PowerShellGet Find-Script, Install-Script, Update-Script, dan Save-Script. Jika bendera tidak ditentukan, paket prarilis tidak akan ditampilkan.
  • Versi skrip yang ditampilkan oleh Find-Script, Get-InstalledScript, dan di Galeri PowerShell akan ditampilkan dengan PrereleaseString, seperti dalam 2.5.0-alpha.

Detail untuk fitur disertakan di bawah ini.

Mengidentifikasi versi skrip sebagai prarilis

Dukungan PowerShellGet untuk versi prarilis lebih mudah untuk skrip daripada modul. Penerapan versi skrip hanya didukung oleh PowerShellGet, jadi tidak ada masalah kompatibilitas yang disebabkan oleh penambahan string prarilis. Untuk mengidentifikasi skrip di Galeri PowerShell sebagai prarilis, tambahkan akhiran prarilis ke string versi yang diformat dengan benar dalam metadata skrip.

Contoh bagian manifes skrip dengan versi prarilis akan terlihat seperti berikut:

<#PSScriptInfo

.VERSION 3.2.1-alpha12

.GUID

...

#>

Untuk menggunakan akhiran prarilis, string versi harus memenuhi persyaratan berikut:

  • Akhiran prarilis hanya dapat ditentukan jika Versi adalah 3 segmen untuk Major.Minor.Build. Ini sejalan dengan SemVer v1.0.0
  • Akhiran prarilis adalah string yang dimulai dengan tanda hubung, dan mungkin berisi alfanumerik ASCII [0-9A-Za-z-]
  • Hanya string prarilis SemVer v1.0.0 yang didukung saat ini, sehingga akhiran prarilis tidak boleh berisi titik atau + [.+], yang diizinkan di SemVer 2.0
  • Contoh string PrereleaseString yang didukung adalah: -alpha, -alpha1, -BETA, -update20171020

Dampak penerapan versi prarilis pada urutan pengurutan dan folder penginstalan

Urutan berubah saat menggunakan versi prarilis, yang penting saat menerbitkan ke Galeri PowerShell, dan saat menginstal skrip menggunakan perintah PowerShellGet. Jika ada dua versi skrip dengan nomor versi, urutan pengurutan didasarkan pada bagian string setelah tanda hubung. Jadi, versi 2.5.0-alpha kurang dari 2.5.0-beta, yang kurang dari 2.5.0-gamma. Jika dua skrip memiliki nomor versi yang sama, dan hanya satu yang memiliki PrereleaseString, skrip tanpa akhiran prarilis diasumsikan sebagai versi siap produksi dan akan diurutkan sebagai versi yang lebih besar daripada versi prarilis. Sebagai contoh, saat membandingkan rilis 2.5.0 dan 2.5.0-beta, versi 2.5.0 akan dianggap lebih besar dari keduanya.

Saat menerbitkan ke Galeri PowerShell, secara default versi skrip yang diterbitkan harus memiliki versi yang lebih besar daripada versi yang diterbitkan sebelumnya yang ada di Galeri PowerShell. Penerbit dapat memperbarui versi 2.5.0-alpha dengan 2.5.0-beta, atau dengan 2.5.0 (tanpa akhiran prarilis).

Menemukan dan memperoleh paket prarilis menggunakan perintah PowerShellGet

Berurusan dengan paket prarilis menggunakan perintah PowerShellGet Find-Script, Install-Script, Update-Script, dan Save-Script memerlukan penambahan bendera -AllowPrerelease. Jika -AllowPrerelease ditentukan, paket prarilis akan disertakan jika ada. Jika bendera -AllowPrerelease tidak ditentukan, paket prarilis tidak akan ditampilkan.

Satu-satunya pengecualian untuk ini dalam perintah skrip PowerShellGet adalah Get-InstalledScript, dan beberapa kasus dengan Uninstall-Script.

  • Get-InstalledScript akan selalu secara otomatis menampilkan informasi prarilis dalam string versi jika ada.
  • Uninstall-Script secara default akan menghapus versi terbaru dari skrip, jika tidak ada versi yang ditentukan. Perilaku itu tidak berubah. Namun, jika versi prarilis ditentukan menggunakan -RequiredVersion, -AllowPrerelease akan diperlukan.

Examples

# 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 akan menghapus versi skrip saat ini saat -RequiredVersion tidak disediakan. Jika -RequiredVersion ditentukan, dan merupakan prarilis, -AllowPrerelease harus ditambahkan ke perintah.

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

Detail lebih lanjut