Condividi tramite


Eseguire automaticamente la migrazione degli script di PowerShell da AzureRM al modulo Az PowerShell

In questo articolo verrà illustrato come usare il modulo Az.Tools.Migration di PowerShell per aggiornare automaticamente gli script di PowerShell e i moduli di script dal modulo AzureRM al modulo Az PowerShell. Per altre opzioni sulla migrazione, vedere Eseguire la migrazione di Azure PowerShell da AzureRM ad Az.

Avvertimento

Il modulo AzureRM PowerShell è stato ufficialmente deprecato a partire dal 29 febbraio 2024. Agli utenti è consigliato migrare da AzureRM al modulo Az PowerShell per garantire supporto e aggiornamenti continui.

Anche se il modulo AzureRM può ancora funzionare, non è più gestito né supportato, pertanto qualsiasi uso continuato è a discrezione e rischio dell'utente. Si prega di fare riferimento alle nostre risorse di migrazione per avere una guida sulla transizione verso il modulo Az.

Requisiti

  • Aggiorna gli script di PowerShell esistenti alla versione più recente del modulo AzureRM PowerShell (6.13.1).

  • Installare il modulo Az.Tools.Migration di PowerShell.

    Install-Module -Name Az.Tools.Migration
    

Passaggio 1: Generare un piano di aggiornamento

Usare il cmdlet New-AzUpgradeModulePlan per generare un piano di aggiornamento per la migrazione degli script e dei moduli al modulo Az PowerShell. Questo cmdlet non apporta modifiche agli script esistenti. Usare il parametro FilePath per scegliere uno script specifico come destinazione oppure il parametro DirectoryPath per scegliere tutti gli script di una specifica cartella.

Annotazioni

Il cmdlet New-AzUpgradeModulePlan non esegue il piano, ma genera solo i passaggi di aggiornamento.

L'esempio seguente genera un piano per tutti gli script della cartella C:\Scripts. Il parametro OutVariable viene specificato in modo che i risultati vengano restituiti e archiviati contemporaneamente in una variabile denominata Plan.

# Generate an upgrade plan for all the scripts and module files in the specified folder and save it to a variable.
New-AzUpgradeModulePlan -FromAzureRmVersion 6.13.1 -ToAzVersion latest -DirectoryPath 'C:\Scripts' -OutVariable Plan

Come illustrato nell'output seguente, il piano di aggiornamento descrive in dettaglio i punti di offset e file specifici che richiedono modifiche durante il passaggio da AzureRM ai cmdlet di Az PowerShell.

Order Location                                                   UpgradeType     PlanResult             Original
----- --------                                                   -----------     ----------             --------
1     compute-create-dockerhost.ps1:59:24                        CmdletParameter ReadyToUpgrade         ExtensionName
2     compute-create-dockerhost.ps1:59:1                         Cmdlet          ReadyToUpgrade         Set-AzureRmVM...
3     compute-create-dockerhost.ps1:54:1                         Cmdlet          ReadyToUpgrade         New-AzureRmVM
4     compute-create-dockerhost.ps1:51:1                         Cmdlet          ReadyToUpgrade         Add-AzureRmVM...
5     compute-create-dockerhost.ps1:47:1                         Cmdlet          ReadyToUpgrade         Add-AzureRmVM...
6     compute-create-dockerhost.ps1:46:1                         Cmdlet          ReadyToUpgrade         Set-AzureRmVM...
7     compute-create-dockerhost.ps1:45:1                         Cmdlet          ReadyToUpgrade         Set-AzureRmVM...
8     compute-create-dockerhost.ps1:44:13                        Cmdlet          ReadyToUpgrade         New-AzureRmVM...
9     compute-create-dockerhost.ps1:40:8                         Cmdlet          ReadyToUpgrade         New-AzureRmNe...
10    compute-create-dockerhost.ps1:36:8                         Cmdlet          ReadyToUpgrade         New-AzureRmNe...
11    compute-create-dockerhost.ps1:31:16                        Cmdlet          ReadyToUpgrade         New-AzureRmNe...
12    compute-create-dockerhost.ps1:26:15                        Cmdlet          ReadyToUpgrade         New-AzureRmNe...
13    compute-create-dockerhost.ps1:22:8                         Cmdlet          ReadyToUpgrade         New-AzureRmPu...
14    compute-create-dockerhost.ps1:18:9                         Cmdlet          ReadyToUpgrade         New-AzureRmVi...
15    compute-create-dockerhost.ps1:15:17                        Cmdlet          ReadyToUpgrade         New-AzureRmVi...
16    compute-create-dockerhost.ps1:12:1                         Cmdlet          ReadyToUpgrade         New-AzureRmRe...
17    compute-create-windowsvm-quick.ps1:18:3                    CmdletParameter ReadyToUpgrade         ImageName
18    compute-create-windowsvm-quick.ps1:14:1                    Cmdlet          ReadyToUpgrade         New-AzureRmVM
19    compute-create-windowsvm-quick.ps1:11:1                    Cmdlet          ReadyToUpgrade         New-AzureRmRe...
20    compute-create-wordpress-mysql.ps1:59:24                   CmdletParameter ReadyToUpgrade         ExtensionName
...

