從 1.6.0 版開始,PowerShellGet 和 PowerShell 資源庫支援將大於 1.0.0 的版本標記為發行前版本。 在此功能之前,發行前版本套件僅限於以 0 開頭的版本。 這些功能的目標是為 SemVer v1.0.0 版本設定慣例提供更大的支援,而不會中斷與 PowerShell 3 版和更新版本或現有版本 PowerShellGet 的回溯相容性。 本主題著重於指令碼特定功能。 模組的對等功能位於發行 前版本模組版本 主題中。 使用這些功能,發行者可以將指令碼識別為 2.5.0-alpha 版,並在稍後發行取代發行前版本的生產就緒 2.5.0 版。
概括而言,發行前版本指令碼功能包括:
- 將 PrereleaseString 尾碼新增至指令碼資訊清單中的版本字串。 將腳本發佈至 PowerShell 資源庫時,會從資訊清單擷取此資料,並用來識別發行前版本套件。
- 取得發行前版本套件需要將 -AllowPrerelease 旗標新增至 PowerShellGet 命令 Find-Script、Install-Script、Update-Script 和 Save-Script。 如果未指定旗標,則不會顯示發行前版本套件。
- Find-Script、Get-InstalledScript 和 PowerShell 資源庫中顯示的腳本版本將與 PrereleaseString 一起顯示,如 2.5.0-alpha 所示。
功能詳細資料如下。
將指令碼版本識別為發行前版本
PowerShell取得發行前版本的支援對於腳本來說比模組更容易。 腳本版本控制僅受 PowerShellGet 支援,因此新增發行前版本字串不會造成相容性問題。 若要將 PowerShell 資源庫中的腳本識別為發行前版本,請將發行前版本尾碼新增至腳本中繼資料中格式正確的版本字串。
具有發行前版本的指令碼資訊清單範例區段如下所示:
<#PSScriptInfo
.VERSION 3.2.1-alpha12
.GUID
...
#>
若要使用發行前版本尾碼,版本字串必須符合下列需求:
- 只有在 Major.Minor.Build 的 [版本] 為 3 個區段時,才能指定發行前版本尾碼。 這與 SemVer v1.0.0 一致
- 發行前版本尾碼是以連字號開頭的字串,且可能包含 ASCII 英數字元 [0-9A-Za-z-]
- 目前僅支援 SemVer v1.0.0 發行前字串,因此發行前版本尾碼 不得 包含 SemVer 2.0 中允許的句點或 + [.+]
- 支援的 PrereleaseString 字串範例包括:-alpha、-alpha1、-BETA -update20171020
發行前版本設定對排序順序和安裝資料夾的影響
使用發行前版本時,排序順序會變更,這在發佈至 PowerShell 資源庫時,以及使用 PowerShellGet 命令安裝指令碼時很重要。 如果存在兩個具有版本號碼的指令碼版本,則排序順序會以連字號後面的字串部分為基礎。 因此,2.5.0-alpha 版本小於 2.5.0-beta,即小於 2.5.0-gamma。 如果兩個腳本具有相同的版本號碼,且只有一個腳本具有 PrereleaseString,則沒有發行前版本尾碼 的 腳本會被視為生產就緒版本,並將排序為比發行前版本更大的版本。 例如,在比較 2.5.0 版和 2.5.0-beta 版時,2.5.0 版本將被視為兩者中較大的一個。
發佈至 PowerShell 資源庫時,根據預設,所發佈的腳本版本必須比 PowerShell 資源庫中任何先前發佈的版本更大。 發行者可以將 2.5.0-alpha 版更新為 2.5.0-beta 或 2.5.0 (沒有發行前版本後綴)。
使用 PowerShellGet 命令尋找和取得發行前版本套件
使用 PowerShellGet Find-Script、Install-Script、Update-Script 和 Save-Script 命令處理發行前版本套件需要新增 -AllowPrerelease 旗標。 如果指定 -AllowPrerelease,則會包含發行前版本套件(如果存在)。 如果未指定 -AllowPrerelease 旗標,則不會顯示發行前版本套件。
PowerShellGet 腳本命令中唯一的例外狀況是 Get-InstalledScript,以及某些使用 Uninstall-Script 的情況。
- Get-InstalledScript 一律會自動在版本字串中顯示發行前版本資訊(如果存在)。
- 如果 未指定版本 ,Uninstall-Script 預設會解除安裝指令碼的最新版本。 這種行為沒有改變。 不過,如果使用
-RequiredVersion指定發行前版本,則需要 。-AllowPrerelease
範例
# 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 會在未提供指令碼時移除目前版本的指令碼 -RequiredVersion。 如果指定 -RequiredVersion 且是前發行版本,則必須將 -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