Recently I built a basic Windows Server 2008 R2 template for a customer. We downloaded the ISO, installed to a fresh VM, ran all available Windows Updates, and installed VMware tools. We ran sysprep with the "Generalize" option in order to have the VM generate a new <a href="http://en.wikipedia.org/wiki/Security_Identifier">SID</a> the next time it booted and shut down the VM so that it could be converted to a template. We began to deploy VMs from this template, but quickly realized that VMware tools wasn't fully functional. The mouse was laggy on the VM console and was captured in the console window (similar to not having VMware Tools installed at all).<!--more-->

I double checked the vSphere client to verify that the host detected that VMware tools was installed and receiving guest heartbeats - all appeared to be well. The VM Device Manager listed a "PS/2 Compatible Mouse" installed as the mouse rather than a "VMware Pointing Device". The fix was to force a driver update and use the VMware mouse driver located at C:\Program Files\Common Files\VMware\Drivers\mouse. The VMware forums led me to a permanent fix for this problem as well: before running sysprep and converting your VM to a template, load the Registry Editor and browse to HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Setup\Sysprep\Settings\sppnp where you can set PersistAllDeviceInstalls to 1. This registry key tells the guest OS not to remove any drivers for devices that are currently present. Since the virtual hardware for every VM deployed from the template will be identical, it will be safe to leave all drivers in place.

For complex sysprep deployments utilizing an XML answer file, the following XML can be used to achieve the same effect:
<pre>&lt;settings pass="generalize"&gt;
 &lt;component name="Microsoft-Windows-PnpSysprep" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"&gt;
 &lt;PersistAllDeviceInstalls&gt;true&lt;/PersistAllDeviceInstalls&gt;
 &lt;/component&gt;
 &lt;/settings&gt;</pre>
Special thanks to crkusch, arbsysts, and the VMware forums for sharing their knowledge that makes this fix possible.