Prima di eseguire l'aggiornamento, è necessario visualizzare i risultati del piano per verificare la presenza di problemi. L'esempio seguente restituisce un elenco di script e degli elementi al loro interno che ne eviteranno l'aggiornamento automatico.

# Filter plan results to only warnings and errors
$Plan | Where-Object PlanResult -ne ReadyToUpgrade | Format-List

Gli elementi visualizzati nell'output seguente non verranno aggiornati automaticamente senza prima correggere manualmente i problemi.

Order                  : 42
UpgradeType            : CmdletParameter
PlanResult             : ErrorParameterNotFound
PlanSeverity           : Error
PlanResultReason       : Parameter was not found in Get-AzResource or it's aliases.
SourceCommand          : CommandReference
SourceCommandParameter : CommandReferenceParameter
Location               : devtestlab-add-marketplace-image-to-lab.ps1:14:74
FullPath               : C:\Scripts\devtestlab-add-marketplace-image-to-lab.ps1
StartOffset            : 556
Original               : ResourceNameEquals
Replacement            :

Passaggio 2: Eseguire l'aggiornamento

Attenzione

Non è disponibile alcuna operazione di annullamento. Assicurarsi sempre di disporre di una copia di backup degli script e dei moduli di PowerShell che si sta tentando di aggiornare.

Dopo che sei soddisfatto del piano, l'aggiornamento viene eseguito con il cmdlet Invoke-AzUpgradeModulePlan. Specificare SaveChangesToNewFiles per il valore del parametro FileEditMode per impedire che vengano apportate modifiche agli script originali. Quando si utilizza questa modalità, l'aggiornamento viene effettuato creando una copia di ciascun script, a cui viene aggiunto _az_upgraded alla fine del nome di ogni file.

Avvertimento

Il cmdlet Invoke-AzUpgradeModulePlan è distruttivo quando viene specificata l'opzione -FileEditMode ModifyExistingFiles. Modifica gli script e le funzioni sul posto in base al piano di aggiornamento del modulo generato dal cmdlet New-AzUpgradeModulePlan. Per l'opzione non distruttiva specificare invece -FileEditMode SaveChangesToNewFiles.

