从版本 1.6.0 开始,PowerShellGet 和 PowerShell 库支持将大于 1.0.0 的版本标记为预发行版。 在此功能之前,预发布包仅限于版本以 0 开头。 这些功能的目标是为 SemVer v1.0.0 版本控制约定提供更大的支持,而不会破坏与 PowerShell 版本 3 及更高版本或现有版本的 PowerShellGet 的向后兼容性。 本主题重点介绍特定于模块的功能。 脚本的等效功能位于 脚本的预发行版本 主题中。 使用这些功能,发布者可以将模块或脚本标识为 2.5.0-alpha 版本,并在以后发布取代预发行版本的生产就绪版本 2.5.0。
概括而言,预发布模块功能包括:
- 将预发行字符串添加到模块清单的 PSData 部分会将模块标识为预发行版本。 将模块发布到 PowerShell 库时,将从清单中提取此数据,并用于标识预发布包。
- 获取预发布包需要向
-AllowPrereleasePowerShellGet 命令Find-Module、Install-Module、Update-Module和Save-Module添加标志。 如果未指定该标志,则不会显示预发行包。 - PowerShell 库中由 、
Get-InstalledModule和 显示的模块版本Find-Module将显示为单个字符串,并附加了预发行字符串,如 2.5.0-alpha 所示。
功能详细信息如下。
这些更改不会影响 PowerShell 中内置的模块版本支持,并且与 PowerShell 3.0、4.0 和 5 兼容。
将模块版本标识为预发行版
PowerShellGet 对预发行版本的支持需要在模块清单中使用两个字段:
- 如果使用预发行版本,则模块清单中包含的 ModuleVersion 必须是 3 部分版本,并且必须符合现有的 PowerShell 版本控制。 版本格式为 A.B.C,其中 A、B 和 C 都是整数。
- 预发行字符串在模块清单的 PrivateData 的 PSData 部分中指定。
有关售前赛字符串的详细要求如下。
将模块定义为预发行版的模块清单的示例部分如下所示:
@{
ModuleVersion = '2.5.0'
#---
PrivateData = @{
PSData = @{
Prerelease = 'alpha'
}
}
}
预发行字符串的详细要求是:
- 仅当 ModuleVersion 为 Major.Minor.Build 的 3 个段时,才能指定预发行字符串。 这与 SemVer v1.0.0 一致。
- 连字符是内部版本号和发行前版本字符串之间的分隔符。 连字符只能作为第一个字符包含在售前赛字符串中。
- 预发行字符串只能包含 ASCII 字母数字 [0-9A-Za-z-]。 最佳做法是以字母字符开头预发行字符串,因为在扫描软件包列表时更容易识别这是预发行版本。
- 目前仅支持 SemVer v1.0.0 预发行字符串。 预发行字符串 不得 包含句点或 + [.+],这是 SemVer 2.0 中允许的。
- 支持的预发行字符串示例包括:-alpha、-alpha1、-BETA -update20171020
预发行版本控制对排序顺序和安装文件夹的影响
使用预发布版本时的排序顺序更改,这在发布到 PowerShell 库以及使用 PowerShellGet 命令安装模块时非常重要。 如果为两个模块指定了发行前版本字符串,则排序顺序基于连字符后面的字符串部分。 因此,版本 2.5.0-alpha 小于 2.5.0-beta,即小于 2.5.0-gamma。 如果两个模块具有相同的 ModuleVersion,并且只有一个模块具有预发行字符串,则不带预发行字符串的模块将被视为生产就绪版本,并将排序为比预发行版本(包括预发行字符串)更大的版本。 例如,在比较版本 2.5.0 和 2.5.0-beta 时,2.5.0 版本将被视为两者中较大的一个。
发布到 PowerShell 库时,默认情况下,要发布的模块版本必须比 PowerShell 库中任何以前发布的版本更高。
使用 PowerShellGet 命令查找和获取预发布包
使用 PowerShellGet Find-Module、Install-Module、Update-Module 和 Save-Module 命令处理预发布包需要添加 -AllowPrerelease 标志。 如果指定了 -AllowPrerelease,则将包含预发行包(如果存在)。 如果未指定 -AllowPrerelease 标志,则不会显示预发布包。
PowerShellGet 模块命令中唯一的例外是 Get-InstalledModule,以及 Uninstall-Module 的某些情况。
- Get-InstalledModule 始终会自动在模块的版本字符串中显示预发布信息。
- 如果 未指定版本 ,Uninstall-Module 默认情况下将卸载模块的最新版本。 这种行为没有改变。 但是,如果使用 -RequiredVersion 指定预发行版本,则需要 -AllowPrerelease。
例子
假设 PowerShell 库具有 TestPackage 模块版本 1.8.0 和 1.9.0-alpha。 如果未指定,则 -AllowPrerelease 仅返回版本 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...
要安装预发行版,请始终指定 -AllowPrerelease。 指定预发行版本字符串是不够的。
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
上一个命令失败,因为未指定 -AllowPrerelease。 添加将 -AllowPrerelease 导致成功。
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...
不支持并行安装仅因指定的预发行版本而不同的模块版本。 使用 PowerShellGet 安装模块时,通过使用 ModuleVersion 创建文件夹名称,并排安装同一模块的不同版本。 ModuleVersion(不带预发行字符串)用于文件夹名称。 如果用户安装了 MyModule 版本 2.5.0-alpha,它将安装到该 MyModule\2.5.0 文件夹中。 如果用户随后安装 2.5.0-beta,则 2.5.0-beta 版本将 覆盖 文件夹 MyModule\2.5.0的内容。 这种方法的一个优点是,在安装生产就绪版本后无需卸载预发布版本。 以下示例显示了预期结果:
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 将删除模块的最新版本 -RequiredVersion。 如果指定了 -RequiredVersion,并且是预发行版,则必须将 -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...