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


Миграция из AzureRM в Azure PowerShell Az в Azure Stack Hub

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

Полный список критических изменений между AzureRM и Az см. в руководстве по миграции az 1.0.0.0

Проверка установленных версий AzureRM

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

Чтобы проверить, какие версии AzureRM установлены, выполните следующую команду:

Get-InstalledModule -Name AzureRM -AllVersions

Проверка работы текущих скриптов с AzureRM

Это самый важный шаг! Запустите существующие скрипты и убедитесь, что они работают с последним выпуском AzureRM (2.5.0). Если скрипты не работают, ознакомьтесь с руководством по миграции AzureRM.

Установка модуля Azure PowerShell Az

Первым шагом является установка модуля Az на платформе. При установке Az рекомендуется удалить AzureRM. В следующих шагах вы узнаете, как выполнять существующие скрипты и включить совместимость старых имен командлетов.

Чтобы установить модуль Azure PowerShell Az, выполните следующие действия.

Активировать псевдонимы совместимости AzureRM

Важный

Включите режим совместимости только в том случае, если вы удалили все версии AzureRM. Включение режима совместимости с командлетами AzureRM по-прежнему может привести к непредсказуемому поведению. Пропустите этот шаг, если вы решили оставить AzureRM установленным, но помните, что все командлеты AzureRM будут использовать старые модули и не вызывать командлеты Az.

После удаления AzureRM и сценариев, работающих с последней версией AzureRM, необходимо включить режим совместимости для модуля Az. Совместимость включена с помощью команды:

Enable-AzureRmAlias -Scope CurrentUser

Псевдонимы позволяют использовать старые имена командлетов с установленным модулем Az. Эти псевдонимы записываются в профиль пользователя для выбранной области. Если профиль пользователя не существует, создается один из них.

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

Для этой команды можно использовать другую -Scope, но не рекомендуется. Псевдонимы записываются в профиль пользователя для выбранной области, поэтому старайтесь устанавливать их для минимально возможной области. Включение псевдонимов на уровне системы также может привести к проблемам с другими пользователями, которые установили AzureRM в локальной области.

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

Измените названия модулей и командлетов

Как правило, имена модулей были изменены таким образом, чтобы AzureRM и Azure стали Az, и то же касается командлетов. Например, модуль AzureRM.Compute был переименован в Az.Compute. New-AzureRMVM стал New-AzVM, и Get-AzureStorageBlob теперь Get-AzStorageBlob.

Существуют исключения для этого изменения именования, о которых следует знать. Некоторые модули были переименованы или объединены в существующие модули без изменения суффикса их командлетов, кроме как менять AzureRM или Azure на Az. В противном случае суффикс командлета целиком был изменён, чтобы отразить новое имя модуля.

Модуль AzureRM Модуль Az Изменен суффикс командлета?
AzureRM.Profile Az.Accounts Да
AzureRM.Insights Az.Monitor Да
AzureRM.Tags Az.Resources Нет
AzureRM.UsageAggregates Az.Биллинг Нет
AzureRM.Consumption Az.Billing Нет

Сводка

Выполнив следующие действия, вы можете обновить все существующие скрипты, чтобы использовать новый модуль. Если у вас возникли вопросы или проблемы с этими шагами, которые усложнили миграцию, прокомментируйте эту статью, чтобы мы могли улучшить инструкции.

Критические изменения для Az 1.0.0

В этом документе содержатся подробные сведения об изменениях между AzureRM 6.x и новым модулем Az версии 1.x и более поздними версиями. Оглавление поможет вам пройти полный путь миграции, включая изменения, относящиеся к модулю, которые могут повлиять на сценарии.

Основные изменения, вызывающие сбои

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

Изменения префикса команды cmdlet

В модуле AzureRM командлеты использовали AzureRM или Azure в качестве префикса существительного. Az упрощает и нормализует имена командлетов, чтобы все командлеты использовали "Az" в качестве префикса существительного командлета. Например:

Get-AzureRMVM
Get-AzureKeyVaultSecret

