我想使用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
答案 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。