Frame challenge:
Stop disassembling the PCs
I've disassembled a lot of PCs in my life. You're complaining about time, but you're wasting time disassembling PCs for imaging -- every PC has to be benched twice, then re-tested.
And your burn-in period is weak tea. You're only putting the system together long enough to configure and test your newly imaged drive. So you'll be shipping defective PCs to customers (many are given to you for a reason; niggling glitches e.g. thermal problems are one such.)
Change your assembly line. Rack the PC under power, attach a KVM, and use the PC to wipe the PC. That will also give it a handy "ran it for awhile" burn-in; and if you use /dev/urandom a stout CPU/thermal burn-in as well.
You can either boot up under their Windows environment and delete all but the system files and applications, or you can boot off a CD, or if the system is capable of it, booting off a USB stick. Or, you can image the system first and wipe the freespace after your new image is installed.
If running natively under the legacy OS, there is no need to delete and wipe Windows system files and applications, e.g. World of Warcraft is 40GB of data that doesn't need to be seecure-wiped. So \Windows
, \Program Files
and other system directories can be excluded from the security wipe. (If they put data there, they can't fairly expect a secure wipe of it). There's a highly portable version of perl 4 that would make easy work out of this, and perl 4 is plenty powerful enough for this kind of thing.
If I was using the native OS, I'd do it in 2 passes: First delete all non-system non-app files; then fill the disk with zeroes (or copies of a system file if you're worried about CIA-tier disk forensics).
Or wipe it last, after imaging
Same thing; still use the PC itself to image, e.g. booting from a CD and pulling the image across the ethernet or whatever.
Now, build the image with an action-on-first-bootup, where it wipes the freespace, then disables itself.
All data is overwritten either by a) the files of the new image, or b) your overwriting of freespace.
If you want this function to be "check-point-able", i.e. not have to start over after a power failure, then have it simply write immense files with random names into /tmp/ until the disk is full. On confirming the disk is full, have it remove the /tmp/ files, then remove itself.
Once the disk is 100% occupied with new data, the old data must have been overwritten.