# Execute the automatic upgrade plan and save the results to a variable.
Invoke-AzUpgradeModulePlan -Plan $Plan -FileEditMode SaveChangesToNewFiles -OutVariable Results
Order Location                                                   UpgradeType     UpgradeResult    Original
----- --------                                                   -----------     -------------    --------
1     compute-create-dockerhost.ps1:59:24                        CmdletParameter UpgradeCompleted ExtensionName
2     compute-create-dockerhost.ps1:59:1                         Cmdlet          UpgradeCompleted Set-AzureRmVMExtens...
3     compute-create-dockerhost.ps1:54:1                         Cmdlet          UpgradeCompleted New-AzureRmVM
4     compute-create-dockerhost.ps1:51:1                         Cmdlet          UpgradeCompleted Add-AzureRmVMSshPub...
5     compute-create-dockerhost.ps1:47:1                         Cmdlet          UpgradeCompleted Add-AzureRmVMNetwor...
6     compute-create-dockerhost.ps1:46:1                         Cmdlet          UpgradeCompleted Set-AzureRmVMSource...
7     compute-create-dockerhost.ps1:45:1                         Cmdlet          UpgradeCompleted Set-AzureRmVMOperat...
8     compute-create-dockerhost.ps1:44:13                        Cmdlet          UpgradeCompleted New-AzureRmVMConfig
9     compute-create-dockerhost.ps1:40:8                         Cmdlet          UpgradeCompleted New-AzureRmNetworkI...
10    compute-create-dockerhost.ps1:36:8                         Cmdlet          UpgradeCompleted New-AzureRmNetworkS...
11    compute-create-dockerhost.ps1:31:16                        Cmdlet          UpgradeCompleted New-AzureRmNetworkS...
12    compute-create-dockerhost.ps1:26:15                        Cmdlet          UpgradeCompleted New-AzureRmNetworkS...
13    compute-create-dockerhost.ps1:22:8                         Cmdlet          UpgradeCompleted New-AzureRmPublicIp...
14    compute-create-dockerhost.ps1:18:9                         Cmdlet          UpgradeCompleted New-AzureRmVirtualN...
15    compute-create-dockerhost.ps1:15:17                        Cmdlet          UpgradeCompleted New-AzureRmVirtualN...
16    compute-create-dockerhost.ps1:12:1                         Cmdlet          UpgradeCompleted New-AzureRmResource...
17    compute-create-windowsvm-quick.ps1:18:3                    CmdletParameter UpgradeCompleted ImageName
18    compute-create-windowsvm-quick.ps1:14:1                    Cmdlet          UpgradeCompleted New-AzureRmVM
19    compute-create-windowsvm-quick.ps1:11:1                    Cmdlet          UpgradeCompleted New-AzureRmResource...
20    compute-create-wordpress-mysql.ps1:59:24                   CmdletParameter UpgradeCompleted ExtensionName
...

Se vengono restituiti errori, è possibile esaminare più in dettaglio i risultati dell'errore con il comando seguente:

# Filter results to show only errors
$Results | Where-Object UpgradeResult -ne UpgradeCompleted | Format-List
Order                  : 42
UpgradeType            : CmdletParameter
UpgradeResult          : UnableToUpgrade
UpgradeSeverity        : Error
UpgradeResultReason    : Parameter was not found in Get-AzResource or it's aliases.
SourceCommand          : CommandReference
SourceCommandParameter : CommandReferenceParameter
Location               : devtestlab-add-marketplace-image-to-lab.ps1:14:74
FullPath               : C:\Scripts\devtestlab-add-marketplace-image-to-lab.ps1
StartOffset            : 556
Original               : ResourceNameEquals
Replacement            :

Limitazioni

  • Le operazioni di I/O dei file usano la codifica predefinita. Le situazioni di codifica dei file insolite possono causare problemi.
  • I cmdlet di AzureRM passati come argomenti ai mock test degli unit test Pester non vengono rilevati.

Come segnalare i problemi

Inviare feedback e segnalare problemi sul modulo Az.Tools.Migration di PowerShell tramite un problema di GitHub nel repository azure-powershell-migration.

Passaggi successivi

Per altre informazioni sul modulo Az PowerShell, vedere la documentazione di Azure PowerShell