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

禁用存储密钥访问后,Azure Runbook系统身份传文件仍报错求助

解决Azure Runbook上传Blob时"Key based authentication is not permitted on this storage account"错误

问题出在你通过Get-AzStorageAccount获取的存储上下文(Context)默认会使用存储账户密钥进行认证,但你的存储账户已禁用密钥认证方式——即便用系统身份登录了Azure,后续Blob操作仍会尝试调用密钥,触发错误。

以下是两种可行的修正方案:

方案1:创建基于身份验证的存储上下文

直接使用New-AzStorageContext结合已登录的系统身份创建上下文,彻底避开密钥依赖:

# 用系统身份登录并切换上下文
$AzureContext = (Connect-AzAccount -Identity).Context
Set-AzContext -Context $AzureContext

# 创建基于身份验证的存储上下文
$ctx = New-AzStorageContext -StorageAccountName Testadlsprod -UseConnectedAccount

# 修复原代码语法错误(Get-ChildItem缺少闭合括号)
$files = Get-ChildItem -Path C:\temp\Upload

foreach($file in $files)
{
  $folderName = "Backup\Production\" + $file.Name
  Set-AzStorageBlobContent -File $file.FullName -Container backup -Blob $folderName -Context $ctx
}

方案2:直接使用Azure上下文执行Blob操作

无需单独创建存储上下文,在Set-AzStorageBlobContent中指定-AzContext参数,让命令直接复用已登录的系统身份:

$AzureContext = (Connect-AzAccount -Identity).Context
Set-AzContext -Context $AzureContext

$files = Get-ChildItem -Path C:\temp\Upload

foreach($file in $files)
{
  $folderName = "Backup\Production\" + $file.Name
  Set-AzStorageBlobContent -File $file.FullName -Container backup -Blob $folderName -StorageAccountName Testadlsprod -AzContext $AzureContext
}

另外注意原代码的两个细节问题:

  • Get-ChildItem -Path C:\temp\Upload末尾缺少闭合括号,会触发语法错误
  • $foldername = "Backup\Production"+$file.Name建议在Production后添加\,避免Blob名称变成无层级的Backup\ProductionFileName(如果需要构建Blob目录结构的话)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 21:50:08