【发布时间】:2021-12-06 18:20:01
【问题描述】:
我正在尝试使用服务主体通过 PowerShell 访问和列出 Azure 存储容器的内容。我已经能够获取服务主体的令牌并使用它来访问存储帐户,但是当我运行此命令时
$iwrParams = @{
'Uri' = 'https://myaccount.blob.core.windows.net/mycontainer?restype=container&comp=list'
'UseBasicParsing' = $true
'ContentType' = 'application/xml'
'Headers' = @{
'Authorization' = "Bearer $($token.access_token)"
'x-ms-version' = '2017-11-09'
}
}
Invoke-WebRequest @iwrParams
我从这里得到一个返回,但返回的 xml 内容从不显示每个返回的 blob 的 URL。如果您查看https://docs.microsoft.com/en-us/rest/api/storageservices/enumerating-blob-resources#list-blobs-and-snapshots 的返回值,它表明对于每个 blob,它应该返回一个名称、网址和各种其他属性。当我运行上面的代码时,我得到了除了 URL 之外的所有内容。
现在真正有趣的是,如果我将容器访问权限更改为匿名公共并运行此代码,我会按预期返回 Url。
$iwrParams = @{
'Uri' = 'https://myaccount.blob.core.windows.net/mycontainer?comp=list'
'UseBasicParsing' = $true
'ContentType' = 'application/xml'
}
Invoke-WebRequest @iwrParams
老实说,问题似乎是在使用任何类型的身份验证访问时必须包含 restype=container。
我的问题是,当不使用匿名访问列出容器内容时,是否有人知道如何获取返回的每个 blob 的 URL?
我想在不借助 Az 模块的情况下做到这一点。
【问题讨论】:
标签: azure powershell azure-blob-storage