如何判断 New-AzSqlDatabaseImport 何时完成?
How to tell when New-AzSqlDatabaseImport has finished?
我正在尝试将 .bacpack 作为 DevOps 管道的一部分导入到新的 Azure 数据库中。我有一个确实执行导入的 PowerShell 脚本,但是我需要在导入完成后对数据库执行一些操作。这些失败是因为它们在导入完成之前 运行。
我正在尝试像这样检测导入的完成:
$status = New-AzSqlDatabaseImport @newDbParameters
# Wait for database to deploy
$waitCount = 0
$waitDelay = 5
while (($status | Get-AzSqlDatabaseImportExportStatus).Status -eq 'InProgress') {
$waitCount++
Write-Progress -Activity "Waiting for database creation." -Status "Count: $waitCount"
Start-Sleep $waitDelay
}
Write-Progress -Activity "Database to created." -Completed
# Output results
$result = $status | Get-AzSqlDatabaseImportExportStatus
$result
if ($result.Status -eq 'Succeeded') {
Write-Progress "Database deployed." -Completed
Write-Host "Database Deployed"
}
else
{
Write-Host "Database did not deploy '$($result.Status)'-'$($result.ErrorMessage)'"
Throw $result.ErrorMessage
}
但是这不起作用,因为状态可以是 Running, Progress = 5.00 %
这样的字符串
更新:
只是为了添加更多细节,我 运行 在我的 Microsoft 提供的发布服务器上的 Azure DevOps 上。我在 Azure PowerShell 任务 V5.* 中 运行 它。我在我的脚本中添加了几行来输出 $PSVersionTable 和 Get-Module Az.Sql。我在下面包含了记录的输出。可以看到:PowerShell是V7.0.3,Az模块是4.7.0,Az.Sql是V 2.10.0。 Running, Progress = 5.00 %
肯定来自 Status
属性 而不是 StatusMessage
属性.
2020-11-07T16:01:19.1265632Z ==============================================================================
2020-11-07T16:01:21.1720968Z Generating script.
2020-11-07T16:01:21.2849730Z ========================== Starting Command Output ===========================
2020-11-07T16:01:21.3454648Z ##[command]"C:\Program Files\PowerShell\pwsh.exe" -NoLogo -NoProfile -NonInteractive -ExecutionPolicy Unrestricted -Command ". 'D:\a\_temp\[REDACTED].ps1'"
2020-11-07T16:01:28.2383178Z Added TLS 1.2 in session.
2020-11-07T16:01:29.0267158Z ##[command]Import-Module -Name C:\Modules\az_4.7.0\Az.Accounts.9.5\Az.Accounts.psd1 -Global
2020-11-07T16:01:31.4671842Z ##[command]Clear-AzContext -Scope CurrentUser -Force -ErrorAction SilentlyContinue
2020-11-07T16:01:32.7361261Z ##[command]Clear-AzContext -Scope Process
2020-11-07T16:01:33.9818461Z ##[command]Connect-AzAccount -ServicePrincipal -Tenant *** -Credential System.Management.Automation.PSCredential -Environment AzureCloud @processScope
2020-11-07T16:01:35.6660673Z ##[command] Set-AzContext -SubscriptionId [REDACTED] -TenantId ***
2020-11-07T16:01:37.4234219Z PSVersionTable
2020-11-07T16:01:37.4322960Z
2020-11-07T16:01:37.4343833Z Name Value
2020-11-07T16:01:37.4345708Z ---- -----
2020-11-07T16:01:37.4346476Z PSVersion 7.0.3
2020-11-07T16:01:37.4349569Z PSEdition Core
2020-11-07T16:01:37.4350222Z GitCommitId 7.0.3
2020-11-07T16:01:37.4355758Z OS Microsoft Windows 10.0.14393
2020-11-07T16:01:37.4356853Z Platform Win32NT
2020-11-07T16:01:37.4378974Z PSCompatibleVersions {1.0, 2.0, 3.0, 4.0…}
2020-11-07T16:01:37.4379723Z PSRemotingProtocolVersion 2.3
2020-11-07T16:01:37.4380231Z SerializationVersion 1.1.0.1
2020-11-07T16:01:37.4380545Z WSManStackVersion 3.0
2020-11-07T16:01:37.4387506Z Az.Sql
2020-11-07T16:01:37.4675347Z
2020-11-07T16:01:37.4682595Z Name : Az.Sql
2020-11-07T16:01:37.4684105Z Path : C:\Modules\az_4.7.0\Az.Sql.10.0\Az.Sql.psm1
2020-11-07T16:01:37.4689463Z Description : Microsoft Azure PowerShell - SQL service cmdlets for Azure Resource Manager in Windows PowerShell
2020-11-07T16:01:37.4690369Z and PowerShell Core.
2020-11-07T16:01:37.4690846Z
2020-11-07T16:01:37.4691418Z For more information on SQL, please visit the following:
2020-11-07T16:01:37.4693344Z https://docs.microsoft.com/azure/sql-database/
2020-11-07T16:01:37.4694862Z Guid : f088f4ab-1b59-4836-a6e0-4e14d15800c6
2020-11-07T16:01:37.4697620Z Version : 2.10.0
2020-11-07T16:01:37.4698325Z ModuleBase : C:\Modules\az_4.7.0\Az.Sql.10.0
2020-11-07T16:01:37.4698841Z ModuleType : Script
2020-11-07T16:01:37.4699266Z PrivateData : {PSData}
2020-11-07T16:01:37.4700897Z AccessMode : ReadWrite
2020-11-07T16:01:37.4703133Z ExportedAliases : {[Disable-AzSqlServerAdvancedThreatProtection, Disable-AzSqlServerAdvancedThreatProtection],
2020-11-07T16:01:37.4704800Z [Enable-AzSqlServerAdvancedThreatProtection, Enable-AzSqlServerAdvancedThreatProtection],
2020-11-07T16:01:37.4705980Z [Get-AzSqlDatabaseLongTermRetentionPolicy, Get-AzSqlDatabaseLongTermRetentionPolicy],
2020-11-07T16:01:37.4706882Z [Get-AzSqlInstanceTDEProtector, Get-AzSqlInstanceTDEProtector]…}
2020-11-07T16:01:37.4710468Z ExportedCmdlets : {[Add-AzSqlDatabaseToFailoverGroup, Add-AzSqlDatabaseToFailoverGroup], [Add-AzSqlElasticJobStep,
2020-11-07T16:01:37.4713706Z Add-AzSqlElasticJobStep], [Add-AzSqlElasticJobTarget, Add-AzSqlElasticJobTarget],
2020-11-07T16:01:37.4714478Z [Add-AzSqlInstanceKeyVaultKey, Add-AzSqlInstanceKeyVaultKey]…}
2020-11-07T16:01:37.4715146Z ExportedFunctions : {}
2020-11-07T16:01:37.4715380Z ExportedVariables : {}
2020-11-07T16:01:37.4715705Z NestedModules : {Microsoft.Azure.PowerShell.Cmdlets.Sql}
2020-11-07T16:01:37.4716908Z
2020-11-07T16:01:39.8406335Z
2020-11-07T16:01:39.8412106Z OperationStatusLink : https://management.azure.com/subscriptions/[REDACTED]/provider
2020-11-07T16:01:39.8414296Z s/Microsoft.Sql/locations/uksouth/importExportOperationResults/[REDACTED]
2020-11-07T16:01:39.8415688Z [REDACTED]?api-version=2020-02-02-preview
2020-11-07T16:01:39.8416460Z ErrorMessage :
2020-11-07T16:01:39.8417030Z LastModifiedTime : 11/7/2020 4:01:39 PM
2020-11-07T16:01:39.8417715Z QueuedTime : 11/7/2020 4:01:38 PM
2020-11-07T16:01:39.8418302Z RequestType : Import
2020-11-07T16:01:39.8418922Z Status : Running, Progress = 5.00 %
2020-11-07T16:01:39.8419526Z StatusMessage :
2020-11-07T16:01:39.8419842Z PrivateEndpointRequestStatus : {}
2020-11-07T16:01:39.8420140Z
2020-11-07T16:01:39.8467940Z Database did not deploy 'Running, Progress = 5.00 %'-''
2020-11-07T16:01:40.7865529Z ##[error]ScriptHalted
2020-11-07T16:01:40.9680645Z ##[error]PowerShell exited with code '1'.
2020-11-07T16:01:41.9027974Z ##[section]Finishing: Deploy baseline DB from bacpac
命令 Get-AzSqlDatabaseImportExportStatus
将 return 对象 AzureSqlDatabaseImportExportStatusModel
。该对象具有一些属性。它的 属性 状态将 return Succeeded
InProgress
。它的 属性 StatusMessage 会 return progress
(比如 Running, Progress = 5.00 %
)。详情请参考here and here
例如
# Set the resource group name and location for your server
$resourceGroupName = ""
$location = ""
# Set an admin login and password for your server
$adminSqlLogin = ""
$password = ""
# Set server name - the logical server name has to be unique in the system
$serverName = ""
# The sample database name
$databaseName = "myImportedDatabase"
# The storage account name and storage container name
$storageAccountName = ""
$storageContainerName = ""
# BACPAC file name
$bacpacFilename = ""
$importRequest = New-AzSqlDatabaseImport -ResourceGroupName $resourceGroupName `
-ServerName $serverName `
-DatabaseName $databaseName `
-DatabaseMaxSizeBytes "262144000" `
-StorageKeyType "StorageAccessKey" `
-StorageKey $(Get-AzStorageAccountKey -ResourceGroupName $resourceGroupName -StorageAccountName $storageAccountName).Value[0] `
-StorageUri "https://$storageaccountname.blob.core.windows.net/$storageContainerName/$bacpacFilename" `
-Edition "Standard" `
-ServiceObjectiveName "S3" `
-AdministratorLogin "$adminSqlLogin" `
-AdministratorLoginPassword $(ConvertTo-SecureString -String $password -AsPlainText -Force)
# Check import status and wait for the import to complete
# Wait for database to deploy
$waitDelay = 5
while (($importRequest | Get-AzSqlDatabaseImportExportStatus).Status -eq 'InProgress') {
($importRequest | Get-AzSqlDatabaseImportExportStatus).StatusMessage
Start-Sleep $waitDelay
}
# Output results
$result = $importRequest | Get-AzSqlDatabaseImportExportStatus
$result
if ($result.Status -eq 'Succeeded') {
Write-Host "Database Deployed"
}
else
{
Write-Host "Database did not deploy '$($result.Status)'-'$($result.ErrorMessage)'"
Throw $result.ErrorMessage
}
这似乎是 Az.Sql 模块的 2.10.0 版中引入的问题。我能够通过将 Azure DevOps 任务上的 Preferred Azure PowerShell Version
字段设置为 4.6.0 来解决此问题。此版本的 Az 模块包含 Az.Sql.
版本 2.9.1
显然这是 fixed in Azure Powershell v5.3.0,虽然我没有亲自检查过。
我正在尝试将 .bacpack 作为 DevOps 管道的一部分导入到新的 Azure 数据库中。我有一个确实执行导入的 PowerShell 脚本,但是我需要在导入完成后对数据库执行一些操作。这些失败是因为它们在导入完成之前 运行。
我正在尝试像这样检测导入的完成:
$status = New-AzSqlDatabaseImport @newDbParameters
# Wait for database to deploy
$waitCount = 0
$waitDelay = 5
while (($status | Get-AzSqlDatabaseImportExportStatus).Status -eq 'InProgress') {
$waitCount++
Write-Progress -Activity "Waiting for database creation." -Status "Count: $waitCount"
Start-Sleep $waitDelay
}
Write-Progress -Activity "Database to created." -Completed
# Output results
$result = $status | Get-AzSqlDatabaseImportExportStatus
$result
if ($result.Status -eq 'Succeeded') {
Write-Progress "Database deployed." -Completed
Write-Host "Database Deployed"
}
else
{
Write-Host "Database did not deploy '$($result.Status)'-'$($result.ErrorMessage)'"
Throw $result.ErrorMessage
}
但是这不起作用,因为状态可以是 Running, Progress = 5.00 %
更新:
只是为了添加更多细节,我 运行 在我的 Microsoft 提供的发布服务器上的 Azure DevOps 上。我在 Azure PowerShell 任务 V5.* 中 运行 它。我在我的脚本中添加了几行来输出 $PSVersionTable 和 Get-Module Az.Sql。我在下面包含了记录的输出。可以看到:PowerShell是V7.0.3,Az模块是4.7.0,Az.Sql是V 2.10.0。 Running, Progress = 5.00 %
肯定来自 Status
属性 而不是 StatusMessage
属性.
2020-11-07T16:01:19.1265632Z ==============================================================================
2020-11-07T16:01:21.1720968Z Generating script.
2020-11-07T16:01:21.2849730Z ========================== Starting Command Output ===========================
2020-11-07T16:01:21.3454648Z ##[command]"C:\Program Files\PowerShell\pwsh.exe" -NoLogo -NoProfile -NonInteractive -ExecutionPolicy Unrestricted -Command ". 'D:\a\_temp\[REDACTED].ps1'"
2020-11-07T16:01:28.2383178Z Added TLS 1.2 in session.
2020-11-07T16:01:29.0267158Z ##[command]Import-Module -Name C:\Modules\az_4.7.0\Az.Accounts.9.5\Az.Accounts.psd1 -Global
2020-11-07T16:01:31.4671842Z ##[command]Clear-AzContext -Scope CurrentUser -Force -ErrorAction SilentlyContinue
2020-11-07T16:01:32.7361261Z ##[command]Clear-AzContext -Scope Process
2020-11-07T16:01:33.9818461Z ##[command]Connect-AzAccount -ServicePrincipal -Tenant *** -Credential System.Management.Automation.PSCredential -Environment AzureCloud @processScope
2020-11-07T16:01:35.6660673Z ##[command] Set-AzContext -SubscriptionId [REDACTED] -TenantId ***
2020-11-07T16:01:37.4234219Z PSVersionTable
2020-11-07T16:01:37.4322960Z
2020-11-07T16:01:37.4343833Z Name Value
2020-11-07T16:01:37.4345708Z ---- -----
2020-11-07T16:01:37.4346476Z PSVersion 7.0.3
2020-11-07T16:01:37.4349569Z PSEdition Core
2020-11-07T16:01:37.4350222Z GitCommitId 7.0.3
2020-11-07T16:01:37.4355758Z OS Microsoft Windows 10.0.14393
2020-11-07T16:01:37.4356853Z Platform Win32NT
2020-11-07T16:01:37.4378974Z PSCompatibleVersions {1.0, 2.0, 3.0, 4.0…}
2020-11-07T16:01:37.4379723Z PSRemotingProtocolVersion 2.3
2020-11-07T16:01:37.4380231Z SerializationVersion 1.1.0.1
2020-11-07T16:01:37.4380545Z WSManStackVersion 3.0
2020-11-07T16:01:37.4387506Z Az.Sql
2020-11-07T16:01:37.4675347Z
2020-11-07T16:01:37.4682595Z Name : Az.Sql
2020-11-07T16:01:37.4684105Z Path : C:\Modules\az_4.7.0\Az.Sql.10.0\Az.Sql.psm1
2020-11-07T16:01:37.4689463Z Description : Microsoft Azure PowerShell - SQL service cmdlets for Azure Resource Manager in Windows PowerShell
2020-11-07T16:01:37.4690369Z and PowerShell Core.
2020-11-07T16:01:37.4690846Z
2020-11-07T16:01:37.4691418Z For more information on SQL, please visit the following:
2020-11-07T16:01:37.4693344Z https://docs.microsoft.com/azure/sql-database/
2020-11-07T16:01:37.4694862Z Guid : f088f4ab-1b59-4836-a6e0-4e14d15800c6
2020-11-07T16:01:37.4697620Z Version : 2.10.0
2020-11-07T16:01:37.4698325Z ModuleBase : C:\Modules\az_4.7.0\Az.Sql.10.0
2020-11-07T16:01:37.4698841Z ModuleType : Script
2020-11-07T16:01:37.4699266Z PrivateData : {PSData}
2020-11-07T16:01:37.4700897Z AccessMode : ReadWrite
2020-11-07T16:01:37.4703133Z ExportedAliases : {[Disable-AzSqlServerAdvancedThreatProtection, Disable-AzSqlServerAdvancedThreatProtection],
2020-11-07T16:01:37.4704800Z [Enable-AzSqlServerAdvancedThreatProtection, Enable-AzSqlServerAdvancedThreatProtection],
2020-11-07T16:01:37.4705980Z [Get-AzSqlDatabaseLongTermRetentionPolicy, Get-AzSqlDatabaseLongTermRetentionPolicy],
2020-11-07T16:01:37.4706882Z [Get-AzSqlInstanceTDEProtector, Get-AzSqlInstanceTDEProtector]…}
2020-11-07T16:01:37.4710468Z ExportedCmdlets : {[Add-AzSqlDatabaseToFailoverGroup, Add-AzSqlDatabaseToFailoverGroup], [Add-AzSqlElasticJobStep,
2020-11-07T16:01:37.4713706Z Add-AzSqlElasticJobStep], [Add-AzSqlElasticJobTarget, Add-AzSqlElasticJobTarget],
2020-11-07T16:01:37.4714478Z [Add-AzSqlInstanceKeyVaultKey, Add-AzSqlInstanceKeyVaultKey]…}
2020-11-07T16:01:37.4715146Z ExportedFunctions : {}
2020-11-07T16:01:37.4715380Z ExportedVariables : {}
2020-11-07T16:01:37.4715705Z NestedModules : {Microsoft.Azure.PowerShell.Cmdlets.Sql}
2020-11-07T16:01:37.4716908Z
2020-11-07T16:01:39.8406335Z
2020-11-07T16:01:39.8412106Z OperationStatusLink : https://management.azure.com/subscriptions/[REDACTED]/provider
2020-11-07T16:01:39.8414296Z s/Microsoft.Sql/locations/uksouth/importExportOperationResults/[REDACTED]
2020-11-07T16:01:39.8415688Z [REDACTED]?api-version=2020-02-02-preview
2020-11-07T16:01:39.8416460Z ErrorMessage :
2020-11-07T16:01:39.8417030Z LastModifiedTime : 11/7/2020 4:01:39 PM
2020-11-07T16:01:39.8417715Z QueuedTime : 11/7/2020 4:01:38 PM
2020-11-07T16:01:39.8418302Z RequestType : Import
2020-11-07T16:01:39.8418922Z Status : Running, Progress = 5.00 %
2020-11-07T16:01:39.8419526Z StatusMessage :
2020-11-07T16:01:39.8419842Z PrivateEndpointRequestStatus : {}
2020-11-07T16:01:39.8420140Z
2020-11-07T16:01:39.8467940Z Database did not deploy 'Running, Progress = 5.00 %'-''
2020-11-07T16:01:40.7865529Z ##[error]ScriptHalted
2020-11-07T16:01:40.9680645Z ##[error]PowerShell exited with code '1'.
2020-11-07T16:01:41.9027974Z ##[section]Finishing: Deploy baseline DB from bacpac
命令 Get-AzSqlDatabaseImportExportStatus
将 return 对象 AzureSqlDatabaseImportExportStatusModel
。该对象具有一些属性。它的 属性 状态将 return Succeeded
InProgress
。它的 属性 StatusMessage 会 return progress
(比如 Running, Progress = 5.00 %
)。详情请参考here and here
例如
# Set the resource group name and location for your server
$resourceGroupName = ""
$location = ""
# Set an admin login and password for your server
$adminSqlLogin = ""
$password = ""
# Set server name - the logical server name has to be unique in the system
$serverName = ""
# The sample database name
$databaseName = "myImportedDatabase"
# The storage account name and storage container name
$storageAccountName = ""
$storageContainerName = ""
# BACPAC file name
$bacpacFilename = ""
$importRequest = New-AzSqlDatabaseImport -ResourceGroupName $resourceGroupName `
-ServerName $serverName `
-DatabaseName $databaseName `
-DatabaseMaxSizeBytes "262144000" `
-StorageKeyType "StorageAccessKey" `
-StorageKey $(Get-AzStorageAccountKey -ResourceGroupName $resourceGroupName -StorageAccountName $storageAccountName).Value[0] `
-StorageUri "https://$storageaccountname.blob.core.windows.net/$storageContainerName/$bacpacFilename" `
-Edition "Standard" `
-ServiceObjectiveName "S3" `
-AdministratorLogin "$adminSqlLogin" `
-AdministratorLoginPassword $(ConvertTo-SecureString -String $password -AsPlainText -Force)
# Check import status and wait for the import to complete
# Wait for database to deploy
$waitDelay = 5
while (($importRequest | Get-AzSqlDatabaseImportExportStatus).Status -eq 'InProgress') {
($importRequest | Get-AzSqlDatabaseImportExportStatus).StatusMessage
Start-Sleep $waitDelay
}
# Output results
$result = $importRequest | Get-AzSqlDatabaseImportExportStatus
$result
if ($result.Status -eq 'Succeeded') {
Write-Host "Database Deployed"
}
else
{
Write-Host "Database did not deploy '$($result.Status)'-'$($result.ErrorMessage)'"
Throw $result.ErrorMessage
}
这似乎是 Az.Sql 模块的 2.10.0 版中引入的问题。我能够通过将 Azure DevOps 任务上的 Preferred Azure PowerShell Version
字段设置为 4.6.0 来解决此问题。此版本的 Az 模块包含 Az.Sql.
显然这是 fixed in Azure Powershell v5.3.0,虽然我没有亲自检查过。