从版本 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 库时,将从清单中提取此数据,并用于标识预发布包。
- 获取预发布包需要向 PowerShellGet 命令 Find-Script、Install-Script、Update-Script 和 Save-Script 添加 -AllowPrerelease 标志。 如果未指定该标志,则不会显示预发行包。
- Find-Script、Get-InstalledScript 和 PowerShell 库中显示的脚本版本将与 PrereleaseString 一起显示,如 2.5.0-alpha 所示。
功能详细信息如下。
将脚本版本标识为预发行版
PowerShell对于脚本来说,获取对预发行版本的支持比模块更容易。 脚本版本控制仅受 PowerShellGet 支持,因此添加预发行字符串不会导致兼容性问题。 若要将 PowerShell 库中的脚本标识为预发行版,请将预发行后缀添加到脚本元数据中格式正确的版本字符串。
具有预发行版本的脚本清单的示例部分如下所示:
<#PSScriptInfo
.VERSION 3.2.1-alpha12
.GUID
...
#>
若要使用预发行后缀,版本字符串必须满足以下要求:
- 仅当 Major.Minor.Build 的 Version 为 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-beta 或 2.5.0(没有预发行后缀)更新版本 2.5.0-alpha。
使用 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