A quick look at: Workstation Migration Assistant
During my company’s Windows 2000 > XP migration, I spent a long time developing a tool to automate the backup/restore of user data, so that our deployment team could literally click a button and have everything done for them (it could’ve been an entirely zero-touch system, but we just didn’t have the time to test 100% and so didn’t have the trust factor). This tool was built around using WinZip to literally zip up the data and dump it on a server, and it’s worked quite well for the past few years. That is, until data growth got out of control. Although WinZip no longer has a 4GB filesize limit, I don’t believe it. We’ve had too many problems as of late, and so I think we’ve realised it was time to replace the tool with something a bit more “enterprisey”
Luckily for us, I had already started work on a personal “coding project” back in November 2006, a wrapper for Microsoft’s User State Migration Tool, which would provide the logic and mechanisms for the actual capture / restore process. The only problem with USMT is that it has no interface. It’s entirely command-line, and unless you know it well, a bit of a pain to use. I’ve been playing with USMT 3.0 since it was in beta and this was my only real gripe. So I set about creating a .NET-based wrapper for it to simplify data capture/restore.
Unfortunately, due to personal circumstances, I didn’t have a lot of time to develop past an early alpha and stopped all work on it sometime in Febuary 2007. The recent problems with our own internal migration tool led me to pick this up again, with the bonus that I can now spend a bit of time during work hours to get this finished. My goal however, is to keep it as generic as possible and be highly customisable. Any changes from a generic model that are needed for my employer will be exposed through settings or customisable scripts, so anyone else that wants to use it will be able to change these things too. Here’s some of the nice features:
- Migrate via a pre-defined network storage location, external USB drive, or user-specified location. USB drive detection is automatic, and you can decide whether drives below a certain size are ignored (ie, memory sticks).
- Optional Hard Disk Health Check will run a CHKDSK prior to capture and fix errors if any are found
- Optional Encryption using a pre-defined company encryption key, or per-user customised encryption (for highly sensitive data that can’t be stored on a server without being encrypted)
- Use different configurations for a multi-OS, XP > XP and Vista > Vista migrations (useful when on XP to force the /TargetXP switch, and if you’re Vista migration can exclude XP-only obsoleted files)
- Automatically run pre and post capture/restore scripts (very useful to further configure machine settings)
- Migrate domain only accounts, or domain and local
- Automatically exclude certain domain or local accounts from the migration
- Automatically send log files to an e-mail address via SMTP after the migration
- On-screen status during every stage of the migration, including ETA
- Optional Hard Disk Health Check will run a CHKDSK prior to capture and fix errors if any are found
- Optional Encryption using a pre-defined company encryption key, or per-user customised encryption (for highly sensitive data that can’t be stored on a server without being encrypted)
- Option to limit migrations to a certain size, i.e. if over 20GB of data to backup, then fail and inform user. This is also overridable
- Very configurable through configuration file
- Command-line automation
- Super-pretty UI
And here’s a screeny:

