使用 New-AzSqlDatabaseExport 在 powershell 中导出 azure 数据库并不总是 return OperationStatusLink,导致异常

Exporting azure database in powershell with New-AzSqlDatabaseExport does not always return the OperationStatusLink, resulting in an exception

我正在编写一个 powershell 脚本,使用 New-AzSqlDatabaseExport 命令将 Azure 数据库导出到 bacpac 文件(遵循文档 here.

当我运行 powershell 脚本时,得到的结果不一致。当我打开一个新的 powershell window 和 运行 导出数据库脚本时,一切都如预期的那样 运行,我得到了一个 OperationStatusLink,所以我可以检查导出的进度进步。但是,一旦导出完成,如果我在同一个 window 中第二次尝试 运行 运行 powershell 脚本,导出将不会 return OperationStatusLink。这将导致 Get-AzSqlDatabaseImportExportStatus 失败并出现以下异常:无法将参数绑定到参数 'OperationStatusLink' 因为它为 null。

以下是重现的步骤,以及一段 powershell 脚本。任何关于我可以尝试确保 New-AzSqlDatabaseExport 总是 returns OperationStatusLink 的建议将不胜感激。

重现步骤:

  1. 打开powershellwindow

  2. 登录到 Azure

  3. 运行 将数据库导出到 bacpac 的脚本

    预期结果:导出成功并提供 OperationStatusLink

    实际结果:导出成功并提供OperationStatusLink

  4. 运行 将数据库导出到 bacpac 的脚本

    预期结果:导出成功并提供 OperationStatusLink

    实际结果:导出成功,未提供OperationStatusLink

Powershell 脚本:

Connect-AzAccount
Select-AzSubscription -SubscriptionName 'subscription name'

BackupAzureDatabase.ps1 `
 -DatabaseName "testDB" `
 -ResourceGroupName "group1" `
 -ServerName "testserver" `
 -serverAdmin "admin" `
 -serverPassword "********" `

BackupAzureDatabase.ps1:

Param(
    [string][Parameter(Mandatory=$true)] $DatabaseName,
    [string][Parameter(Mandatory=$true)] $ResourceGroupName,
    [string][Parameter(Mandatory=$true)] $ServerName,
    [string][Parameter(Mandatory=$true)] $ServerAdmin,
    [string][Parameter(Mandatory=$true)] $ServerPassword,
)
Process{
    # some code to get the storage info and credentials

    $ExportRequest = New-AzSqlDatabaseExport `
            -ResourceGroupName $ResourceGroupName `
            -ServerName $ServerName `
            -DatabaseName $DatabaseName `
            -StorageKeytype $StorageKeytype `
            -StorageKey $PrimaryKey `
            -StorageUri $BacpacUri `
            -AdministratorLogin $Creds.UserName `
            -AdministratorLoginPassword $Creds.Password

     $ExportStatus = Get-AzSqlDatabaseImportExportStatus `
                -OperationStatusLink $ExportRequest.OperationStatusLink

     # Get-AzSqlDatabaseImportExportStatus throws an exception, since OperationStatusLink is empty/null most of the time
}

这似乎是 2.10.0 中引入的 Az.Sql 模块的回归,它在当前版本 (2.11.0) 中仍然有效

症状: 启动导出操作时引发以下异常:New-AzSqlDatabaseExport:缺少 ImportExport 操作所需的 'networkIsolation' 参数。

问题: 这应该是可选参数,参数名称不正确,应该是-UseNetworkIsolation。

解决方法: 将您的脚本定位到模块的旧版本,2.9.1 似乎没问题。

长期解决方案: 修复已经提交,它应该在模块的下一个版本中可用。

信息来源: https://github.com/Azure/azure-powershell/issues/13097

更新2020-11-04 该模块的最新版本已包含此修复程序。 (2.11.1) https://www.powershellgallery.com/packages/Az/5.0.0