I've spent a long time researching this and finally managed to do it on my own machine.
There are two scenarios here: a new install, and a machine that is already installed/used.
For a new install, you can (apparently) modify the autounattend.xml file (unresearched link here, no guarantees, I haven't tried)
For a machine that is already installed, there are two problems to overcome:
- Windows 'locking' some files, so you can't copy them (ntuser.dat)
- Changing where windows goes to look for the profiles on startup.
For problem 1, you can either go the round about route:
- copy Default and Public folders to the new location
- modify their location in registry
- create a new user (which will be created in the new location)
- login with new user account and copy the other users
- lots of detail on this here
Or you can boot from a Recovery disk and copy stuff across.
For problem 2, you can either do a find and replace everywhere in the registry (risky), or create a symlink/junction from the default location to the new location.
The find and replace solution is also detailed on the previously linked page, but it turns out that you still have to create the symlink, otherwise Windows Update has problems.
WHATEVER you choose to do, you will need to get familiar with symlinks/junctions. Lots of comments on Josh's blog mention ROBOCOPY, which you can't use to copy Junctions. If you don't recreate them, you won't notice immediately as most (if not all) have the hidden attribute anyway, but you may experience reverse compatibility problems with non-Vista apps.
This blog post provides a bit more (too much) detail about this issue, plus a script to help recreating the symlinks/junctions.
Another blog, another approach.