Start-AzureSqlDatabaseExport对象引用未设置为对象的实例

时间:2017-01-04 22:39:07

标签: azure automation export backup workflow

我不确定如何调试它,假设它不是cmdlet的问题。我试图用自动化工作流替换自动SQL导出,但我似乎无法使Start-AzureSqlDatabaseExport工作 - 它不断收到以下警告和错误消息。

d4fc0004-0c0b-443e-ad1b-310af7fd4e2a:[localhost]:客户会话ID:' c12c92eb-acd5-424d-97dc-84c4e9c4f914-2017-01-04 19:00:23Z'

d4fc0004-0c0b-443e-ad1b-310af7fd4e2a:[localhost]:客户请求ID:' d534f5fd-0fc0-4d68-8176-7508b35aa9d8-2017-01-04 19:00:33Z'

Start-AzureSqlDatabaseExport:对象引用未设置为对象的实例。

在DBBackup:11 char:11 +     + CategoryInfo:未指定:(:) [Start-AzureSqlDatabaseExport],NullReferenceException     + FullyQualifiedErrorId:Microsoft.WindowsAzure.Commands.SqlDatabase.Database.Cmdlet.StartAzureSqlDatabaseExport

这似乎与其他一些问题相似,但似乎没有答案或不适用。我确实在Powershell环境中有类似的程序。我用Azure的自动导出替换了这个程序,现在看来这是一个糟糕的选择!我使用sqlcontext和databasename代替数据库尝试了很多变体。

我的代码中的敏感部分已替换为****:

workflow DBBackup {

param(
    [parameter(Mandatory=$true)]  
    [string] $dbcode
    )

$cred = Get-AutomationPSCredential -Name "admindbcredentials"
$VerbosePreference = "Continue"

inlineScript {

    $dbcode = $using:dbcode
    $cred = $using:cred

    if ($dbcode -eq $null) 
    {
        Write-Output "Database code must be specified"
    }
    Else
    {
        $dbcode = $dbcode.ToUpper() 

        $dbsize = 1
        $dbrestorewait = 10
        $dbserver = "kl8p7d444a"
        $stacct = $dbcode.ToLower()
        $stkey = "***storagekey***"


        Write-Verbose "DB Server '$dbserver' DB Code '$dbcode'"
        Write-Verbose "Storage Account '$stacct'"
        $url = "https://$dbserver.database.windows.net"             
        $sqlctx = New-AzureSqlDatabaseServerContext -ManageUrl $url -Credential $cred
        # $sqlctx = New-AzureSqlDatabaseServerContext -ManageUrl $url -Credential $cred
        $stctx = New-AzureStorageContext -StorageAccountName $stacct -StorageAccountKey $stkey
        $dbname = "FSUMS_" + $dbcode        
        $dt = Get-Date
        $timestamp = $dt.ToString("yyyyMMdd") + "_" + $dt.ToString("HHmmss") 
        $bkupname = $dbname + "_" + $timestamp + ".bacpac"

        $stcon = Get-AzureStorageContainer -Context $stctx -Name "backups"
        $db = Get-AzureSqlDatabase -Context $sqlctx -DatabaseName $dbname

        Write-Verbose "Backup $dbname to $bkupname in storage account $stacct"
        Start-AzureSqlDatabaseExport $sqlctx -DatabaseName $dbname -StorageContainer $stcon -BlobName $bkupname        
    }
}
}

2 个答案:

答案 0 :(得分:0)

请尝试使用New-AzureRmSqlDatabaseExport。此命令将返回导出状态对象。如果需要同步导出,可以在循环中检查“导出状态”。

答案 1 :(得分:0)

添加以下行更正了问题:

在inlineScript之前的工作流程中:

$cred = Get-AutomationPSCredential -Name "admincredentials"

    (where admincredentials was an asset with my admin login credentials)

并在inlineScript中:

Add-AzureAccount $cred
Select-AzureSubscription "My subscription"

有些Runbook似乎不需要这样,但最好总是包含它。