Skip to content

Instantly share code, notes, and snippets.

@jessefmoore
Last active May 27, 2022 15:17
Show Gist options
  • Save jessefmoore/5ae57f5b0ad86312447ec38f40b9d6f3 to your computer and use it in GitHub Desktop.
Save jessefmoore/5ae57f5b0ad86312447ec38f40b9d6f3 to your computer and use it in GitHub Desktop.

Revisions

  1. jessefmoore revised this gist May 27, 2022. 1 changed file with 10 additions and 8 deletions.
    18 changes: 10 additions & 8 deletions windows_10_HyperV.pkr.hcl
    Original file line number Diff line number Diff line change
    @@ -1,12 +1,14 @@
    # Walk thru video here https://screencast-o-matic.com/content/video/c3n1rjVDms6
    # packer build --only=hyperv-iso.windows10 `
    #>> --var disk_size=136400 `
    #>> --var switch_name=InternalSwitch `
    #>> --var iso_url=./iso/Win10_21H1_English_x64.iso `
    #>> --var iso_checksum=sha1:78aa5fa0fd332ee0822ef5a533cd2cfe12333274 `
    #>> windows_10.pkr.hcl
    #
    # CODE BELOW to get Win10 Packer on HyperV
    ### Take the below code to run Packer to build Win10 in HyperV ######
    packer build --only=hyperv-iso.windows10 `
    --var disk_size=136400 `
    --var switch_name=InternalSwitch `
    --var iso_url=./iso/Win10_21H1_English_x64.iso `
    --var iso_checksum=sha1:78aa5fa0fd332ee0822ef5a533cd2cfe12333274 `
    windows_10.pkr.hcl
    ######################################################################
    ############### CODE BELOW to get Win10 Packer on HyperV ############
    packer {
    required_plugins {
    windows-update = {
    @@ -221,4 +223,4 @@ build {
    # output = "output/${var.vm_name}.tar.gz"
    # }

    }
    }
  2. jessefmoore created this gist May 27, 2022.
    224 changes: 224 additions & 0 deletions windows_10_HyperV.pkr.hcl
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,224 @@
    # Walk thru video here https://screencast-o-matic.com/content/video/c3n1rjVDms6
    # packer build --only=hyperv-iso.windows10 `
    #>> --var disk_size=136400 `
    #>> --var switch_name=InternalSwitch `
    #>> --var iso_url=./iso/Win10_21H1_English_x64.iso `
    #>> --var iso_checksum=sha1:78aa5fa0fd332ee0822ef5a533cd2cfe12333274 `
    #>> windows_10.pkr.hcl
    #
    # CODE BELOW to get Win10 Packer on HyperV
    packer {
    required_plugins {
    windows-update = {
    version = "0.14.0"
    source = "github.com/rgl/windows-update"
    }
    }
    }

    variable "autounattend" {
    type = string
    default = "./answer_files/10/Autounattend.xml"
    }

    variable "headless" {
    type = string
    default = "false"
    }

    variable "disk_type_id" {
    type = string
    default = "1"
    }

    variable "iso_checksum" {
    type = string
    default = "sha256:6C6856405DBC7674EDA21BC5F7094F5A18AF5C9BACC67ED111E8F53F02E7D13D"
    }

    variable "iso_url" {
    type = string
    default = "iso/Win10_20H2_v2_English_x64.iso"
    }

    variable "restart_timeout" {
    type = string
    default = "5m"
    }

    variable "vhv_enable" {
    type = string
    default = "false"
    }

    variable "vm_name" {
    type = string
    default = "windows_10"
    }

    variable "winadmin_password" {
    type = string
    default = "vagrant"
    }

    variable "winrm_username" {
    type = string
    default = "vagrant"
    }

    variable "winrm_timeout" {
    type = string
    default = "6h"
    }

    variable "disk_size" {
    type = string
    default = "61440"
    }

    variable "memory" {
    type = string
    default = "2048"
    }

    variable "cpu" {
    type = string
    default = "4"
    }

    variable "virtio_win_iso" {
    type = string
    default = "~/virtio-win.iso"
    }

    variable "vagrantfile_template" {
    type = string
    default = ""
    }

    variable "vmx_version" {
    type = string
    default = "14"
    }

    variable "switch_name" {
    type = string
    default = ""
    }

    locals {
    buildtime = formatdate("YYYY-MM-DD hh:mm ZZZ", timestamp())
    }

    source "hyperv-iso" "windows10" {
    boot_wait = "6m"
    communicator = "winrm"
    configuration_version = "8.0"
    cpus = "${var.cpu}"
    disk_size = "${var.disk_size}"
    floppy_files = ["${var.autounattend}", "./floppy/WindowsPowershell.lnk", "./floppy/PinTo10.exe", "./scripts/fixnetwork.ps1", "./scripts/disable-screensaver.ps1", "./scripts/disable-winrm.ps1", "./scripts/enable-winrm.ps1"]
    guest_additions_mode = "none"
    iso_checksum = "${var.iso_checksum}"
    iso_url = "${var.iso_url}"
    memory = "${var.memory}"
    shutdown_command = "shutdown /s /t 10 /f /d p:4:1 /c \"Packer Shutdown\""
    switch_name = "${var.switch_name}"
    vm_name = "${var.vm_name}"
    winrm_password = "vagrant"
    winrm_timeout = "${var.winrm_timeout}"
    winrm_username = "vagrant"
    keep_registered = "true"
    }

    source "virtualbox-iso" "windows10" {
    boot_wait = "6m"
    communicator = "winrm"
    cpus = "${var.cpu}"
    disk_size = "${var.disk_size}"
    floppy_files = ["${var.autounattend}", "./floppy/WindowsPowershell.lnk", "./floppy/PinTo10.exe", "./scripts/fixnetwork.ps1", "./scripts/disable-screensaver.ps1", "./scripts/disable-winrm.ps1", "./scripts/enable-winrm.ps1", "./scripts/microsoft-updates.bat", "./scripts/win-updates.ps1"]
    guest_additions_mode = "disable"
    guest_os_type = "Windows10_64"
    output_directory = "windows_10-virtualbox"
    headless = "${var.headless}"
    iso_checksum = "${var.iso_checksum}"
    iso_url = "${var.iso_url}"
    memory = "${var.memory}"
    shutdown_command = "shutdown /s /t 10 /f /d p:4:1 /c \"Packer Shutdown\""
    vm_name = "${var.vm_name}"
    winrm_password = "vagrant"
    winrm_timeout = "${var.winrm_timeout}"
    winrm_username = "vagrant"
    }

    source "vmware-iso" "windows10" {
    boot_wait = "6m"
    communicator = "winrm"
    cpus = "${var.cpu}"
    disk_adapter_type = "lsisas1068"
    disk_size = "${var.disk_size}"
    disk_type_id = "${var.disk_type_id}"
    floppy_files = ["${var.autounattend}", "./floppy/WindowsPowershell.lnk", "./floppy/PinTo10.exe", "./scripts/fixnetwork.ps1", "./scripts/disable-screensaver.ps1", "./scripts/disable-winrm.ps1", "./scripts/enable-winrm.ps1", "./scripts/microsoft-updates.bat", "./scripts/win-updates.ps1"]
    guest_os_type = "windows9-64"
    output_directory = "windows_10-vmware"
    headless = "${var.headless}"
    keep_registered = "true"
    iso_checksum = "${var.iso_checksum}"
    iso_url = "${var.iso_url}"
    memory = "${var.memory}"
    shutdown_command = "shutdown /s /t 10 /f /d p:4:1 /c \"Packer Shutdown\""
    version = "${var.vmx_version}"
    vm_name = "${var.vm_name}"
    vmx_data = {
    "RemoteDisplay.vnc.enabled" = "false"
    "RemoteDisplay.vnc.port" = "5900"
    }
    vmx_remove_ethernet_interfaces = true
    vnc_port_max = 5980
    vnc_port_min = 5900
    winrm_password = "vagrant"
    winrm_timeout = "${var.winrm_timeout}"
    winrm_username = "vagrant"
    }

    build {
    sources = ["source.hyperv-iso.windows10", "source.virtualbox-iso.windows10", "source.vmware-iso.windows10"]

    provisioner "windows-shell" {
    execute_command = "{{ .Vars }} cmd /c \"{{ .Path }}\""
    remote_path = "/tmp/script.bat"
    scripts = ["./scripts/enable-rdp.bat"]
    }

    provisioner "powershell" {
    scripts = ["./scripts/debloat-windows.ps1"]
    }

    provisioner "windows-restart" {
    }

    provisioner "powershell" {
    scripts = ["./scripts/set-powerplan.ps1"]
    }

    # provisioner "windows-update" {
    # filters = ["exclude:$_.Title -like '*Preview*'", "include:$true"]
    # pause_before = "30s"
    # search_criteria = "IsInstalled=0"
    # }

    # provisioner "windows-restart" {
    # }

    provisioner "windows-shell" {
    execute_command = "{{ .Vars }} cmd /c \"{{ .Path }}\""
    remote_path = "/tmp/script.bat"
    scripts = ["./scripts/pin-powershell.bat", "./scripts/compile-dotnet-assemblies.bat", "./scripts/set-winrm-automatic.bat", "./scripts/uac-enable.bat", "./scripts/dis-updates.bat"] //, "./scripts/compact.bat"]
    }



    # post-processor "compress" {
    # output = "output/${var.vm_name}.tar.gz"
    # }

    }