This app is still very much work-in-progress but I should hope I can release it as a freeware tool sometime soon (with my company’s blessing). Anyway, will keep you informed of progress
And if you have any good suggestions, please let me know.
Dan
Wow great program. Any links or information on how you went about creating this.
Thanks!
Well, I don’t have much in the way of documentation on it right now, as it’s not finished. If my company signs off on me releasing it as freeware, I’ll provide a lot more info on it. I’ll be able to provide usage scenarios and ideas on how to extend it’s functionality.
For example, I’m doing some script-work around this so that each migration gets reported into a central SQL database. This will be used for stats tracking, and also to notify our technicians when migrations are complete so they can take relevant action.
Anyway, if anyone has suggestions, or wants to help test this, please let me know.
Cheers, Dan
I would like to help test this.
What compression does this use?
my company has a similar tool to your original one where data is added to a 7z archive and copied to a file server.
Well, it uses Microsoft’s USMT (http://www.microsoft.com/downloads/details.aspx?FamilyID=799ab28c-691b-4b36-b7ad-6c604be4c595) and acts as a comprehensive wrapper (as USMT is cmdline based). Not sure exactly what the compression is, you’d have to ask Microsoft. I get some pretty good ratios tho.
To capture 33GB of data over a 100MB LAN connection, took me one hour thirty mins, and compressed to 22GB. This is also all encrypted so it’s mighty secure
Hey Dan,
Do you think I could check out the workstation migration assistant? I’m approaching a big migration from 2k to XP and SCCM is proving difficult to use variables with USMT.
Good work by the way….
Steve
Very cool. In a weird coincidence, I finished writing and building an SMS Installer Executable that does essentially the same thing. Though the interface is not as polished as your .NET interface due to using older Windows NT style window boxes. Since my company is in Healthcare we need to be HIPAA compliant, so I have to add the capability to encrypt/decrypt the user store.
I’ve set up a DFS path throughout our org to hold the user data, but we really don’t have the server space to make it work. For most of out techs we’ll provide them a portable USB drive to use for backup/restore purposes.
Hopefully your company will authorize the release of your nifty wrapper as I can see if being very handy for a number of admins in the world who want to be able to quickly and easily backup/restore user data without writing batch scripts, etc. With properly written instructions, the average HelpDesk person could conceptually walk a user through using something like this over the phone.
Good luck!
Stefan
Where can I download this?
You can’t yet. I haven’t released it, it’s still undergoing development.
I found a GUI for creating the syntax used with the USMT v3.0 located here - http://www.myitforum.com/articles/34/view.asp?id=9242
Do you have any kind of release date in mind?
Not a release date, per se - but I’m aiming for shortly after Vista SP1 becomes downloadable. I figure that a lot of companies, like mine, are holding off on Vista evaluation til then so this should give me enough time for a limited beta and bug-fixing, which by the way is just starting. There’s more info in the latest blog post.
Cheers, Dan
I would really like to get my hands on this ask soon as you feel comfortable sharing for use by the University of Michigan. If it would help, I would also be willing to help with any testing or development tasks that you might have need for.
Matt
Please release a v1 please. Everyone is waiting for it
Any update on when you will release this?
Yep, have a look at my latest post…
Now it’s soon to be a month ago you said you’d publish it…
Are you going to or not?
(Maby set a date just to make it happen
Regards
Thomas
I already have. Take a look at the latest news post.
The tool is very good but I keep getting a error that the WMA config has nt been modidifed.
Is there something missing in the config options I am doing wrong .
thanks
The Readme.Txt documents what settings can be cofigured in the MigAssistant.Exe.Config file. The reason you’re getting this “information” message (not error), is that you haven’t set the MigrationNetworkLocation value. If you plan to migrate data to a network location, you need to set this to the UNC path (or drive mapping path). If you intend to use WMA solely for USB migrations, you can set MigrationNetworkDisabled to True.
Dan
Took a quick look-see and appears great. I’m not sure of all the internal workings here, but would it be possible to use the XML files and scanstate/loadstate syntax generated by your tool as the bases for automating the process as part of the larger Microsoft Deployment Lite Touch Installation? If this is theoretically possible, than it would be most useful to be able to dump the command syntax and XML files used for integration into Microsoft Deployment.
Well, the syntax that WMA generates will change based on a number of scenarios and, just taking the syntax from WMA and using it in your deployment negates a lot of the benefits. However, WMA can be command-line driven and should integrate nicely with MDT. You’d just have to negate the existing User State capture scripts and set up pre-image and post-image actions which call WMA instead.
I haven’t mucked about with MDT properly yet but it’s something I’m going to look into soon. Once I do, I’ll try to figure out a good mechanism of integrating WMA directly with ZTIUserState.WSF.
Dan
Thanks Dan. One particular benefit to what I suggest is a PowerShell-like view of what WMA is doing. It would go a long way to helping people understand USMT as well (it is not well documented at all!). For example, I can’t get my own scanstate and loadstate scripts to run at all (getting ERROR 12) and would really like to compare against how WMA is writing and running the commands as they seem to work (congrats!).
Well, between the debug log and the generated logfiles you can get a very good idea of what’s happening. In fact, the ScanState.Log will give the full command-line.
Btw, Error 12, from what I recall, is because you’re running ScanState or LoadState without being a Local Administrator.
Cheers, Dan
In answere to a couple of queries regarding using WMA with Microsoft Deployment Toolkit (WMA) - and adjusting the ZTIUserState.wsf file to use WMA - I would suggest going for a more componentised solution - add the call for the WMA tool to the task sequence as a new task (useing some of the command line options that Dan has built in)and disable the standard USMT tasks (within the state capture and state restore groups) within the task sequencer. MDT’s use of USMT is designed to be hands off - that is it runs USMT as an unattended task to capture and then as another unattended task to restore - WMA by its design requires user intervention - so I would drop it in as a new set of tasks - particularly useful if you are creating a media based deployment using MDT…
Richard - Microsoft UK