Изменилось на:

Get-AzVM
Get-AzKeyVaultSecret

Чтобы упростить переход к этим новым именам командлетов, Az представляет два новых командлета, Enable-AzureRmAlias и Disable-AzureRmAlias. Enable-AzureRmAlias создает псевдонимы для старых имен командлетов в AzureRM, которые сопоставляют с новыми именами командлетов Az. Использование аргумента -Scope с Enable-AzureRmAlias позволяет выбрать, где включены псевдонимы.

Например, следующий сценарий в AzureRM:

#Requires -Modules AzureRM.Storage
Get-AzureRmStorageAccount | Get-AzureStorageContainer | Get-AzureStorageBlob

Можно запускать с минимальными изменениями с помощью Enable-AzureRmAlias:

#Requires -Modules Az.Storage
Enable-AzureRmAlias -Scope Process
Get-AzureRmStorageAccount | Get-AzureStorageContainer | Get-AzureStorageBlob

Запуск Enable-AzureRmAlias -Scope CurrentUser позволит включить псевдонимы для всех сеансов PowerShell, которые вы открываете, так что после выполнения этого командлета не потребуется вовсе изменять сценарий, как этот.

Get-AzureRmStorageAccount | Get-AzureStorageContainer | Get-AzureStorageBlob

Полные сведения об использовании командлетов псевдонима см. в справочнике Enable-AzureRmAlias.

Когда вы будете готовы отключить псевдонимы, Disable-AzureRmAlias удаляет созданные псевдонимы. Для полной информации см. в справочнике Disable-AzureRmAlias.

Важный

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

Изменения имени модуля

Имена модулей изменились с AzureRM.* на Az.*, за исключением следующих модулей:

Модуль AzureRM Модуль Az
Azure.Storage Az.Storage
Azure.AnalysisServices Az.AnalysisServices
AzureRM.Profile Az.Accounts
AzureRM.Insights Az.Monitor
AzureRM.RecoveryServices.Backup Az.RecoveryServices
AzureRM.RecoveryServices.SiteRecovery Az.RecoveryServices
AzureRM.Tags Az.Resources
AzureRM.MachineLearningCompute Az.MachineLearning
AzureRM.UsageAggregates Az.Billing
AzureRM.Consumption Az.Billing

Изменения в именах модулей означают, что любой скрипт, использующий #Requires или Import-Module для загрузки определенных модулей, потребуется изменить, чтобы использовать новый модуль. Для модулей, где суффикс командлета не изменился, это означает, что хотя имя модуля изменилось, суффикс, указывающий пространство операций, имеет , а не.

Миграция требует и импорт инструкций модуля

Скрипты, использующие #Requires или Import-Module для объявления зависимости от модулей AzureRM, необходимо обновить, чтобы использовать новые имена модулей. Например:

#Requires -Module AzureRM.Compute

Необходимо изменить следующее:

#Requires -Module Az.Compute

Для Import-Module:

Import-Module -Name AzureRM.Compute

Необходимо изменить следующее:

Import-Module -Name Az.Compute

Перенос полностью квалифицированных вызовов командлетов

Скрипты, использующие вызовы командлета с поддержкой модуля, например:

AzureRM.Compute\Get-AzureRmVM

Необходимо изменить для использования новых имен модулей и командлетов:

Az.Compute\Get-AzVM

Перенос зависимостей манифеста модуля

Модули, которые выражают зависимости от модулей AzureRM с помощью файла манифеста модуля (PSD1), должны обновить имена модулей в разделе RequiredModules:

RequiredModules = @(@{ModuleName="AzureRM.Profile"; ModuleVersion="5.8.2"})

Необходимо изменить следующее:

RequiredModules = @(@{ModuleName="Az.Accounts"; ModuleVersion="1.0.0"})

Удаленные модули

Были удалены следующие модули:

  • AzureRM.Backup
  • AzureRM.Compute.ManagedService
  • AzureRM.Scheduler

