Where I work we deploy a lot of computers to staff and we try to keep them all roughly the same.
Presently we take each new machine type we get, configure it the way we want, and then take an image of it using Norton Ghost. We then deploy this to any other computers that come in.
The problem is that we have to not only do this for each machine, but also manually keep them up to date. Is there a convenient tool for building a relatively hardware independent image that can be updated in a virtual environment?
Ideally build image on virtual machine, use drivers from driver packs to allow deploy on any machine, thus reducing our work to simply fixing the minor driver issues that may come up and changing the computer name.
I know this is a feature of some very large enterprise type software, but I was hoping for a relatively simple solution. If there are several possibilities, I'm mostly looking for some direction - i.e.: keywords to look for, etc.
While @TheCompWiz's answer is good, I'd like to add my own version based on my own personal experience.
When you think about automating Windows deployments (anything Vista/2008 and beyond), it helps to separate the actual installation bits from the delivery of the installation bits to the destination machine. A Windows 7 DVD is the standard delivery mechanism for the default set of Windows 7 installation bits. It contains a small WinPE image (boot.wim) that loads on boot which is then responsible for writing the actual OS image (install.wim) down to the hard drive. Windows Deployment Services is also just a delivery mechanism. It can host both the boot.wim and install.wim so that clients can do the installation directly over the network with no physical media necessary.
But delivery of the installation bits is only a small part of the story. Creating your custom "image" (though it's really more of a hybrid image/automated installation) is generally what takes the most time and what most people care about. Others have mentioned using Sysprep to create your custom image. But using it directly and manually editing things like unattend.xml is way more trouble than it's worth. At the end of the day, many of the free and paid solutions for customizing Windows deployments are just wrappers and pre-made scripts that all tie back to Sysprep.
My personal favorite free tool for making custom Windows deployments is the Microsoft Deployment Toolkit (MDT) which recently released version 2012. All it really is is a bunch of pre-made scripts and some GUIs that work together with the Windows Automated Installation Kit (WAIK) to help you build your automated installation. You then have a variety of choices on how to deliver that installation to your clients (WDS boot.wim, bootable CD/DVD, bootable USB key, etc).
Out of the box, it's really not that difficult to build a quick image with some drivers, patches, and applications. Where it shines though is once you dig into making your own custom scripts. The sky is really the limit here. In my previous job, we were using it to deploy a single Windows 7 x64 image to about 1000 machines from multiple hardware vendors including dual-boot MacBooks and iMacs. MDT is really one of my favorite Microsoft products of all time. And did I mention it's free?
The "Microsoft" answer: Windows Deployment Services. When used properly, these images are easily updated with the latest patches, service packs, drivers, and applications. It's very modular by design and can easily adapt to your needs. Unfortunately it takes a team of people to manage. Waaay too much for 1 person to configure/maintain.
Longer answer: It really depends on the scale of your operation. Deploying windows to 10-machines using WDS is a exercise in futility. It is a lot more work than you can imagine. If you're in the habit of provisioning dozens or hundreds of machines... Sure. It works great. The process consists of taking a stock image, throw it at the WDS to customize it to your needs... add additional components... (drivers/patches/servicepacks) and generate the answer-file for your needs... and you're off. It sounds simple... but sadly it's not. Not even slightly. Even knowing how to build a proper WDS setup from scratch... will take you weeks to get configured and setup for your needs. probably be better off building your machines as you have done by creating a "master" machine, then run "sysprep" to make the image generic again, and then blowing that image to all the machines you need. If I'm not mistaken, Symantec Ghost has this option, as well as open-source solutions like Fog which are much easier to maintain.
As a 3rd option, which is sort-of in the middle somewhere... you can make use of tools like nLite (for XP), vLite (for Vista) rt7Lite for (Win7) which allow you to make a "slipstreamed" install disk. Basically, you give it the Windows CD... and it extracts all the bits it needs, then you can customize the installer to make it not ask any dumb questions... and then pre-install drivers/servicepacks/patches into the iso. Once you have the ISO... you can simply burn it to a physical disk & boot off it. It will install all the drivers & such you slip-streamed into the iso. Unfortunately, it won't let you pre-create user accounts & configure network shares & install network printers & such.
As you said you would like to not use WDS, have a look at
Sysprep
. You can install the software / updates you want (but NO drivers!), runsysprep.exe
(located in%SYSTEMROOT%\system32\Sysprep\
), with the generalize option and then image your PC withFOG
or any other imaging solution (Ghost, CloneZilla).Now when you image another machine and when it boots, it will install the required drivers. You can also automate some parts through the "mini-install" with
unattend.xml
(see various articles on the web regarding this).With this method you don't need to use WDS, WindowsPE (even some articles say you have to install it - it's not necessary but it's the way Microsoft wants you to use this).
One way to make "a relatively hardware independent image that can be updated in a virtual environment":
Because the VM can hide a few of the physical hardware differences between one computer and another (different sound cards, etc.), the VM image can be exactly the same between two computers that are different enough that your previous system would require 2 different images.
Several people seems to be doing something very similar to this: How to Boot from a VHD; EasyBCD; openQRM; How to boot an image directly, bypassing the host machines OS; How do I boot a virtual machine image from my network? ; etc.
I'm not sure why these answers are going the route of not using a tool specifically designed for doing this for you. I.e. smartImager or something similar. We used to use MDT and SCCM, then tried a bunch of tools but the time in overhead for updating and making everything was insane. We ended up using smartImager because it was the most automated and had the best interface that was easy. I know there are a few tools out there that do this for you.