Поделиться через


Автоматическая миграция скриптов PowerShell из AzureRM в модуль Az PowerShell

В этой статье вы узнаете, как использовать модуль PowerShell Az.Tools.Migration для автоматического обновления ваших скриптов PowerShell и модулей скриптов с AzureRM на модуль Az PowerShell. Для получения дополнительных вариантов миграции смотрите Миграция Azure PowerShell с AzureRM на Az.

Предупреждение

Модуль AzureRM PowerShell официально объявлен устаревшим с 29 февраля 2024 года. Пользователям рекомендуется перейти с AzureRM на модуль Az PowerShell, чтобы обеспечить продолжение поддержки и обновлений.

Хотя модуль AzureRM может по-прежнему функционировать, он больше не поддерживается и не обслуживается, поэтому его дальнейшее использование осуществляется на усмотрение и риск пользователя. Пожалуйста, обратитесь к нашим ресурсам по миграции, чтобы получить рекомендации по переходу на модуль Az.

Требования

  • Обновите свои существующие скрипты PowerShell до последней версии модуля AzureRM PowerShell (6.13.1).

  • Установите модуль Az.Tools.Migration PowerShell.

    Install-Module -Name Az.Tools.Migration
    

Шаг 1. Создание плана обновления

Командлет New-AzUpgradeModulePlan используется для создания плана обновления для переноса скриптов и модулей в модуль Az PowerShell. Этот командлет не вносит изменений в ваши существующие скрипты. Используйте параметр FilePath, чтобы нацелиться на конкретный скрипт, или параметр DirectoryPath, чтобы нацелиться на все скрипты в определенной папке.

Замечание

Команда New-AzUpgradeModulePlan не выполняет план, она только создает шаги для обновления.

Следующий пример создает план для всех скриптов в папке C:\Scripts. Параметр OutVariable указан таким образом, чтобы результаты были возвращены и одновременно сохранены в переменной с именем 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

Как показано в следующем выводе, план обновления детализирует конкретные файлы и точки смещения, которые требуют изменений при переходе с AzureRM на Az PowerShell cmdlets.

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

Перед выполнением обновления вам необходимо просмотреть результаты плана на наличие проблем. Следующий пример возвращает список скриптов и элементы в этих скриптах, которые помешают их автоматическому обновлению.

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

Элементы, показанные в следующем выводе, не будут обновлены автоматически без предварительного ручного исправления проблем.

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            :

Шаг 2: Выполните обновление

Осторожность

Операция отмены отсутствует. Всегда убедитесь, что у вас есть резервная копия скриптов и модулей PowerShell, которые вы пытаетесь обновить.

После того как вы удовлетворены планом, обновление выполняется с помощью команды Invoke-AzUpgradeModulePlan. Укажите SaveChangesToNewFiles для значения параметра FileEditMode, чтобы предотвратить внесение изменений в исходные скрипты. При использовании этого режима обновление выполняется путем создания копии каждого скрипта с добавлением к именам файлов суффикса _az_upgraded.

Предупреждение

Командлет Invoke-AzUpgradeModulePlan работает разрушительно при указании параметра -FileEditMode ModifyExistingFiles! Он изменяет ваши скрипты и функции непосредственно на месте в соответствии с планом обновления модуля, созданным с помощью командлета New-AzUpgradeModulePlan. Вместо этого для неразрушающего параметра укажите -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
...

Если были возвращены какие-либо ошибки, вы можете более подробно изучить результаты ошибок с помощью следующей команды:

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

Ограничения

  • Операции ввода-вывода файлов используют кодировку по умолчанию. Необычные ситуации кодировки файлов могут вызвать проблемы.
  • Командлеты AzureRM, переданные в качестве аргументов в макетных инструкциях для модульных тестов Pester, не распознаются.

Как сообщить о проблемах

Сообщайте отзывы и проблемы, связанные с модулем PowerShell Az.Tools.Migration, через вопрос на GitHub в репозитории azure-powershell-migration.

Дальнейшие шаги

Чтобы узнать больше о модуле Az PowerShell, см. документацию Azure PowerShell.