Condividi tramite


Versioni non definitive degli script

A partire dalla versione 1.6.0, PowerShellGet e PowerShell Gallery forniscono il supporto per l'assegnazione di tag alle versioni successive alla 1.0.0 come versione preliminare. Prima di questa funzionalità, i pacchetti non definitivi erano limitati ad avere una versione che iniziava con 0. L'obiettivo di queste funzionalità è fornire un maggiore supporto per la convenzione di controllo delle versioni di SemVer v1.0.0 senza interrompere la compatibilità con le versioni precedenti di PowerShell 3 e versioni successive o con le versioni esistenti di PowerShellGet. In questo argomento vengono illustrate le funzionalità specifiche dello script. Le funzionalità equivalenti per i moduli sono disponibili nell'argomento Versioni non definitive dei moduli . Utilizzando queste funzionalità, gli editori possono identificare uno script come versione 2.5.0-alpha e successivamente rilasciare una versione 2.5.0 pronta per la produzione che sostituisce la versione non definitiva.

A livello generale, le funzionalità degli script non definitivi includono:

  • Aggiunta di un suffisso PrereleaseString alla stringa di versione nel manifesto dello script. Quando gli script vengono pubblicati in PowerShell Gallery, questi dati vengono estratti dal manifesto e usati per identificare i pacchetti non definitivi.
  • L'acquisizione di pacchetti non definitivi richiede l'aggiunta di -AllowPrerelease flag ai comandi PowerShellGet Find-Script, Install-Script, Update-Script e Save-Script. Se il flag non è specificato, i pacchetti non definitivi non verranno visualizzati.
  • Le versioni degli script visualizzate da Find-Script, Get-InstalledScript e in PowerShell Gallery verranno visualizzate con PrereleaseString, come nella versione 2.5.0-alpha.

I dettagli per le funzionalità sono inclusi di seguito.

Identificazione di una versione dello script come versione preliminare

PowerShellIl supporto per le versioni non definitive è più semplice per gli script che per i moduli. Il controllo delle versioni degli script è supportato solo da PowerShellGet, quindi non si verificano problemi di compatibilità causati dall'aggiunta della stringa non definitiva. Per identificare uno script in PowerShell Gallery come versione non definitiva, aggiungere un suffisso non definitivo a una stringa di versione formattata correttamente nei metadati dello script.

Una sezione di esempio di un manifesto di script con una versione non definitiva sarebbe simile alla seguente:

<#PSScriptInfo

.VERSION 3.2.1-alpha12

.GUID

...

#>

Per utilizzare un suffisso non definitivo, la stringa di versione deve soddisfare i seguenti requisiti:

  • Un suffisso non definitivo può essere specificato solo quando la versione è di 3 segmenti per Major.Minor.Build. Questo è in linea con SemVer v1.0.0
  • Il suffisso prerelease è una stringa che inizia con un trattino e può contenere caratteri alfanumerici ASCII [0-9A-Za-z-]
  • Al momento sono supportate solo le stringhe non definitive di SemVer v1.0.0, quindi il suffisso non definitivo non deve contenere né il punto né + [.+], consentiti in SemVer 2.0
  • Esempi di stringhe PrereleaseString supportate sono: -alpha, -alpha1, -BETA, -update20171020

Impatto del controllo delle versioni non definitive sull'ordinamento e sulle cartelle di installazione

L'ordinamento cambia quando si usa una versione non definitiva, che è importante quando si pubblica in PowerShell Gallery e quando si installano script usando i comandi PowerShellGet. Se esistono due versioni di script con il numero di versione, l'ordinamento si basa sulla parte di stringa che segue il trattino. Quindi, la versione 2.5.0-alpha è inferiore a 2.5.0-beta, che è inferiore a 2.5.0-gamma. Se due script hanno lo stesso numero di versione e solo uno ha un PrereleaseString, si presuppone che lo script senza il suffisso non definitivo sia la versione pronta per la produzione e verrà ordinato come versione maggiore rispetto alla versione non definitiva. Ad esempio, quando si confrontano le versioni 2.5.0 e 2.5.0-beta, la versione 2.5.0 sarà considerata la maggiore delle due.

Quando si pubblica in PowerShell Gallery, per impostazione predefinita la versione dello script da pubblicare deve avere una versione maggiore rispetto a qualsiasi versione pubblicata in precedenza presente in PowerShell Gallery. Un editore può aggiornare la versione 2.5.0-alpha con la versione 2.5.0-beta o con la versione 2.5.0 (senza suffisso pre-release).

Ricerca e acquisizione di pacchetti non definitivi tramite i comandi PowerShellGet

La gestione dei pacchetti non definitivi tramite i comandi PowerShellGet Find-Script, Install-Script, Update-Script e Save-Script richiede l'aggiunta del flag -AllowPrerelease. Se viene specificata -AllowPrerelease, verranno inclusi i pacchetti non definitivi, se presenti. Se -AllowPrerelease flag non viene specificato, i pacchetti non definitivi non verranno visualizzati.

Le uniche eccezioni nei comandi script di PowerShellGet sono Get-InstalledScript e alcuni casi con Uninstall-Script.

  • Get-InstalledScript mostrerà sempre automaticamente le informazioni non definitive nella stringa della versione, se presente.
  • Per impostazione predefinita, Uninstall-Script disinstallerà la versione più recente di uno script, se non è specificata alcuna versione . Questo comportamento non è cambiato. Tuttavia, se viene specificata una versione preliminare utilizzando -RequiredVersion, -AllowPrerelease sarà necessario.

Esempi

# 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 rimuoverà la versione corrente di uno script quando -RequiredVersion non viene fornita. Se -RequiredVersion è specificato ed è una versione preliminare, è necessario aggiungere -AllowPrerelease al 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

Altri dettagli