Whilst configuring my WDS server to deploy Windows 7 in an unattended fashion, I’ve been using a VMware virtual machine to test the WDSUnattend.xml file and the ImageUnattend.xml files.
I ran into a problem whereby the VMware machine was reporting the following error whilst trying to PXE (Pre-eXecution Environment)
PXE-E55 ProxyDHCP: No reply to request on port 4011
Thinking it was an issue with either my DHCP or WDS, I restarted the services for both, then failing that I restarted both of the servers.
I looked online and MS KB articles immediately tell you to ensure you are using the IP Helper on your switches and routers correctly and not assigned the DHCP Option 60’s, however my Layer 2 switch doesn’t do IP Helper so I know this isn’t the problem.
After a while of hunting I found the solution. The problem is indeed WDS, however the problem is that WDS is too clever for it’s own good. The problem lies in the fact that WDS maintains a database with the GUID and MAC address of clients that it serves images to and adds these GUID and MAC values to the ApprovedDevices table.
Once in the table, the device will be unable to PXE boot from that server for the remainder of the ApprovedDevices AutoAddPolicy threshold. In order to fix this so that we can boot the same client to do testing you need to run the following command after each imaging process.
WDSUTIL /Delete-AutoAddDevices /Server:<ServerName> /DeviceType:ApprovedDevices
You can additionally run the command with the other device types such as RejectedDevices, OtherDevices to clear the other lists.
The other thing I changed whilst I was at it was the time it retains this information by default. Assuming you are in a development or build team churning images and building frequenty you will often be using the same machines. WDS allows us to change the time which is natrually keeps this data so that we don’t need to run the Delete-AutoAddDevices command for each build.
WDSUTIL /Set-Server /AutoAddPolicy /RetentionPeriod /Others:1
WDSUTIL /Set-Server /AutoAddPolicy /RetentionPeriod /Approved:1
These two commands will instruct WDS to only keep a record of the GUID and the MAC of those clients which is handles for one day, allowing you to churn your client builds daily without administrative input to reset the lists each time.