We do this where I work using Sysprep. I won't go into all the details since plenty of tutorials are out there. But here is the high level overview.
- Set up a computer exactly how you want it, programs, settings, etc.
- Run sysprep and make sure you select "generalize" (this removes specific drivers so it doesn't blue screen on different hardware)
- Reboot the computer into a WinPE environment (could be from a CD, or PXE, or USB)
- "capture" the image using imagex
Now that you have the generalized image (it's in a .wim file) you can deploy that to any hardware using WinPE again.
I know this sounds fairly complex but it's really not all that bad once you wrap your head around it. Microsoft actually has pretty good tools and tutorials like THIS ONE.