用于SQL Azure的Powershell脚本备份到Microsoft Azure Blob

时间:2017-04-15 18:53:23

标签: powershell azure azure-sql-database powershell-v2.0

我想使用PowerShell将SQL Azure备份到Azure Blob存储。我使用了以下脚本,但只要我尝试运行它就会弹出凭证。

我将在Windows任务计划程序中使用此脚本,那么如何将用户ID和密码放在PowerShell脚本中,以便它不会要求用户名/密码进行订阅?

$subscriptionId = "xxxxxxxxxxxxxxxxxxxxx"

Login-AzureRmAccount
Set-AzureRmContext -SubscriptionId $subscriptionId

# Database to export
$DatabaseName = "xxxxxxxxxxx"
$ResourceGroupName = "xxxxxxxxxxx"
$ServerName = "xxxxxxxxxxxx"
$serverAdmin = "xxxxxxxxxxxxxxx"
$serverPassword = "xxxxxxxxxxx" 
$securePassword = ConvertTo-SecureString -String $serverPassword -AsPlainText -Force
$creds = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $serverAdmin, $securePassword

# Generate a unique filename for the BACPAC
$bacpacFilename = $DatabaseName + (Get-Date).ToString("yyyyMMddHHmm") + ".bacpac"


# Storage account info for the BACPAC
$BaseStorageUri = "https://xxxxxxx.blob.core.windows.net/xxxxx/"
$BacpacUri = $BaseStorageUri + $bacpacFilename
$StorageKeytype = "StorageAccessKey"
$StorageKey = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"

$exportRequest = New-AzureRmSqlDatabaseExport -ResourceGroupName $ResourceGroupName -ServerName $ServerName `
  -DatabaseName $DatabaseName -StorageKeytype $StorageKeytype -StorageKey $StorageKey -StorageUri $BacpacUri `
  -AdministratorLogin $creds.UserName -AdministratorLoginPassword $creds.Password

2 个答案:

答案 0 :(得分:1)

你可能有两种方法可以做到这一点。

第一种方法是使用credential参数作为Login-AzureRMAccount调用的一部分。您可以在powershell代码中创建PSCredential,然后使用它。例如:Login-AzureRmAccount -Credential $credential

第二种,也许更安全/更安全的方法是创建服务主体,然后将证书放在有问题的机器上。您可以找到有关如何执行此操作的说明here。创建完成后,您可以将Login-AzureRMAccount-ServicePrincipal参数一起使用。有关详细信息,请参阅this link

答案 1 :(得分:1)

您需要在脚本中实现非交互式登录。只需修改您的脚本如下:

##login Azure  
$subscriptionId = "xxxxxxxxxxxxxxxxxxxxx"
$username = "<username>"
$password = "<password>"
$secstr = New-Object -TypeName System.Security.SecureString
$password.ToCharArray() | ForEach-Object {$secstr.AppendChar($_)}
$cred = new-object -typename System.Management.Automation.PSCredential -argumentlist $username, $secstr
Login-AzureRmAccount -Credential $cred
Select-AzureRmSubscription -SubscriptionId $subscriptionId

注意:您无法使用Microsoft Live帐户(例如*@hotmail.com,* @ outlook.com)以非交互方式登录Azure。