你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

Az 1.0.0 的中断性变更

本文档详述了从 AzureRM 6.x 到新 Az 模块(1.x 及更高版本)的变更。 可以通过目录了解完整的迁移路径,包括特定于模块的可能会影响脚本的变更。

有关如何开始从 AzureRM 迁移到 Az 的常规建议,请参阅开始从 AzureRM 迁移到 Az

重要

从 Az 1.0.0 到 Az 2.0.0 也存在中断性变更。 按照此指南从 AzureRM 更新到 Az 以后,请参阅 Az 2.0.0 中断性变更,了解是否需要进行其他更改。

目录

常规重大更改

此部分详述在重新设计 Az 模块过程中所做的常规中断性变更。

Cmdlet 名词前缀更改

在 AzureRM 模块中,cmdlet 使用了 AzureRMAzure 作为名词前缀。 Az 简化并规范化了 cmdlet 名称,使所有 cmdlet 都使用“Az”作为其 cmdlet 名词前缀。 例如:

Get-AzureRMVM
Get-AzureKeyVaultSecret

已更改为:

Get-AzVM
Get-AzKeyVaultSecret

为了更简单地转换到这些新的 cmdlet 名称,Az 引入了两个新的 cmdlet:Enable-AzureRmAliasDisable-AzureRmAliasEnable-AzureRmAlias 为 AzureRM 中较旧的 cmdlet 名称创建别名,这些旧名映射到较新的 Az cmdlet 名称。 将 -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 会话启用别名,因此在执行此 cmdlet 后,像这样的脚本根本不需要进行更改:

Get-AzureRmStorageAccount | Get-AzureStorageContainer | Get-AzureStorageBlob

若要获得有关别名 cmdlet 用法的完整详细信息,请查看 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.DataFactories Az.DataFactory
AzureRM.DataFactoryV2 Az.DataFactory
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

模块名称更改意味着使用 #RequiresImport-Module 来加载特定模块的任何脚本都需要更改为使用新模块。 对于其中的 cmdlet 后缀尚未更改的模块,这意味着,虽然模块名称已更改,但指示操作空间的后缀尚未更改。

迁移 #Requires 和 Import-Module 语句

使用 #RequiresImport-Module 来声明对 AzureRM 模块的依赖关系的脚本必须更新为使用新的模块名称。 例如:

#Requires -Module AzureRM.Compute

应当更改为:

#Requires -Module Az.Compute

对于 Import-Module

Import-Module -Name AzureRM.Compute

应当更改为:

Import-Module -Name Az.Compute

迁移完全限定的 Cmdlet 调用

使用模块限定的 cmdlet 调用的脚本,例如:

AzureRM.Compute\Get-AzureRmVM

必须更改为使用新的模块和 cmdlet 名称:

Az.Compute\Get-AzVM

迁移模块清单依赖关系

通过模块清单 (.psd1) 文件表示对 AzureRM 模块的依赖关系的模块需要更新其 RequiredModules 部分中的模块名称:

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

必须更改为:

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

删除的模块

以下模块已删除:

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

不再主动支持这些服务的工具。 建议客户尽快在方便的时候迁移到替代服务。

Windows PowerShell 5.1 和 .NET 4.7.2

将 Az 与 Windows 版 PowerShell 5.1 配合使用需要安装 .NET Framework 4.7.2。 使用 PowerShell Core 6.x 或更高版本不需要 .NET Framework。

暂时删除了使用 PSCredential 的用户登录

由于 .NET Standard 的身份验证流发生更改,我们暂时删除了通过 PSCredential 进行的用户登录。 将在 2019 年 1 月 15 日的 Windows 版 PowerShell 5.1 中重新引入此功能。 此 GitHub 问题中详细讨论了这方面的内容。

默认设备代码登录替换了 Web 浏览器提示

由于 .NET Standard 的身份验证流发生更改,我们在交互式登录期间使用设备登录作为默认登录流。 将在 2019 年 1 月 15 日的 Windows 版 PowerShell 5.1 中重新引入基于 Web 浏览器的登录作为默认登录流。 到那时,用户将能够使用一个 Switch 参数来选择设备登录。

模块中断性变更

此部分详述单个模块和 cmdlet 的具体中断性变更。

Az.ApiManagement(以前的 AzureRM.ApiManagement)

  • 删除了以下 cmdlet:
    • New-AzureRmApiManagementHostnameConfiguration
    • Set-AzureRmApiManagementHostnames
    • Update-AzureRmApiManagementDeployment
    • Import-AzureRmApiManagementHostnameCertificate
    • 请改用 Set-AzApiManagement cmdlet 来设置这些属性
  • 删除了以下属性:
    • PsApiManagementContext 中删除了 PsApiManagementHostnameConfiguration 类型的属性 PortalHostnameConfigurationProxyHostnameConfigurationManagementHostnameConfigurationScmHostnameConfiguration。 请改用 PsApiManagementCustomHostNameConfiguration 类型的 PortalCustomHostnameConfigurationProxyCustomHostnameConfigurationManagementCustomHostnameConfigurationScmCustomHostnameConfiguration
    • 从 PsApiManagementContext 中删除了属性 StaticIPs。 此属性已拆分为 PublicIPAddressesPrivateIPAddresses
    • 从 New-AzureApiManagementVirtualNetwork cmdlet 中删除了必需属性 Location

