如何在Azure中自动定时运行PowerShell脚本迁移数据到存储账户
Azure PowerShell迁移脚本定时自动运行实现方案
推荐方案:Azure自动化账户(适配现有脚本改造成本最低)
这个方案对你已经调试完成的PowerShell脚本兼容性最高,几乎不需要修改核心逻辑:
- 首先创建Azure自动化账户,创建时建议开启系统分配托管身份,可以完全替代你原有手动获取Access Token的逻辑,不需要在脚本里硬编码任何密钥、服务主体信息,安全性更高
- 给托管身份配置对应权限:给目标存储账户分配存储Blob数据贡献者角色,如果你的拉取数据源也需要Azure权限,同步给对应资源分配匹配的访问权限
- 导入依赖模块:在自动化账户的「模块」界面,导入你脚本中用到的所有Azure PowerShell模块,比如
Az.Accounts、Az.Storage等,直接从Azure模块库搜索安装即可 - 新建PowerShell Runbook:在自动化账户的Runbook菜单下新建PowerShell类型的Runbook,把你现有脚本复制进去,只需要替换原有获取Access Token的代码:
原有手动获取Token的逻辑替换为:
如果你不想修改原有Token获取逻辑,也可以把用到的服务主体凭据存在自动化账户的「凭据」存储中,脚本里用# 用托管身份登录Azure Connect-AzAccount -Identity # 如果需要调用REST API的AccessToken,直接取即可 $accessToken = (Get-AzAccessToken).TokenGet-AutomationPSCredential '自定义凭据名'获取凭据即可,不需要明文写在脚本里 - 测试运行:手动触发Runbook运行,查看输出日志确认数据拉取、写入Blob逻辑正常,和你本地运行结果一致
- 配置定时调度:在Runbook的「调度」界面新建调度计划,设置你需要的运行频率、生效时间、对应时区,配置完成后就会自动按设定时间触发脚本运行,无需人工干预
备选方案:Azure Functions 定时触发器(适合短时间运行的轻量脚本)
如果你的脚本单次运行时长不超过10分钟,可以选这个轻量方案:
- 创建PowerShell运行时的Azure Function应用,同样开启系统分配托管身份,配置和上述方案一致的权限
- 新建定时触发器类型的函数,按照你的运行需求配置CRON表达式
- 把你的迁移脚本复制到函数的
run.ps1文件中,同样替换AccessToken获取逻辑为托管身份对应的代码 - 测试运行正常后发布即可,函数会自动按CRON表达式设定的时间触发运行
注意事项
- 禁止在脚本中硬编码任何密钥、连接字符串、账号密码,优先用托管身份+Azure RBAC权限控制访问,避免凭据泄露
- 每次修改脚本后先手动测试运行,确认逻辑正常再绑定调度规则
- 如果脚本单次运行时间较长,优先选择自动化账户方案,Runbook最高支持3天的运行时长,而消费计划的Azure Function最长仅支持10分钟运行时长
内容的提问来源于stack exchange,提问作者user13696433
相关产品推荐
相关产品推荐

