使用 Packer 将 Windows VM 添加到域

使用 Packer 将 Windows VM 添加到域

我正在尝试使用 Packer 创建 Windows 映像以供在 Azure 上使用。作为此过程的一部分,我需要将位于 Azure 中现有 VM 上的一些文件放入映像中。我的想法是将 VM 添加到域中,以便我可以直接复制文件。但是,到目前为止,我还无法将映像添加到域中。

我尝试运行 powershell 脚本,但是它给出了以下错误消息:

Error uploading ps script containing env vars: Error uploading file to $env:TEMP

接下来,我尝试直接从 powershell-provisioner 运行“Add-Computer”命令(常规用户和提升用户权限的用户均可),但两种方法均未成功。使用常规 shell,Packer 似乎卡住了。出现消息后没有任何反应。Provisioning with Powershell提升权限的 shell 向我提供了一条错误消息:

(12,8):UserId:
==> azure-arm.xxxxx: At C:\Windows\Temp\packer-elevated-shell-617ab2e4-e084-8ef8-f9f6-0d66a82a0129.ps1:60 char:1

有人知道如何将图像添加到域吗?或者还有其他方法可以将文件从现有 VM 复制到图像中吗?或者最好在部署期间使用 Terraform 复制文件?

答案1

我无法通过 Packer 解决这个问题。但是,我找到了一个解决方案,azurerm_virtual_machine_extension我使用执行 powershell 脚本来执行此操作以及其他一些任务:

resource "azurerm_virtual_machine_extension" "vm_extension_install_srv" {
    count = var.app_count

  name                       = "vm_extension_install_srv"
  virtual_machine_id         =     azurerm_windows_virtual_machine.app[count.index].id
  publisher                  = "Microsoft.Compute"
  type                       = "CustomScriptExtension"
  type_handler_version       = "1.8"
  auto_upgrade_minor_version = true

  settings = <<SETTINGS
    {
        "commandToExecute": "powershell.exe -Command \"C:/setup/provision/first_boot.ps1 -index ${count.index  + 1}; exit 0;\""
    }
SETTINGS
}

答案2

我从未在这里发过帖子,但最近我遇到了类似的问题。我需要将我的打包器 VM 加入域以安装软件。我遇到了同样的问题;我认为这可能与 Winrm 加入域后有关,因为如果您来自现在默认不属于域的计算机,winrm 将不允许您连接。您可以设置此标志来覆盖它。

启用 PSRemoting -SkipNetworkProfileCheck -Force

相关内容