{"id":15750823,"url":"https://github.com/rgl/windows-deployment-services-vagrant","last_synced_at":"2026-05-10T05:05:31.224Z","repository":{"id":139753697,"uuid":"347328476","full_name":"rgl/windows-deployment-services-vagrant","owner":"rgl","description":"Example Windows Deployment Services (WDS) vagrant environment","archived":false,"fork":false,"pushed_at":"2021-04-04T21:31:11.000Z","size":40,"stargazers_count":3,"open_issues_count":0,"forks_count":0,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-03-31T07:22:22.077Z","etag":null,"topics":["prestage","pxe","pxe-boot","vagrant","wds","windows"],"latest_commit_sha":null,"homepage":"","language":"PowerShell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/rgl.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2021-03-13T09:34:04.000Z","updated_at":"2023-04-23T22:32:23.000Z","dependencies_parsed_at":null,"dependency_job_id":"b079860d-768f-4f53-9f1b-41ca0fee1b13","html_url":"https://github.com/rgl/windows-deployment-services-vagrant","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/rgl/windows-deployment-services-vagrant","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rgl%2Fwindows-deployment-services-vagrant","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rgl%2Fwindows-deployment-services-vagrant/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rgl%2Fwindows-deployment-services-vagrant/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rgl%2Fwindows-deployment-services-vagrant/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/rgl","download_url":"https://codeload.github.com/rgl/windows-deployment-services-vagrant/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rgl%2Fwindows-deployment-services-vagrant/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":264559624,"owners_count":23628040,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["prestage","pxe","pxe-boot","vagrant","wds","windows"],"created_at":"2024-10-04T07:00:19.847Z","updated_at":"2026-05-10T05:05:31.191Z","avatar_url":"https://github.com/rgl.png","language":"PowerShell","funding_links":[],"categories":[],"sub_categories":[],"readme":"# About\r\n\r\nThis is an example [Windows Deployment Services (WDS)](https://en.wikipedia.org/wiki/Windows_Deployment_Services) vagrant environment.\r\n\r\n## Usage\r\n\r\nInstall and start the [Windows Domain Controller environment](https://github.com/rgl/windows-domain-controller-vagrant) in `../windows-domain-controller-vagrant`.\r\n\r\nCopy the Windows 2019 ISO to the `tmp` directory (the exact ISO filename is\r\ndefined in [provision/provision-wds-images.ps1](provision/provision-wds-images.ps1)).\r\n\r\nCopy the VirtIO drivers ISO to the `tmp` directory (the exact ISO filename is\r\ndefined in [provision/provision-wds-images.ps1](provision/provision-wds-images.ps1)).\r\n\r\nLaunch the `wds` environment:\r\n\r\n```bash\r\nvagrant up --provider=libvirt wds # or --provider=hyperv\r\n```\r\n\r\nLaunch the known `client` environment and watch it automatically install\r\nwindows:\r\n\r\n```bash\r\nbash create_empty_box.sh\r\nvagrant up --provider=libvirt client # or --provider=hyperv\r\n# Open the VM console to see it network booting and install windows.\r\n```\r\n\r\nLaunch the new/unknown `newclient` environment and watch it show a wds client\r\nprompt asking the user to choose an image to install:\r\n\r\n```bash\r\nvagrant up --provider=libvirt newclient # or --provider=hyperv\r\n# Open the VM console to see it network booting.\r\n```\r\n\r\n**NB** Vagrant will fail to connect to the VM; the idea is just to see it PXE boot.\r\n\r\n## Open Questions\r\n\r\nCan you help with any of the following problems?\r\n\r\n* Why `/JoinDomain:Yes` prevents unattend OOBE/Autologon/FirstLogonCommands\r\n  from working?\r\n\r\n## Notes\r\n\r\n* When you launch the `wds` environment multiple times, these Active Directory\r\n  objects are [automatically removed](provision/add-to-domain.ps1)\r\n  to make sure WDS starts with the default configuration:\r\n  * `CN=DhcpRoot,CN=NetServices,CN=Services,CN=Configuration,DC=example,DC=com`\r\n  * `CN=wds.example.com,CN=NetServices,CN=Services,CN=Configuration,DC=example,DC=com`\r\n  * `CN=WDS,CN=Computers,DC=example,DC=com`\r\n  * `CN=client,CN=Computers,DC=example,DC=com`\r\n* Slow DNS/NetBIOS responses will break WDS (e.g. it will be slow to start,\r\n  or even never starts) and PXE boot (e.g. fail to find a boot image).\r\n* You can target a specific device (e.g. MAC address) by prestaging it.\r\n  * You can prestage a device through the Active Directory Prestaged\r\n    devices node on the WDS Manager or with `wdsutil /Set-Device`.\r\n  * This would also allow you to use a different unattended file and\r\n    boot image.\r\n  * See [provision/provision-wds-unattend.ps1](provision/provision-wds-unattend.ps1).\r\n* All credentials flow through the network in cleartext and are saved at\r\n  `C:\\Windows\\Panther\\unattend.xml` with read permissions for every user.\r\n* You can open `.wim` files with 7-Zip.\r\n* You can use the [Microsoft Deployment Toolkit (MDT)](https://en.wikipedia.org/wiki/Microsoft_Deployment_Toolkit)\r\n  to create custom Windows images that you can deploy from the WDS server.\r\n* Some configuration steps are awkwardly run as the `vagrant` domain\r\n  account (instead of the local `vagrant` account). If you known a better\r\n  way, please let us know!\r\n\r\n## Troublehsoot\r\n\r\n* Press the `SHIFT+F10` key combination to open a Command Prompt window.\r\n  * This works in WinPE and when booting Windows (e.g. while executing the\r\n    `specialize` configuration pass).\r\n* The unattend file is saved at `C:\\Windows\\Panther\\unattend.xml`.\r\n* The logs are saved at `C:\\Windows\\Panther`.\r\n\r\n## References\r\n\r\n* [Windows Deployment Services (WDS)](https://docs.microsoft.com/en-us/windows/deployment/windows-deployment-scenarios-and-tools#windows-deployment-services).\r\n  * [wdsutil /Set-Server](https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/wdsutil-set-server).\r\n  * [wdsutil /Set-Device](https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/wdsutil-set-device).\r\n* [Windows Setup Technical Reference](https://docs.microsoft.com/en-us/windows-hardware/manufacture/desktop/windows-setup-technical-reference).\r\n* [Windows Setup Configuration Passes](https://docs.microsoft.com/en-us/windows-hardware/manufacture/desktop/windows-setup-configuration-passes).\r\n* [Microsoft Deployment Toolkit (MDT)](https://docs.microsoft.com/en-us/windows/deployment/windows-deployment-scenarios-and-tools#microsoft-deployment-toolkit).\r\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frgl%2Fwindows-deployment-services-vagrant","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frgl%2Fwindows-deployment-services-vagrant","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frgl%2Fwindows-deployment-services-vagrant/lists"}