
Windows Builder
Author Packer HCL and WinRM/PowerShell provisioners to bake Windows Server AMIs, Azure images, or VMware templates for production fleets.
Install
npx skills add https://github.com/hashicorp/agent-skills --skill windows-builderWhat is this skill?
- WinRM communicator configuration with SSL, timeouts, and Administrator auth
- AWS amazon-ebs source example with Windows Server 2022 AMI filters
- User-data PowerShell script patterns for WinRM quickconfig and firewall rules
- Explicit cost/time warning: typical builds run 45–120 minutes including Windows Updates
- Cleanup reminder after failed builds to avoid orphaned billable instances
Adoption & trust: 906 installs on skills.sh; 654 GitHub stars; 1/3 security scanners passed (skills.sh audits); trending (+100% hot-view momentum).
Recommended Skills
Azure Deploymicrosoft/azure-skills
Azure Preparemicrosoft/azure-skills
Azure Storagemicrosoft/azure-skills
Azure Validatemicrosoft/azure-skills
Appinsights Instrumentationmicrosoft/azure-skills
Azure Resource Lookupmicrosoft/azure-skills
Journey fit
Primary fit
Golden Windows images are an operations and infrastructure concern—repeatable deploy artifacts—not app feature coding. Infra subphase covers image pipelines, communicators, and cloud-specific builder blocks where Packer runs.
Common Questions / FAQ
Is Windows Builder safe to install?
skills.sh reports 1 of 3 security scanners passed. Review the Security Audits panel on this page before installing in production.
SKILL.md
READMESKILL.md - Windows Builder
# Windows Builder Platform-agnostic patterns for building Windows images with Packer. **Reference:** [Windows Builders](https://developer.hashicorp.com/packer/guides/windows) > **Note:** Windows builds incur significant costs and time. Expect 45-120 minutes per build due to Windows Updates. Failed builds may leave resources running - always verify cleanup. ## WinRM Communicator Setup Windows requires WinRM for Packer communication. ### AWS Example ```hcl source "amazon-ebs" "windows" { region = "us-west-2" instance_type = "t3.medium" source_ami_filter { filters = { name = "Windows_Server-2022-English-Full-Base-*" } most_recent = true owners = ["amazon"] } ami_name = "windows-server-2022-${local.timestamp}" communicator = "winrm" winrm_username = "Administrator" winrm_use_ssl = true winrm_insecure = true winrm_timeout = "15m" user_data_file = "scripts/setup-winrm.ps1" } ``` ### WinRM Setup Script (scripts/setup-winrm.ps1) ```powershell <powershell> # Configure WinRM winrm quickconfig -q winrm set winrm/config '@{MaxTimeoutms="1800000"}' winrm set winrm/config/service '@{AllowUnencrypted="true"}' winrm set winrm/config/service/auth '@{Basic="true"}' # Configure firewall netsh advfirewall firewall add rule name="WinRM 5985" protocol=TCP dir=in localport=5985 action=allow netsh advfirewall firewall add rule name="WinRM 5986" protocol=TCP dir=in localport=5986 action=allow # Restart WinRM net stop winrm net start winrm </powershell> ``` ### Azure Example ```hcl source "azure-arm" "windows" { client_id = var.client_id client_secret = var.client_secret subscription_id = var.subscription_id tenant_id = var.tenant_id managed_image_resource_group_name = "images-rg" managed_image_name = "windows-${local.timestamp}" os_type = "Windows" image_publisher = "MicrosoftWindowsServer" image_offer = "WindowsServer" image_sku = "2022-datacenter-g2" location = "East US" vm_size = "Standard_D2s_v3" # Azure auto-configures WinRM communicator = "winrm" winrm_use_ssl = true winrm_insecure = true winrm_timeout = "15m" winrm_username = "packer" } ``` ## PowerShell Provisioners ### Install Software ```hcl build { sources = ["source.amazon-ebs.windows"] # Install Chocolatey provisioner "powershell" { inline = [ "Set-ExecutionPolicy Bypass -Scope Process -Force", "iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1'))" ] } # Install applications provisioner "powershell" { inline = [ "choco install -y googlechrome", "choco install -y 7zip", ] } # Install IIS provisioner "powershell" { inline = [ "Install-WindowsFeature -Name Web-Server -IncludeManagementTools" ] } } ``` ### Windows Updates ```hcl provisioner "powershell" { inline = [ "Install-PackageProvider -Name NuGet -Force", "Install-Module -Name PSWindowsUpdate -Force", "Import-Module PSWindowsUpdate", "Get-WindowsUpdate -Install -AcceptAll -AutoReboot", ] timeout = "2h" } # Wait for reboots provisioner "windows-restart" { restart_timeout = "30m" } ``` ## Cleanup ```hcl provisioner "powershell" { inline = [ "# Clear temp files", "Remove-Item -Path 'C:\\Windows\\Temp\\*' -Recurse -Force -ErrorAction SilentlyContinue", "# Clear Windows Update cache", "Stop-Service -Name wuauserv -Force", "Remove-Item -Path 'C:\\Windows\\SoftwareDistribution\\*' -Recurse -Force -ErrorAction SilentlyContinue", "Start-Service -Name wuauserv", ] } ``` ## Common Issues **WinRM Timeout** - Increase `winrm_timeout` to 15m or more - Verify security group allows ports 5985/5986 - Check u