共用方式為


指令碼的發行前版本

從 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

更多詳細數據