Az.Billing(以前的 AzureRM.Billing、AzureRM.Consumption 和 AzureRM.UsageAggregates)

  • Get-AzConsumptionUsageDetail cmdlet 中删除了 InvoiceName 参数。 脚本将需要为发票使用其他标识参数。

Az.CognitiveServices(以前的 AzureRM.CognitiveServices)

  • Get-AzCognitiveServicesAccountSkus cmdlet 中删除了 GetSkusWithAccountParamSetName 参数集。 必须通过帐户类型和位置来获取 SKU,而非使用资源组名称和帐户名称。

Az.Compute(以前的 AzureRM.Compute)

  • PSVirtualMachinePSVirtualMachineScaleSet 对象中的 Identity 属性中删除了 IdentityIds。脚本不应当再使用此字段的值来做出处理决策。
  • PSVirtualMachineScaleSetVM 对象的 InstanceView 属性的类型已从 VirtualMachineInstanceView 更改为 VirtualMachineScaleSetVMInstanceView
  • UpgradePolicy 属性中删除了 AutoOSUpgradePolicyAutomaticOSUpgrade 属性
  • PSSnapshotUpdate 对象中的 Sku 属性的类型已从 DiskSku 更改为 SnapshotSku
  • VmScaleSetVMParameterSet 已从 Add-AzVMDataDisk cmdlet 中删除,你不再能够将数据磁盘单独添加到规模集 VM。

Az.DataFactory(以前的 AzureRM.DataFactories 和 AzureRM.DataFactoryV2)

  • GatewayName 参数在 New-AzDataFactoryEncryptValue cmdlet 中已成为必需参数
  • 删除了 New-AzDataFactoryGatewayKey cmdlet
  • Get-AzDataFactoryV2ActivityRun cmdlet 中删除了 LinkedServiceName 参数。脚本不应当再使用此字段的值来做出处理决策。

Az.DataLakeAnalytics(以前的 AzureRM.DataLakeAnalytics)

  • 删除了弃用的 cmdlet:New-AzDataLakeAnalyticsCatalogSecretRemove-AzDataLakeAnalyticsCatalogSecretSet-AzDataLakeAnalyticsCatalogSecret

Az.DataLakeStore(以前的 AzureRM.DataLakeStore)

  • 以下 cmdlet 已将 Encoding 参数的类型从 FileSystemCmdletProviderEncoding 更改为 System.Text.Encoding。 此更改删除了编码值 StringOem。 以前的所有其他编码值保留未变。

    • New-AzureRmDataLakeStoreItem
    • Add-AzureRmDataLakeStoreItemContent
    • Get-AzureRmDataLakeStoreItemContent
  • New-AzDataLakeStoreAccountSet-AzDataLakeStoreAccount cmdlet 中删除了弃用的 Tags 属性别名

    使用以下内容的脚本

    New-AzureRMDataLakeStoreAccount -Tags @{TagName="TagValue"}
    

    应当更改为

    New-AzDataLakeStoreAccount -Tag @{TagName="TagValue"}
    
  • PSDataLakeStoreAccountBasic 对象中删除了弃用的属性 IdentityEncryptionStateEncryptionProvisioningStateEncryptionConfigFirewallStateFirewallRulesVirtualNetworkRulesTrustedIdProviderStateTrustedIdProvidersDefaultGroupNewTierCurrentTierFirewallAllowAzureIps。 使用从 Get-AzDataLakeStoreAccount 返回的 PSDatalakeStoreAccount 的任何脚本都不应当引用这些属性。

Az.KeyVault(以前的 AzureRM.KeyVault)

  • PSKeyVaultKeyAttributesPSKeyVaultKeyIdentityItemPSKeyVaultSecretAttributes 对象中删除了 PurgeDisabled 属性。脚本不再应该引用 PurgeDisabled 属性来做出处理决策。

Az.Media(以前的 AzureRM.Media)

  • New-AzMediaService cmdlet 中删除了弃用的 Tags 属性别名。使用以下内容的脚本

    New-AzureRMMediaService -Tags @{TagName="TagValue"}
    

    应当更改为

    New-AzMediaService -Tag @{TagName="TagValue"}
    

Az.Monitor(以前的 AzureRM.Insights)

  • Set-AzDiagnosticSetting cmdlet 中删除了复数名称 CategoriesTimegrains 参数并将其替换为单数参数名称。使用以下内容的脚本

    Set-AzureRmDiagnosticSetting -Timegrains PT1M -Categories Category1, Category2
    

    应当更改为

    Set-AzDiagnosticSetting -Timegrain PT1M -Category Category1, Category2
    

