Partilhar via


Pré-lançamento de versões de scripts

A partir da versão 1.6.0, o PowerShellGet e o Galeria do PowerShell fornecem suporte para versões de identificação superiores a 1.0.0 como pré-lançamento. Antes desta funcionalidade, os pacotes de pré-lançamento limitavam-se a ter uma versão a partir de 0. O objetivo destas funcionalidades é fornecer um maior suporte para a convenção de controlo de versões do SemVer v1.0.0 sem interromper a retrocompatibilidade com as versões 3 e posteriores do PowerShell ou versões existentes do PowerShellGet. Este tópico foca-se nas funcionalidades específicas do script. As funcionalidades equivalentes para módulos estão no tópico Versões do Módulo de Pré-lançamento . Com estas funcionalidades, os editores podem identificar um script como a versão 2.5.0-alfa e, posteriormente, lançar uma versão 2.5.0 pronta para produção que substitui a versão de pré-lançamento.

A um nível elevado, as funcionalidades de script de pré-lançamento incluem:

  • Adicionar um sufixo PrereleaseString à cadeia de versão no manifesto do script. Quando os scripts são publicados no Galeria do PowerShell, estes dados são extraídos do manifesto e utilizados para identificar pacotes de pré-lançamento.
  • A aquisição de pacotes de pré-lançamento requer a adição do sinalizador -AllowPrerelease ao PowerShellGet comandos Find-Script, Install-Script, Update-Script e Save-Script. Se o sinalizador não for especificado, os pacotes de pré-lançamento não serão apresentados.
  • As versões de script apresentadas por Find-Script, Get-InstalledScript e no Galeria do PowerShell serão apresentadas com o PrereleaseString, tal como em 2.5.0-alpha.

Os detalhes das funcionalidades estão incluídos abaixo.

Identificar uma versão de script como um pré-lançamento

O suporte do PowerShellGet para versões de pré-lançamento é mais fácil para scripts do que módulos. O controlo de versões de scripts só é suportado pelo PowerShellGet, pelo que não existem problemas de compatibilidade causados pela adição da cadeia de pré-lançamento. Para identificar um script no Galeria do PowerShell como uma pré-lançamento, adicione um sufixo de pré-lançamento a uma cadeia de versão devidamente formatada nos metadados do script.

Uma secção de exemplo de um manifesto de script com uma versão de pré-lançamento teria o seguinte aspeto:

<#PSScriptInfo

.VERSION 3.2.1-alpha12

.GUID

...

#>

Para utilizar um sufixo de pré-lançamento, a cadeia de versão tem de cumprir os seguintes requisitos:

  • Um sufixo de pré-lançamento só pode ser especificado quando a Versão for 3 segmentos para Major.Minor.Build. Isto alinha-se com SemVer v1.0.0
  • O sufixo de pré-lançamento é uma cadeia que começa com um hífen e pode conter alfanuméricos ASCII [0-9A-Za-z-]
  • Apenas as cadeias de pré-lançamento semVer v1.0.0 são suportadas neste momento, pelo que o sufixo de pré-lançamento não pode conter nenhum ponto final ou + [.+], que são permitidos no SemVer 2.0
  • Exemplos de cadeias prereleaseString suportadas são: -alpha, -alpha1, -BETA, -update20171020

Impacto no controlo de versões de pré-lançamento nas pastas de ordenação e instalação

A sequência de ordenação muda ao utilizar uma versão de pré-lançamento, que é importante ao publicar no Galeria do PowerShell e ao instalar scripts com comandos do PowerShellGet. Se existirem duas versões de scripts com o número da versão, a sequência de ordenação baseia-se na parte da cadeia que segue o hífen. Assim, a versão 2.5.0-alfa é inferior a 2.5.0-beta, que é inferior a 2,5,0 gama. Se dois scripts tiverem o mesmo número de versão e apenas um tiver um PrereleaseString, o script sem o sufixo de pré-lançamento será considerado a versão pronta para produção e será ordenado como uma versão maior do que a versão de pré-lançamento. Por exemplo, ao comparar as versões 2.5.0 e 2.5.0-beta, a versão 2.5.0 será considerada a maior das duas.

Ao publicar no Galeria do PowerShell, por predefinição, a versão do script que está a ser publicado tem de ter uma versão maior do que qualquer versão publicada anteriormente no Galeria do PowerShell. Um publicador pode atualizar a versão 2.5.0-alfa com 2.5.0-beta ou com 2.5.0 (sem sufixo de pré-lançamento).

Localizar e adquirir pacotes de pré-lançamento com comandos do PowerShellGet

Lidar com pacotes de pré-lançamento com o PowerShellGet Find-Script, Install-Script, Update-Script e comandos de Save-Script requer a adição do sinalizador -AllowPrerelease. Se -AllowPrerelease for especificado, os pacotes de pré-lançamento serão incluídos se estiverem presentes. Se -AllowPrerelease sinalizador não for especificado, os pacotes de pré-lançamento não serão apresentados.

As únicas exceções a isto nos comandos de script do PowerShellGet são Get-InstalledScript e alguns casos com Uninstall-Script.

  • Get-InstalledScript mostrará sempre automaticamente as informações de pré-lançamento na cadeia de versão, se estiver presente.
  • Uninstall-Script irá, por predefinição, desinstalar a versão mais recente de um script, se não for especificada nenhuma versão . Este comportamento não mudou. No entanto, se for especificada uma versão de pré-lançamento com -RequiredVersion, -AllowPrerelease será necessária.

Exemplos

# 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 removerá a versão atual de um script quando -RequiredVersion não for fornecido. Se -RequiredVersion for especificado e for um pré-lançamento, -AllowPrerelease tem de ser adicionado ao comando.

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

Mais detalhes