Compartilhar via


Versões de pré-lançamento de scripts

A partir da versão 1.6.0, o PowerShellGet e a Galeria do PowerShell fornecem suporte para marcar versões superiores a 1.0.0 como um pré-lançamento. Antes desse recurso, os pacotes de pré-lançamento eram limitados a ter uma versão começando com 0. O objetivo desses recursos é fornecer maior suporte para a convenção de controle de versão do SemVer v1.0.0 sem interromper a compatibilidade com versões anteriores do PowerShell 3 e superior ou versões existentes do PowerShellGet. Este tópico se concentra nos recursos específicos do script. Os recursos equivalentes para módulos estão no tópico Versões de módulo de pré-lançamento . Usando esses recursos, os editores podem identificar um script como versão 2.5.0-alpha e, posteriormente, lançar uma versão 2.5.0 pronta para produção que substitui a versão de pré-lançamento.

Em um alto nível, os recursos do script de pré-lançamento incluem:

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

Os detalhes dos recursos estão incluídos abaixo.

Identificando 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 para módulos. O controle de versão de script só tem suporte do PowerShellGet, portanto, não há problemas de compatibilidade causados pela adição da cadeia de caracteres de pré-lançamento. Para identificar um script na Galeria do PowerShell como um pré-lançamento, adicione um sufixo de pré-lançamento a uma cadeia de caracteres de versão formatada corretamente nos metadados do script.

Uma seção de exemplo de um manifesto de script com uma versão de pré-lançamento seria semelhante à seguinte:

<#PSScriptInfo

.VERSION 3.2.1-alpha12

.GUID

...

#>

Para usar um sufixo de pré-lançamento, a cadeia de caracteres de versão deve atender aos seguintes requisitos:

  • Um sufixo de pré-lançamento só pode ser especificado quando a versão tiver 3 segmentos para Major.Minor.Build. Isso se alinha com o SemVer v1.0.0
  • O sufixo de pré-lançamento é uma string que começa com um hífen e pode conter alfanuméricos ASCII [0-9A-Za-z-]
  • Somente strings de pré-lançamento do SemVer v1.0.0 são suportadas no momento, portanto, o sufixo de pré-lançamento não deve conter período ou + [.+], que são permitidos no SemVer 2.0
  • Exemplos de strings PrereleaseString suportadas são: -alpha, -alpha1, -BETA, -update20171020

Impacto do controle de versão de pré-lançamento na ordem de classificação e nas pastas de instalação

Classifique as alterações de ordem ao usar uma versão de pré-lançamento, o que é importante ao publicar na Galeria do PowerShell e ao instalar scripts usando comandos PowerShellGet. Se existirem duas versões de scripts com o número de versão, a ordem de classificação será baseada na parte da cadeia de caracteres após o hífen. Portanto, a versão 2.5.0-alpha é menor que 2.5.0-beta, que é menor que 2.5.0-gamma. 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á classificado 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 na Galeria do PowerShell, por padrão, a versão do script que está sendo publicada deve ter uma versão maior do que qualquer versão publicada anteriormente que esteja na Galeria do PowerShell. Um editor pode atualizar a versão 2.5.0-alpha com 2.5.0-beta ou com 2.5.0 (sem sufixo de pré-lançamento).

Localizando e adquirindo pacotes de pré-lançamento usando comandos PowerShellGet

Lidar com pacotes de pré-lançamento usando os comandos PowerShellGet Find-Script, Install-Script, Update-Script e 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 mostrados.

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

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

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 fornecida. Se -RequiredVersion for especificado e for um pré-lançamento, -AllowPrerelease deverá 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