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

如何通过Azure Runbook调用存储账户PS脚本执行VMSS命令并解决找不到文件报错

问题解决方案:Azure Runbook调用Invoke-AzVmssVMRunCommand提示Could not find file错误

错误原因

Invoke-AzVmssVMRunCommand的-ScriptPath参数读取的是当前命令执行环境本地的文件:

  • 你在CloudShell中执行时,CloudShell默认已经将关联存储账户的文件共享挂载到了本地$Home路径,所以可以直接读取到script.ps1
  • Runbook运行在Azure Automation的独立沙箱环境中,默认没有挂载你的存储账户文件共享,自然找不到对应路径下的脚本文件

可行解决方案

方案1:脚本内容直接内嵌(脚本体积较小时首选)

不用-ScriptPath参数,改用命令支持的-Script参数直接传入脚本内容,无需额外下载文件:

# 此处替换为你script.ps1文件内的完整代码
$customScript = @'
Write-Output "脚本执行开始"
# 你的原有脚本逻辑
Write-Output "脚本执行完成"
'@

Invoke-AzVmssVMRunCommand -ResourceGroupName $ResourceGroupName -VMScaleSetName $VirtualMachineScaleSetName -InstanceId $vminstances -CommandId 'RunPowerShellScript' -Script $customScript

方案2:Runbook中先下载存储账户脚本再执行(脚本需动态更新时使用)

先在Runbook中将存储账户里的脚本下载到沙箱的临时目录,再调用执行命令:

# 1. 获取存储账户上下文,建议将存储密钥存在Automation加密变量中,不要硬编码
$storageAccountName = "你的存储账户名称"
$storageKey = Get-AzAutomationVariable -ResourceGroupName "Automation账户资源组名" -AutomationAccountName "你的Automation账户名" -Name "存储账户密钥变量名" -AsPlainText
$storageContext = New-AzStorageContext -StorageAccountName $storageAccountName -StorageAccountKey $storageKey

# 2. 下载脚本到Runbook沙箱临时目录,替换为你实际的文件共享名、脚本存储路径
Get-AzStorageFileContent -ShareName "CloudShell关联的文件共享名" -Path ".cloudconsole/script.ps1" -Destination "$env:TEMP\script.ps1" -Context $storageContext

# 3. 调用执行命令,指向临时目录的脚本文件
Invoke-AzVmssVMRunCommand -ResourceGroupName $ResourceGroupName -VMScaleSetName $VirtualMachineScaleSetName -InstanceId $vminstances -CommandId 'RunPowerShellScript' -ScriptPath "$env:TEMP\script.ps1"

注意事项

  • 确保Runbook使用的托管身份同时拥有存储账户的存储文件数据读取者权限,以及虚拟机规模集的虚拟机参与者权限
  • 保持Runbook中Az.Compute模块版本与你CloudShell测试时的版本一致,避免参数兼容问题
  • 若使用方案2,需准确填写脚本在存储文件共享中的实际路径,CloudShell默认$Home对应文件共享下的.cloudconsole目录

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 08:54:01