2017-01-04 11 views
1

Я не уверен, как отлаживать это, считая, что это не проблема с командлетом. Я пытаюсь заменить автоматизированный экспорт SQL на рабочий процесс автоматизации, но я не могу заставить Start-AzureSqlDatabaseExport работать - он продолжает получать следующие предупреждения и сообщения об ошибках.Start-AzureSqlDatabaseExport Ссылка на объект не установлена ​​в экземпляр объекта

d4fc0004-0c0b-443e-ad1b-310af7fd4e2a: [локальный]: Id сеанса клиента: 'c12c92eb-acd5-424d-97dc-84c4e9c4f914-2017-01-04 19: 00: 23Z'

d4fc0004 -0c0b-443e-ad1b-310af7fd4e2a: [локальный]: Запрос клиента Id: 'd534f5fd-0fc0-4d68-8176-7508b35aa9d8-2017-01-04 19: 00: 33Z'

Start-AzureSqlDatabaseExport: Object ссылка не установлена ​​в экземпляр объекта.

В DBBackup: 11 символ: 11 + + CategoryInfo: NotSpecified: (:) [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   
    } 
} 
} 

ответ

0

New-AzureRmSqlDatabaseExport Попробуйте вместо этого. Эта команда вернет объект статуса экспорта. Если вы хотите синхронный экспорт, вы можете проверить «статус экспорта» в цикле.

+2

Это говорит мне, что это не признает. Я не перешел на использование групп ресурсов - может быть, проблема? Я просто использовал группу ресурсов по умолчанию. Сообщение об ошибке: New-AzureRmSqlDatabaseExport: Термин «Нью-AzureRmSqlDatabaseExport» не распознается как имя командлета, функции, файла сценария или исполняемой программой. Проверьте правильность написания имени или если путь был включен, проверьте правильность пути и повторите попытку. – fsbf

+0

Проверьте, установлен ли модуль AzureRM. Get-Module -ListAvailable AzureRM *. Если не. Устанавливайте модуль AzureRM и Install-AzureRM. Повторите попытку New-AzureRmSqlDatabaseExport –

+1

Я пытаюсь сделать это из Automation на этом этапе. Я вижу, что версия на моей локальной PowerShell для AzureRM.Sql - 2.4.0, но это 1.0.3, когда я запускаю ее из Automation. – fsbf

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" 

Некоторые нетривиальные, кажется, не нуждается в этом , но, вероятно, лучше всего его включать.

+0

Вы всегда должны быть аутентифицированы, когда делаете какие-либо манипуляции с ресурсами Azure. В противном случае Azure не знает, кто вы, и разрешено ли вам что-либо делать. –

+0

Azure Automation предоставляет учетные данные по умолчанию и подписку, но лучше не полагаться на это, я думаю. В моем случае он иногда выбирал неправильную подписку, без видимых причин (это не значение по умолчанию). – fsbf