You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何仅使用SAS令牌通过PowerShell Az cmdlet上传文件到Azure Blob存储

问题1答复

目前Az.Storage模块没有原生支持直接传入完整SAS URI完成上传的Cmdlet,所有存储操作类Cmdlet均依赖StorageContext上下文对象完成鉴权,你之前选择的先解析参数构造上下文、再调用Set-AzStorageBlobContent的方案是符合Az模块设计逻辑的最优路径。

问题2答复

有官方的.NET类可以直接解析SAS URI,不需要自行编写正则表达式,容错性远高于自定义正则匹配,相关类可以直接在PowerShell中调用,实现代码如下:

# 方案1:直接用官方SDK类上传,无需调用Az Cmdlet
$SASUri = "https://name.blob.core.windows.net/container?sv=2015-04-05&sr=b&sig=abc123&se=2017-03-07T12%3A58%3A52Z&sp=rw"
$fileToUpload = "Test.json"

# 加载Az.Storage模块自带的Storage SDK程序集,无需额外安装依赖
Add-Type -AssemblyName "Azure.Storage.Blobs"

# 原生解析SAS URI直接上传
$blobClient = [Azure.Storage.Blobs.BlobClient]::new([System.Uri]$SASUri)
$blobClient.Upload($fileToUpload, $true)

如果你坚持要使用Az原生Cmdlet的语法上传,也可以用官方URI类解析参数后构造上下文,避免正则匹配的容错问题:

# 方案2:解析参数后使用Az原生Cmdlet上传
$SASUri = "https://name.blob.core.windows.net/container?sv=2015-04-05&sr=b&sig=abc123&se=2017-03-07T12%3A58%3A52Z&sp=rw"
$fileToUpload = "Test.json"

$blobUri = [System.Uri]$SASUri
$sasToken = $blobUri.Query.TrimStart('?')
$storageAccountName = $blobUri.Host.Split('.')[0]
$container = $blobUri.Segments[1].TrimEnd('/')

$storageContext = New-AzStorageContext -StorageAccountName $storageAccountName -SasToken $sasToken
Set-AzStorageBlobContent -File $fileToUpload -Container $container -Context $storageContext -Force

上述实现基于Azure官方SDK的原生解析逻辑,覆盖了非常规格式的SAS URI场景,不会出现正则匹配遗漏边缘情况的问题。

内容的提问来源于stack exchange,提问作者aolszowka

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 04:57:01