Инструменты для этих услуг больше не поддерживаются активно. Клиентам рекомендуется перейти к альтернативным службам, как только это удобно.

Windows PowerShell 5.1 и .NET 4.7.2

Для Использования Az с PowerShell 5.1 для Windows требуется установка .NET Framework 4.7.2. Использование PowerShell Core 6.x или более поздней версии не требует .NET Framework.

Временное удаление имени входа пользователя с помощью PSCredential

Из-за изменений в потоке проверки подлинности для .NET Standard мы временно удаляем имя входа пользователя через PSCredential. Эта возможность будет повторно представлена в выпуске 1.15.2019 для PowerShell 5.1 для Windows. Это подробно обсуждается в этой задаче на GitHub.

Вход по умолчанию с помощью кода устройства вместо запроса на вход через веб-браузер.

Из-за изменений в процессе аутентификации для .NET Standard мы используем вход через устройство в качестве потока входа по умолчанию при интерактивном входе. Вход с использованием веб-браузера будет вновь введён в PowerShell 5.1 для Windows по умолчанию в выпуске от 15.01.2019. В этот момент пользователи смогут выбрать вход на устройство с помощью параметра Switch.

Изменения, нарушающие совместимость модуля

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

Az.ApiManagement (ранее AzureRM.ApiManagement)

  • Удалены следующие командлеты:
    • New-AzureRmApiManagementHostnameConfiguration
    • Set-AzureRmApiManagementHostnames
    • Update-AzureRmApiManagementDeployment
    • Import-AzureRmApiManagementHostnameCertificate
    • Используйте командлет Set-AzApiManagement, чтобы задать эти свойства.
  • Удалены следующие свойства:
    • Удалено свойство PortalHostnameConfiguration, ProxyHostnameConfiguration, ManagementHostnameConfiguration и ScmHostnameConfiguration типа PsApiManagementHostnameConfiguration из PsApiManagementContext. Вместо этого используйте PortalCustomHostnameConfiguration, ProxyCustomHostnameConfiguration, ManagementCustomHostnameConfiguration и ScmCustomHostnameConfiguration типа PsApiManagementCustomHostNameConfiguration.
    • Удалено свойство StaticIPs из PsApiManagementContext. Свойство разделено на PublicIPAddresses и PrivateIPAddresses.
    • Удалено необходимое свойство Location из командлета New-AzureApiManagementVirtualNetwork.

Az.Billing (ранее AzureRM.Billing, AzureRM.Consumption и AzureRM.UsageAggregates)

  • Параметр InvoiceName был удален из командлета Get-AzConsumptionUsageDetail. Скриптам потребуется использовать другие параметры идентификации для выставления счета.

Az.Compute (ранее AzureRM.Compute)

  • IdentityIds удаляются из свойства Identity в объектах PSVirtualMachine и PSVirtualMachineScaleSet. Скрипты больше не должны использовать значение этого поля для принятия решений об обработке.
  • Тип свойства InstanceView объекта PSVirtualMachineScaleSetVM изменяется с VirtualMachineInstanceView на VirtualMachineScaleSetVMInstanceView
  • свойства AutoOSUpgradePolicy и AutomaticOSUpgrade удаляются из свойства UpgradePolicy
  • Тип свойства Sku в объекте PSSnapshotUpdate изменяется с DiskSku на SnapshotSku
  • VmScaleSetVMParameterSet удаляется из командлета Add-AzVMDataDisk, вы больше не можете добавить диск данных отдельно в виртуальную машину ScaleSet.

Az.KeyVault (ранее AzureRM.KeyVault)

  • Свойство PurgeDisabled было удалено из PSKeyVaultKeyAttributes, PSKeyVaultKeyIdentityItemи PSKeyVaultSecretAttributes объектов Scripts больше не должно ссылаться на свойство PurgeDisabled для принятия решений по обработке.

