Automatická migrace skriptů PowerShellu z AzureRM na modul Az PowerShell

V tomto článku se naučíte, jak pomocí modulu Az.Tools.Migration PowerShellu automaticky upgradovat skripty a skriptovací moduly PowerShellu z AzureRM na modul Az PowerShell. Další možnosti migrace najdete v tématu Migrace Azure PowerShellu z AzureRM na Az.

Upozorňující

Modul AzureRM PowerShell je od 29. února 2024 oficiálně zastaralý. Uživatelům se doporučuje migrovat z AzureRM do modulu Az PowerShell, aby se zajistila nepřetržitá podpora a aktualizace.

I když může modul AzureRM stále fungovat, už se neudržuje ani nepodporuje, přičemž jakékoli další použití se bude umisťovat podle vlastního uvážení a rizika uživatele. Pokyny k přechodu na modul Az najdete v našich zdrojích informací o migraci.

Požadavky

  • Aktualizujte stávající skripty PowerShellu na nejnovější verzi modulu AzureRM PowerShell (6.13.1).

  • Nainstalujte modul Az.Tools.Migration PowerShellu.

    Install-Module -Name Az.Tools.Migration
    

Krok 1: Vygenerování plánu upgradu

Pomocí rutiny New-AzUpgradeModulePlan vygenerujete plán upgradu pro migraci skriptů a modulů na modul Az PowerShell. Tato rutina neprovádí žádné změny ve vašich stávajících skriptech. Použijte parametr FilePath pro určení konkrétního skriptu nebo parametr DirectoryPath pro určení všech skriptů v konkrétní složce.

Poznámka:

Rutina New-AzUpgradeModulePlan plán nespustí, pouze vygeneruje kroky upgradu.

Následující příklad vygeneruje plán pro všechny skripty ve složce C:\Scripts. Je zadán parametr OutVariable, takže výsledky se vrátí a současně uloží do proměnné s názvem 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

Jak je znázorněno na následujícím výstupu, plán upgradu podrobně popisuje konkrétní soubory a místa v nich, která při přechodu z rutin AzureRM na Az PowerShell vyžadují změny.

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
...

Před provedením upgradu je potřeba se podívat na problémy ve výsledcích plánu. Následující příklad vrátí seznam skriptů a položek v těchto skriptech, které zabrání jejich automatickému upgradu.

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

Položky zobrazené v následujícím výstupu se neupgradují automaticky, aniž by nejprve opravovaly problémy ručně.

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            :

Krok 2: Provedení upgradu

Upozornění

Neexistuje žádná operace vrácení zpět. Vždy zajistěte, abyste měli záložní kopii skriptů a modulů PowerShellu, které se pokoušíte upgradovat.

Až budete s plánem spokojeni, upgrade se provede pomocí rutiny Invoke-AzUpgradeModulePlan. Jako hodnotu parametru FileEditMode zadejte SaveChangesToNewFiles, abyste zabránili provedení změn v původních skriptech. Při použití tohoto režimu se upgrade provede tak, že se vytvoří kopie každého cílového skriptu a k názvu souboru se připojí _az_upgraded.

Upozorňující

Pokud je zadaná možnost -FileEditMode ModifyExistingFiles, je rutina Invoke-AzUpgradeModulePlan destruktivní. Změní vaše skripty a funkce na místě v souladu s plánem upgradu modulu generovaného rutinou New-AzUpgradeModulePlan. Požadujete-li nedestruktivní upgrade, zadejte místo toho možnost -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
...

Pokud se vrátí nějaké chyby, můžete se podívat na chybové výsledky pomocí následujícího příkazu:

# 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            :

Omezení

  • Vstupně-výstupní operace se soubory používají výchozí kódování. Situace s neobvyklým kódováním souborů můžou způsobovat problémy.
  • Rutiny AzureRM předané jako argumenty cvičným příkazům testu jednotek Pester nejsou zjištěny.

Hlášení problémů

Nahlaste zpětnou vazbu a problémy týkající se modulu Az.Tools.Migration PowerShellu pomocí problému GitHubu v úložišti azure-powershell-migration.

Další kroky

Další informace o modulu Az PowerShell najdete v dokumentaci k Azure PowerShellu.