Az.Network(以前的 AzureRM.Network)

  • Get-AzServiceEndpointPolicyDefinition cmdlet 中删除了弃用的 ResourceId 参数
  • PSVirtualNetwork 对象中删除了弃用的 EnableVmProtection 属性
  • 删除了弃用的 Set-AzVirtualNetworkGatewayVpnClientConfig cmdlet

脚本不应当再根据这些字段的值做出处理决策。

Az.OperationalInsights(以前的 AzureRM.OperationalInsights)

  • 删除了 Get-AzOperationalInsightsDataSource 的默认参数集,ByWorkspaceNameByKind 已成为默认参数集

    使用以下内容列出了数据源的脚本

    Get-AzureRmOperationalInsightsDataSource
    

    应当更改为指定一个种类

    Get-AzOperationalInsightsDataSource -Kind AzureActivityLog
    

Az.RecoveryServices(以前的 AzureRM.RecoveryServices、AzureRM.RecoveryServices.Backup 和 AzureRM.RecoveryServices.SiteRecovery)

  • New/Set-AzRecoveryServicesAsrPolicy cmdlet 中删除了 Encryption 参数
  • 通过 Restore-AzRecoveryServicesBackupItem cmdlet 执行托管磁盘还原时,现在必须提供 TargetStorageAccountName 参数
  • 删除了 Restore-AzRecoveryServicesBackupItem cmdlet 中的 StorageAccountNameStorageAccountResourceGroupName 参数
  • 删除了 Get-AzRecoveryServicesBackupContainer cmdlet 中的 Name 参数

Az.Resources(以前的 AzureRM.Resources)

  • New/Set-AzPolicyAssignment cmdlet 中删除了 Sku 参数

  • New-AzADServicePrincipalNew-AzADSpCredential cmdlet 中删除了 Password 参数。密码将自动生成,提供了密码的脚本:

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

    应当更改为从输出中检索密码:

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

Az.ServiceFabric(以前的 AzureRM.ServiceFabric)

  • 以下 cmdlet 返回类型已更改:
    • ApplicationHealthPolicy 类型的属性 ServiceTypeHealthPolicies 已删除。
    • ClusterUpgradeDeltaHealthPolicy 类型的属性 ApplicationHealthPolicies 已删除。
    • ClusterUpgradePolicy 类型的属性 OverrideUserUpgradePolicy 已删除。
    • 这些更改影响以下 cmdlet:
      • Add-AzServiceFabricClientCertificate
      • Add-AzServiceFabricClusterCertificate
      • Add-AzServiceFabricNode
      • Add-AzServiceFabricNodeType
      • Get-AzServiceFabricCluster
      • Remove-AzServiceFabricClientCertificate
      • Remove-AzServiceFabricClusterCertificate
      • Remove-AzServiceFabricNode
      • Remove-AzServiceFabricNodeType
      • Remove-AzServiceFabricSetting
      • Set-AzServiceFabricSetting
      • Set-AzServiceFabricUpgradeType
      • Update-AzServiceFabricDurability
      • Update-AzServiceFabricReliability

Az.Sql(以前的 AzureRM.Sql)

  • Set-AzSqlDatabaseBackupLongTermRetentionPolicy cmdlet 中删除了 StateResourceId 参数
  • 删除了弃用的 cmdlet:Get/Set-AzSqlServerBackupLongTermRetentionVaultGet/Start/Stop-AzSqlServerUpgradeGet/Set-AzSqlDatabaseAuditingPolicyGet/Set-AzSqlServerAuditingPolicyRemove-AzSqlDatabaseAuditingRemove-AzSqlServerAuditing
  • Get-AzSqlDatabaseBackupLongTermRetentionPolicy cmdlet 中删除了弃用的参数 Current
  • Get-AzSqlServerServiceObjective cmdlet 中删除了弃用的参数 DatabaseName
  • Set-AzSqlDatabaseDataMaskingPolicy cmdlet 中删除了弃用的参数 PrivilegedLogin

Az.Storage(以前的 Azure.Storage 和 AzureRM.Storage)

  • 为了支持仅使用存储帐户名称创建 Oauth 存储上下文,默认参数集已更改为 OAuthParameterSet
    • 示例: $ctx = New-AzureStorageContext -StorageAccountName $accountName
  • Location 参数在 Get-AzStorageUsage cmdlet 中已成为必需参数
  • 存储 API 方法现在使用基于任务的异步模式 (TAP),而非使用同步 API 调用。 以下示例演示新的异步命令:

Blob 快照

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

共享快照

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

撤消删除软删除的 Blob

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)

  • PSAppServicePlanPSCertificatePSCloningInfoPSSite 对象中删除了弃用的属性