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

Terraform创建Azure Windows VM时如何自动运行PowerShell7脚本

Azure Windows VM 自动运行PowerShell 7+脚本的Terraform实现方案

所有方案均满足100%使用PowerShell 7+执行业务逻辑的要求,适配全自动化Terraform部署流程:

方案1:单自定义扩展链式执行(无额外依赖,最推荐小规模场景使用)

Azure Windows虚拟机默认预装Windows PowerShell 5.1,自定义脚本扩展(CustomScriptExtension)默认调用该版本PowerShell执行初始命令。你可以在同一条执行命令中先静默安装PowerShell 7+,安装完成后直接通过绝对路径调用PowerShell 7的可执行文件执行业务逻辑,不需要额外资源或前置配置。

注意:刚完成PowerShell 7安装时系统环境变量未刷新,不要直接用pwsh命令调用,必须使用绝对路径C:\Program Files\PowerShell\7\pwsh.exe避免执行失败。

修改后的Terraform配置示例:

resource "azurerm_virtual_machine_extension" "your-extension" {
  name                 = "${azurerm_windows_virtual_machine.vm[0].name}-pwsh7-extension"
  virtual_machine_id   = azurerm_windows_virtual_machine.vm[0].id
  publisher            = "Microsoft.Compute"
  type                 = "CustomScriptExtension"
  type_handler_version = "1.9"

  protected_settings = <<SETTINGS
  {
    // 如需执行独立.ps1脚本,可新增"fileUris": ["你的脚本存储地址"]字段自动下载脚本
    "commandToExecute": "powershell -ExecutionPolicy Bypass -NonInteractive -Command \"iex '& { $(Invoke-RestMethod https://aka.ms/install-powershell.ps1) } -UseMSI -Quiet'; & 'C:\\Program Files\\PowerShell\\7\\pwsh.exe' -ExecutionPolicy Bypass -NonInteractive -Command '替换为你的PowerShell 7+业务命令'\""
  }
  SETTINGS

  depends_on = [
    azurerm_windows_virtual_machine.vm
  ]
}

如果业务脚本较长,不要全部写在commandToExecute字段中,将脚本上传到Azure存储账户(配置VM托管标识访问权限)或内部可访问的HTTP地址,通过fileUris参数让扩展自动下载脚本,再将调用部分替换为& 'C:\\Program Files\\PowerShell\\7\\pwsh.exe' -ExecutionPolicy Bypass -File .\your-script.ps1即可。

方案2:自定义镜像预装PowerShell 7+(推荐大规模部署场景使用)

如果需要批量部署多台同配置虚拟机,提前构建预装PowerShell 7+的自定义镜像可以省去每台VM部署时重复安装PowerShell的步骤,大幅提升部署速度,同时保证所有VM的运行环境完全一致。
实现逻辑:

  • 可通过Azure Image Builder服务自动化构建自定义镜像,在镜像构建阶段执行PowerShell 7静默安装命令
  • 将构建完成的镜像存放到Azure共享镜像库
  • Terraform创建虚拟机时,直接在azurerm_windows_virtual_machine资源中引用自定义镜像ID即可
  • 后续自定义脚本扩展的执行命令可直接通过绝对路径调用pwsh.exe,不需要再执行安装步骤

方案3:Azure DSC扩展强制环境配置(适合高合规要求场景使用)

如果需要严格保证虚拟机始终符合PowerShell 7+的环境要求,可使用Azure期望状态配置(DSC)扩展替代普通自定义脚本扩展:

  • DSC扩展会以声明式方式校验虚拟机状态,强制安装指定版本以上的PowerShell 7,即使用户手动删除也会自动重新安装
  • 配置完成后DSC可直接触发PowerShell 7+执行业务脚本,全程满足合规要求
常见踩坑点
  • 安装PowerShell 7时必须添加静默参数(-Quiet或MSI安装的/qn参数),禁止弹出交互窗口,否则会导致扩展执行超时失败
  • 不要依赖系统环境变量调用pwsh,新安装的软件不会立刻刷新当前会话的环境变量,必须使用绝对路径
  • 自定义扩展的commandToExecute字段有长度限制,长脚本优先通过fileUris下载后执行

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 14:27:18