如何在terraform azurerm_virtual_machine_extension中运行本地(不存储到blob存储帐户)PowerShell脚本
文件夹具有
- main.tf
- install.ps1
资源“azurerm_virtual_machine_extension”“software”{ name =“install-software”resource_group_name = azurerm_resource_group.azrg.name virtual_machine_id = azurerm_virtual_machine.vm.id publisher =“Microsoft.Compute”type =“CustomScriptExtension”type_handler_version =“1.9”
settings = <<SETTINGS
{
"commandToExecute": "powershell -ExecutionPolicy Unrestricted -File \"install.ps1\""
}
SETTINGS
}
但是失败了
[
{
"code": "ComponentStatus/StdOut/succeeded",
"level": "Info",
"displayStatus": "Provisioning succeeded",
"message": "Windows PowerShell \r\nCopyright (C) Microsoft Corporation. All rights reserved.\r\n\r\n"
},
{
"code": "ComponentStatus/StdErr/succeeded",
"level": "Info",
"displayStatus": "Provisioning succeeded",
"message": "The argument 'install.ps1' to the -File parameter does not exist. Provide the path to an existing '.ps1' file as an argument to the -File parameter.\r\n"
}
]
任何线索
谢谢
4条答案
按热度按时间k4emjkb11#
这对我很有效。
dwbf0jvd2#
这里有一个更漂亮的解决方案,基于gsgill76's answer。注意,我们应该使用
textencodebase64
(Terraform〉= v0.14),因为它允许指定Unicode编码,这是powershell -encodedCommand
。jc3wubiy3#
我设法从数据“template_file”中获取参数,并将其传递到PowerShell命令行中,以便在服务器上执行,如果这对任何人都有帮助的话。
在我的情况下,证书实际上并不需要,但我还是想通过。在我的情况下,信用是从Azure中的VM设置中获取的。
这是我的“创建新森林”脚本-如果有帮助的话。在此示例中不使用信用,仅使用DomainName。然而,我想把它放在那里,以防我想把一个成员服务器提升到一个现有的域中。
yfjy0ee74#
感谢gsgill76提供的工作命令!
下面介绍如何使用函数来支持数据源
path.module
* 假定脚本与terraform代码位于同一目录中 *filebase64
templatefile
jsonencode