通过powershell自动下载存储在Azure上的SQL备份

通过powershell自动下载存储在Azure上的SQL备份,azure,powershell,Azure,Powershell,我正在尝试创建一个脚本,该脚本将在使用docker构建容器之前从Azure下载SQL备份。我使用以下说明创建了服务主体: 我正在使用以下代码尝试启动下载,但失败,出现以下错误: $tenantID = '6ed674z5-my tenant ID-802730b05737' $passwd = ConvertTo-SecureString 'x43my long passwordR69' -AsPlainText -Force $pscredential = New-Object System.

我正在尝试创建一个脚本,该脚本将在使用docker构建容器之前从Azure下载SQL备份。我使用以下说明创建了服务主体:

我正在使用以下代码尝试启动下载,但失败,出现以下错误:

$tenantID = '6ed674z5-my tenant ID-802730b05737'
$passwd = ConvertTo-SecureString 'x43my long passwordR69' -AsPlainText -Force
$pscredential = New-Object System.Management.Automation.PSCredential('079054cd-my application ID-0b19d8ar6e77', $passwd)
Connect-AzAccount -ServicePrincipal -Credential $pscredential -TenantId $tenantId

$containerName = "mycontainer"
$location = "westus2"
$resourceGroup = "myresourcegroup"
$storageAccount = Get-AzStorageAccount
$ctx = $storageAccount.Context
Get-AzStorageBlob -Container $ContainerName -Context $ctx |  Get-AzStorageblobcontent -Destination ".\dbase\backups" -Force
错误:

Get-AzStorageAccount : 'this.Client.SubscriptionId' cannot be null.
At C:\dev\thcguard\launch.ps1:9 char:19
+ $storageAccount = Get-AzStorageAccount
+                   ~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : CloseError: (:) [Get-AzStorageAccount], ValidationException
    + FullyQualifiedErrorId : Microsoft.Azure.Commands.Management.Storage.GetAzureStorageAccountCommand

我哪里做错了?如果我只使用Connect AzaAccount并手动登录下载代码,那么下载代码会起作用。

服务主体没有默认订阅。 使用用户帐户进行连接时,
Connect AzAccount
fectch默认订阅。在您的情况下,需要指定要连接到的订阅

您可以这样调整代码:

$tenantId = "{my-tenant-id}"
$subscriptionId = "{my-subscription-id}"
$applicationId = "{my-application-id}"
$password = ConvertTo-SecureString "{my-password}" -AsPlainText -Force
$psCredential = New-Object System.Management.Automation.PSCredential($applicationId, $password)
Connect-AzAccount -ServicePrincipal -Credential $psCredential -TenantId $tenantId -SubscriptionId $subscriptionId
确保您的服务负责人可以访问您的存储帐户。您可以使用存储帐户的
访问控制(IAM)
刀片服务器为存储帐户分配权限:


我查看了存储blob,它显示身份验证方法:访问密钥(切换到Azure AD用户帐户)。我有一种预感,解决这个问题的一种方法可能是切换到AD用户帐户,但我首先需要access key方法来执行SQL备份…$storageAccount的输出是什么?我不知道如何转储变量的内容,但由于它是使用Get-AzStorageAccount设置的,所以可能只是一个错误。如果我使用just Connect AzAccount手动登录,则此代码可以正常工作在脚本后面添加一行:$StorageAccount在
Connect AzAccount
行之后,添加此行
Set-AzContext-SubscriptionId“my azure subscription id”-TenantId“my tenant id”
越来越近:连接AzAccount:提供的帐户{accountID?}无权访问订阅ID“{mysubscriptionID}”。请尝试使用不同的凭据或不同的订阅ID登录。我从应用程序注册页面获取了该帐户ID。哦,好的,因此您需要向服务主体授予访问订阅的权限,或者至少授予blob存储的权限。我不知道这意味着什么,也不知道如何操作:)我正在测试Azure所以我还不知道我在做什么。谢谢。我已经验证了服务主体可以作为存储blob读取器角色访问。我仍在获取连接AzaAccount:提供的帐户{my applicationID}无法访问订阅ID“{my subscriptionID}”。请尝试使用其他凭据或其他订阅ID登录。()