首页 > 解决方案 > 在 terraforms 中执行 cmd 文件

问题描述

我在 Vsphere 上配置带有 terraforms 的 Windows Server 2012R2。我已经启动并运行了机器。现在我想通过 terraforms 的 remote_exec 在机器上运行一些 .cmd 文件。

用户不是管理员,而是管理员组。为通过 CLI 或 powershell 执行脚本而禁用 UAC。

我编写了一个 runAsAdmin.ps1,它会调用我的 install_software.ps1,它将包含执行 .cmd 文件所需的所有命令。

runAsAdmin.ps1

  powershell -noprofile -command "&{ start-process powershell -ArgumentList '-noprofile -file C:\scripts\install_software.ps1' -verb RunAs}"

安装软件.ps1

 cd C:\\gitrepo\\lip-core-devops\\terraform\\system-config\\ims\\scripts
 echo "Installing IMS Base from powerscript"
 Invoke-Item .\Install_IMS_Base.cmd

我可以直接在机器上的 powershell 上运行 runAsAsAdmin.ps1 ,而无需管理员提升,一切都按预期工作。

但是当我从 terraforms 的 remote-exec 执行 runAsAdmin.ps1 时,执行成功,但是 install_software 文件的内容没有执行。我尝试在执行 cmd 文件之前创建一个目录。

地形部分

provisioner "remote-exec" {
inline = [
  "powershell -File C:\\scripts\\runAsAdmin.ps1"
}

连接已全部设置并成功。我在脚本执行结束时获得了成功。

我在我的脚本中缺少的是它不是通过 terraforms 执行的,而是在机器上工作的。

标签: windowspowershellterraformelevated-privileges

解决方案


这可能是由 powershell 执行策略引起的?请尝试使用 -ExecutionPolicy 设置运行它。在 Azure 中使用 VM 扩展时,我必须这样做。

start powershell -ExecutionPolicy Unrestricted -File runAsAdmin.ps1


推荐阅读