Az.Monitor (ранее AzureRM.Insights)

  • Удалены имена множественного числа Categories и параметр Timegrains в пользу имен сингулярных параметров из скриптов командлетов Set-AzDiagnosticSetting

    Set-AzureRmDiagnosticSetting -Timegrains PT1M -Categories Category1, Category2
    

    Должно быть изменено на

    Set-AzDiagnosticSetting -Timegrain PT1M -Category Category1, Category2
    

Az.Network (ранее AzureRM.Network)

  • Удален устаревший параметр ResourceId из командлета Get-AzServiceEndpointPolicyDefinition
  • Удалено нерекомендуемое свойство EnableVmProtection из объекта PSVirtualNetwork
  • Удален устаревший командлет Set-AzVirtualNetworkGatewayVpnClientConfig

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

Az.Resources (ранее AzureRM.Resources)

  • Удален параметр Sku из командлета New/Set-AzPolicyAssignment

  • Удален параметр Password из командлетов New-AzADServicePrincipal и New-AzADSpCredential. Пароли автоматически создаются, а скрипты предоставляют пароль.

    New-AzAdSpCredential -ObjectId aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb -Password $secPassword
    

    Необходимо изменить, чтобы получить пароль из выходных данных:

    $credential = New-AzAdSpCredential -ObjectId aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb
    $secPassword = $credential.Secret
    

Az.Storage (ранее Azure.Storage и AzureRM.Storage)

  • Чтобы поддерживать создание контекста хранилища Oauth только с именем учетной записи хранения, набор параметров по умолчанию был изменен на OAuthParameterSet
    • Пример: $ctx = New-AzureStorageContext -StorageAccountName $accountName
  • Параметр Location стал обязательным в командлете Get-AzStorageUsage
  • Методы API хранилища теперь используют асинхронный шаблон на основе задач (TAP), а не синхронные вызовы API. В следующих примерах показаны новые асинхронные команды:

Моментальный снимок BLOB-объектов

AzureRM:

$b = Get-AzureStorageBlob -Container $containerName -Blob $blobName -Context $ctx
$b.ICloudBlob.Snapshot()

Аз:

$b = Get-AzStorageBlob -Container $containerName -Blob $blobName -Context $ctx
$task = $b.ICloudBlob.SnapshotAsync()
$task.Wait()
$snapshot = $task.Result

Поделиться снимком экрана

AzureRM:

$Share = Get-AzureStorageShare -Name $containerName -Context $ctx
$snapshot = $Share.Snapshot()

Аз:

$Share = Get-AzStorageShare -Name $containerName -Context $ctx
$task = $Share.SnapshotAsync()
$task.Wait()
$snapshot = $task.Result

Восстановить мягко удалённый блоб

AzureRM:

$b = Get-AzureStorageBlob -Container $containerName -Blob $blobName -IncludeDeleted -Context $ctx
$b.ICloudBlob.Undelete()

Аз:

$b = Get-AzStorageBlob -Container $containerName -Blob $blobName -IncludeDeleted -Context $ctx
$task = $b.ICloudBlob.UndeleteAsync()
$task.Wait()

Настройка уровня BLOB-объектов

AzureRM:

$blockBlob = Get-AzureStorageBlob -Container $containerName -Blob $blockBlobName -Context $ctx
$blockBlob.ICloudBlob.SetStandardBlobTier("hot")

$pageBlob = Get-AzureStorageBlob -Container $containerName -Blob $pageBlobName -Context $ctx
$pageBlob.ICloudBlob.SetPremiumBlobTier("P4")

Аз:

$blockBlob = Get-AzStorageBlob -Container $containerName -Blob $blockBlobName -Context $ctx
$task = $blockBlob.ICloudBlob.SetStandardBlobTierAsync("hot")
$task.Wait()

$pageBlob = Get-AzStorageBlob -Container $containerName -Blob $pageBlobName -Context $ctx
$task = $pageBlob.ICloudBlob.SetPremiumBlobTierAsync("P4")
$task.Wait()

Az.Websites (ранее AzureRM.Websites)

  • Удалены устаревшие свойства из объектов PSAppServicePlan, PSCertificate, PSCloningInfoи PSSite

Дальнейшие действия