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

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

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

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

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

Чтобы проверить установленную версию (версии) AzureRM, выполните приведенную ниже команду.

Get-InstalledModule -Name AzureRM -AllVersions

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

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

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

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

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

Включение псевдонимов совместимости 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-AzureStorageBlobGet-AzStorageBlob.

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

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

Сводка

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

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

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

Общие критически важные изменения

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

Изменения префикса существительного командлета

В модуле 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 для загрузки определенных модулей, необходимо будет изменить, чтобы вместо него использовать новый модуль. Для модулей, в которых суффикс командлета не был изменен, это означает, что хотя имя модуля изменилось, суффикс, указывающий пространство операции, не изменился.

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

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

#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. Эта возможность будет доступна в выпуске от 15 января 2019 г. для Windows PowerShell 5.1. Это подробно описано в этом сообщении на сайте GitHub.

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

Из-за изменений в процессе проверки подлинности для .NET Standard мы используем вход устройства в качестве потока входа по умолчанию во время интерактивного входа. Вход через веб-браузер будет повторно представлен для Windows PowerShell 5.1 в качестве версии по умолчанию в выпуске от 15 января 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.Consitation и 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. Больше нельзя отдельно добавлять диск данных в виртуальную машину из масштабируемого набора.

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

  • Свойство PurgeDisabled удалено из объектов PSKeyVaultKeyAttributes, PSKeyVaultKeyIdentityItem и PSKeyVaultSecretAttributes. Скрипты больше не должны ссылаться на свойство 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)

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

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

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

  • Из командлета New/Set-AzPolicyAssignment удален параметр Sku.

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

    New-AzAdSpCredential -ObjectId 1f99cf81-0146-4f4e-beae-2007d0668476 -Password $secPassword
    

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

    $credential = New-AzAdSpCredential -ObjectId 1f99cf81-0146-4f4e-beae-2007d0668476
    $secPassword = $credential.Secret
    

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

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

Моментальный снимок большого двоичного объекта

AzureRM:

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

Az:

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

Общий доступ к snapshot

AzureRM:

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

Az:

$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()

Az:

$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")

Az:

$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 удалены нерекомендуемые свойства.

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