MDT Forum on Technet December 17, 2009
Posted by tmintner in Announcements, MDT 2010.Tags: MDT, Support
3 comments
If you have MDT related support questions that you don’t think can be answered in a blog comment, come on over to the MDT Forum on Technet. Keith and I both have been answering support questions there.
http://social.technet.microsoft.com/Forums/en-US/mdt/threads
See ya there!
- Tim
Friendly names when Selecting the Domain OU in MDT 2010 December 11, 2009
Posted by keithga in MDT 2010, VBscript.6 comments
Came across a question in a forum recently:
In MDT 2010 when I am in the Deployment Wizard I can select the option to join a domain, enter in my domain and near the bottom I have the option to select my OU with a dropdown menu.
Within my control folder of my deployment share I have a file called DomainOUList.xml that has a long list of all the OUs I want our techs to be able to select from. The structure of the file looks something like this:<DomainOUs>
<DomainOU>OU=Desktops,OU=Accounting,OU=Calgary,DC=MYDOMAIN,DC=AD</DomainOU>
…How can I make it look like this:
Laptops / Accounting / Calgary / MYDOMAIN
…
I did some investigation, and discovered that MDT lacks the ability to display Friendly names in the Domain OU selection on the dialog box. This is a problem all the way back to BDD 2007.
Something I forgot to do.
Updated change
It s quick change to DeployWiz_Initialization.vbs to make the wizard display friendly names rather than the OU style.
First we introduce a new set of functions:
Function AddItemToMachineObjectOUOpt(item) AddItemToMachineObjectOUOptEx item, itemEnd function
Function AddItemToMachineObjectOUOptEx(item,value) Dim oOption
set oOption = document.createElement("OPTION") oOption.Value = value oOption.Text = item MachineObjectOUOptional.Add oOption MachineObjectOUOptionalBtn.style.display = "inline"End function
I personally like to add *EX style function like this, it means that we can reduce the number of changed lines in the code, and keep the old version of the function around for compatibility.
Then later on we modify the code to read the DomainOUList.xml:
iRetVal = oUtility.FindFile( "DomainOUList.xml" , sFoundFile)
if iRetVal = SUCCESS then For each oItem in oUtility.CreateXMLDOMObjectEx( sFoundFile ).selectNodes("//DomainOUs/DomainOU")
if oItem.Attributes.getNamedItem("value") is nothing then AddItemToMachineObjectOUOpt oItem.text else
AddItemToMachineObjectOUOptEx oItem.text, oItem.Attributes.getNamedItem("value").value end if Next
End if
If the DomainOUList.xml file contains a value attribute in the XML file, it will use that for the value, and the node for the Friendly Name:
<DomainOUs> <DomainOU>OU=Desktops,OU=Accounting,OU=Calgary,DC=MYDOMAIN,DC=AD</DomainOU> <DomainOU value="OU=Desktops,OU=Accounting,OU=Calgary,DC=MYDOMAIN,DC=AD" > Domain\Calgary\Accounting\Desktops </DomainOU> </DomainOUs>
Full sample can be found at:
<p>Keith</p>
<address><a href=”http://keithga.com”><span style=”color: #993300;”>Keith Garner</span></a><span style=”color: #993300;”> is a Deployment Specialist with </span><a href=”http://deployment.xtremeconsulting.com/”><span style=”color: #993300;”>Xtreme Consulting Group</span></a></address>
MDT 2010 Application ordering (New Tool) December 9, 2009
Posted by keithga in MDT 2010, PowerShell, VBscript.13 comments
Got an E-Mail from a friend of mine recently:
Are you bored?
Might be a good utility to build. The PowerShell script [..] posted at http://blogs.technet.com/mniehaus/archive/2009/09/09/sorting-the-contents-of-an-mdt-2010-deployment-share.aspx shows how to rearrange the items in a folder – basically, it just reorders the GUIDs in the group and then saves the modified GUID list. The script only does alphabetical sorting, but some might want to manually rearrange – not terribly easy to do in PowerShell, so it would require a real UI.
For most scenarios, I recommend using Application Dependencies to ensure that applications install in the correct order.
I really didn’t think much of it until recently. When I had some applications that could install stand alone, by themselves, however when both were installed, they needed to be installed in a specific order. If I were creating a CustomSettings.ini file, I would manually ensure that the Applications were placed in order. However, if the user selected the applications from the wizard, then there was no way to ensure the order of the apps unless we modified the order within the ApplicationGroups.xml manually. <yuck>
The blog above shows how application ordering can be done. Simply create a temporary sub-folder, an move the items *in order* to the temporary subfolder and then move everything back.
Solution
This solution should work for sorting both Folders and Application Items within MDT 2010. The application is a simple wrapper around the MDT 2010 Powershell provider, and simply makes calls to move Applications and/or folders using Powershell.
User Interface
The wizard will prompt you for the correct MDT 2010 Deployment Share to use. The deployment share must be visible within the MDT 2010 console on the same machine and using the same user account. If you have not opened any MDT 2010 Deployment shares on this computer and this account, please run the MDT 2010 console, and open your Deployment Share.
When selected, the wizard will display a list of all applications and application folders present on the MDT 2010 Deployment share. You may highlight the Application you wish to move, and use the “Move Up” and “Move Down” buttons to rearrange the order of the application.
When you are done, press the “Commit” button to run the Powershell script that performs the re-ordering. The applications will not be sorted until the script has finished running.
The MDT 2010 Powershell Provider will do all the necessary work to ApplicaitonGroups.xml on the back end.
You can view the script by saving the results to a txt file.
Restrictions and Limitations
It is recommended that you backup your MDT 2010 deployment periodically,
You can sort the contents of only one folder at a time.
You can not sort Folders within Application entries. Folders are always displayed first.
Link
License
This tool is provided “as-is”, with no warranties.
You agree not to hold the author, Keith Garner liable for any damages.
This tool is provided “Free of Charge” for “Evaluation” purposes only.
This tool is copyrighted by the author, Keith Garner, and he retains all
ownership, this tool is not public domain.
You are not permitted to redistribute this tool without the express written
consent of the author, Keith Garner.
The license for this tool can be revoked and/or superseded at any time, by the author, Keith Garner.
Of course, you should backup your critical files before running any 3rd party program downloaded off the internet.
By Keith Garner ( http://keithga.com ) – Deployment Consultant – Dec, 2009
Xtreme Consulting Group ( http://deployment.xtremeconsulting.com )
Microsoft Deployment Toolkit 2010 ( http://microsoft.com/deployment )
Copyright Keith Garner (keithga.com), All Rights Reserved.
New for MDT 2010: ZTIDomainJoin.wsf December 8, 2009
Posted by keithga in MDT 2010, VBscript.13 comments
One of the new scripts for MDT 2010 is the ZTIDomainJoin.wsf script. This script will operate like NetDom.exe, Joining the machine to the Domain specified in the customsettings.ini and/or Deployment Wizard.
Normal Process
Before MDT 2010, the variables collected in the wizard for joining the domain were placed directly into the unattend.xml or unattend.txt file. The OS would then perform the join to the domain during (OOBE) Setup.
This tool came about because of several scenarios that could prevent the machine from successfully joining the domain during Windows Setup. For example. If the network did not have DHCP available, Windows Setup is not programmed with the correct Static IP address settings necessary for the Join Domain feature to contact the domain controller. Later on in the Task Sequence Steps, the ZTINICConfig.wsf script would correctly configure the Network Cards, however it was too late for joining the domain.
So we developed a new script ZTIDomainJoin.wsf as a thin wrapper around the WMI call Win32_ComputerSystem:JoinDomainOrWorkgroup(). If the script sees that the machine is already joined to the correct domain, no problem, it continues on, without any errors. However, if the script sees that a request was made to join the domain, and the machine is *not* in that correct domain, then it will attempt to join the domain and reboot. If there is a failure joining the domain, the script will retry up to 3 times before logging a failure and continuing.
Domain Policies that break MDT
Another scenario where this script works well is when a Domain has a Policy that blocks automation. For example a Legal disclaimer at login, or a rename of the local Administrator Account. Either one of these changes will break MDT.
One possible work around in these scenarios is to *remove* the domain join entries in the unattend.xml and unattend.txt templates on your MDT server, or remove the entries in the ZTIConfigure.xml script. Once removed, the ZTIConfigure.wsf script won’t populate the unattend.txt with the correct variables gathered form the CustomSettings.ini file and/or Deployment Wizard.
Then add the ZTIDomainJoin.wsf script near the *end* of the Deployment Task Sequence. Most of the automation will be complete by that point.
Variables
It takes the following variables:
- JoinDomain – Name of domain to join
- DomainAdmin – User Account used to Join Domain (must have permissions to perform Domain Join)
- DomainAdminDomain – Domain of User account used to Join Domain
- DomainAdminPassword – Password used to Join Domain
- MachineObjectOU – Domain OU to join
- DomainErrorRecovery – [Auto|MANUAL|FAIL]
- Auto – Automatically try to Join to the domain, reboot and retry if there is a failure.
- Manual – Stop processing the Task Sequence, and wait for the user to manually join the domain.
- Fail – Stop the Task Sequence if the machine has not joined the domain.
Notes
Fail could be useful if you have applications that *require* the machine to be part of the domain. If for any reason, the machine failed to join the domain, you could call the ZTIDomainJoin.wsf script with the “Fail” Parameter to crash the installation process if the machine is not joined to the domain.
Manual style is a new feature in MDT 2010, where MDT can “Halt” the execution of the Task Sequence, and allow the user the ability to perform manual steps (without the pesky Task Sequence progress bar, which insists that it remain on “top”). Just follow the instructions to restart the task sequence.
Keith
Keith Garner is a Deployment Specialist with Xtreme Consulting GroupUpdates to ZTIWindowsUpdate.wsf December 8, 2009
Posted by keithga in MDT 2010, Troubleshooting, VBscript, Windows 7.3 comments
Hope everyone out there is keeping warm now that December has hit. I’ve been busy during the past few weeks working on a couple of consulting gigs. One Large company, one Medium Sized.
Both of them needed a good jump start getting MDT 2010 up and running in their environments. Like many IT departments out there, they are interested in Windows 7, and MDT 2010 is the de-facto reference design for Windows 7 Deployment.
Medium Sized LiteTouch Deployment
For the Medium Sized Company, we created a MDT 2010 Litetouch system with Windows 7, and packaged up around 50 applications, including the latest versions of: 7-Zip, Adobe Reader, QuickTime, iTunes, Adobe Flash Player, Silverlight, Java Runtime, VLC, Microsoft Office 2007 SP2, Microsoft Office Communicator, Microsoft Live Meeting, Citrix Online Plugin, Rumba, Microsoft App-V Client, and more including several internal tools! We also created a MDT 2010 Litetouch DVD boot media disk for their subsidiary sites, standardizing the desktop images throughout the company.
It then took about a day on-site to configure the server, run the validation tests, and personally go through the documentation and steps with the IT Staff.
Large Litetouch Deployment
For the Large Company, we are moving their existing MDT 2008 Update 1 system to MDT 2010. Remediating any scripts and configuration items as necessary. This is an experienced staff, who just needed an extra set of eyes to help ensure this upgrade goes as quickly and as smoothly as possible. (FYI: They have about 250 Applications defined in MDT 2008)
ZTIWindowsUpdate.wsf
One of the changes we needed to perform today at the Large Company was to fix a couple of bugs in ZTIWindowsUpdate.wsf when calling WSUS servers.
First off, was a fix for the WU_E_PT_EXCEEDED_MAX_SERVER_TRIPS error in WSUS. This is a Large Company, with a well managed WSUS server(lots of updates), and they found out they were hitting the hard 200KB limit during Office Updates. So we needed to code a work around to just call ZTIWindowsUpdate.wsf *again* if the error is returend.
Secondly, since they were *only* using WSUS, we wanted to ensure the the ZTIWindowsUpdate.wsf script did not call Microsoft Update. So I added some code to skip Microsoft Update if the parameter “/SkipMicrosoftUpdate:YES” is on the command line.
We will run some tests tomorrow to ensure it’s performing as expected.
Link
Next
It’s been fun setting up Companies large and small with deployment solutions like MDT 2010! We are available for consulting in 2010, if you would like to get Windows 7 and your MDT 2010 environment up and running quickly, give us a call!
Keith and Tim
Keith Garner is a Deployment Specialist with Xtreme Consulting Group
RIS Style naming with MDT December 7, 2009
Posted by tmintner in MDT 2010.Tags: Computer Name, WDS, GUID, RIS
add a comment
Michael Niehaus has posted a great article on how to do RIS style naming with Active Directory lookup using a web service. This seems to be the most common request we hear about when customers are moving off of RIS to MDT. Check out the article here:
Happy Thanksgiving! November 26, 2009
Posted by tmintner in Announcements.add a comment
Hey Everyone!
Just wanted to wish everyone a very Happy Thanksgiving! We thank you so much for following our blog entries and really appreciate all of your feedback so far.
- Tim Mintner
Missing XML files when using USMT and ConfigMgr SP2 November 25, 2009
Posted by tmintner in System Center Configuration Manager, USMT, Windows 7.Tags: MDT, SCCM, USMT, XML
add a comment
So you just upgraded all of your ConfigMgr 2007 Site Servers to Sp2 and you think you are all ready to deploy Windows 7. You integrate the latest MDT 2010 integration pieces and walk through the wizard to create your task sequence and create your new USMT 4.0 package. You then decide to deploy Windows 7 to one of your existing Windows XP clients and it should migrate all of the user data and install the new OS…right? Well after the installation starts it quickly finishes and doesn’t install Windows 7. After looking through the smsts.log file, you will notice that the task sequence failed on the Capture User State Step with an error message that it cannot find miguser.xml. Closer examination shows that it is looking for the XML file at the root of the package. Looking at the contents of the USMT package, you will notice that the XML files are in the X86 folder or X64 folder. Easy enough to fix, those MDT guys must have pointed the package to the wrong directory. So you modify the package to point to the X86 folder and try it again. Does it work? NO!! This time it fails because it cannot find scanstate.exe. So what in the world is wrong?
Configuration Manager SP2 updates all of the executables that ConfigMgr uses for an OS Deployment. One of the files that is used during a USMT migration is called OSDMigrateUserState.exe. During an OS Deployment this file will be in one of two places. For a New Computer deployment the file will be on Windows PE. If you are doing a Refresh from an existing operating system the file will reside in the client’s local CCM directory. If you just upgraded your site servers to SP2 the client machines won’t have the upgrade OSDMigrateUserState executable. Prior to SP2, that executable had no knowledge of USMT 4 and the directory structure change of USMT. So if you want to use USMT 4 in your ConfigMgr deployments you are going to need to upgrade all of your clients to ConfigMgr Sp2 as well!
This is just one example where mismatched SP1 and SP2 versions on your client machines will cause issues with Windows 7 deployments. As a best practice always make sure you have SP2 fully deployed to all of your site systems AND all of your client computers before starting a Windows 7 deployment.
-Tim Mintner
Understanding the MDT Configuration Database Part 1 November 24, 2009
Posted by tmintner in Database, MDT 2010, System Center Configuration Manager.Tags: Database, MDT, SCCM
13 comments
The MDT Configuration Database has been around since MDT was called Business Desktop Deployment (BDD). Since that time there have been numerous blog posts and articles on how to customize the database, extend the database, or use the database in specific ways to solve specific problems. With all of those articles there doesn’t seem to be a single article that explains what the database is or why you would even want to use it. The MDT documentation even jumps right in and shows you all of the steps that you would do to configure the database and use it to do specific scenarios but the documentation doesn’t cover the basics of what it is or why use it? This is a first in series of blog posts that I will be writing to cover the details of the MDT Configuration Database. In this post, I will cover the basics of the database, why you would want to use it, some of the items that you can configure in the database, and how you will initially get the database installed.
Dynamic Deployment
The entire purpose of the MDT Configuration Database is make your deployments dynamic. Now dynamic means many different things to many different people so lets define that a bit. MDT’s goal is to reduce administrative overhead as much as possible. There has been a lot of advancements in the past few years to allow you to reduce the number of images in your environment in many cases down to two images, one for X86 and one for X64, for your client and server operating systems. Reducing the number of images of just one aspect to reducing the overall administrative overhead with a deployment. With both MDT Lite Touch and System Center Configuration Manager OSD, the number of task sequences in many environments have expanded or the number of steps in the task sequence have increased as administrators add conditional statements in the task sequence for installing specific applications or installing drivers. The MDT Configuration Database is meant to not only reduce the number of images but allow you to use a single task sequence and have that task sequence change dynamically during the deployment based on information retrieved from the database.
Understanding MDT Variables
Before we delve too deeply into the details of the database, we first need to understand how variables work inside of MDT. Everything that is configured inside of the task sequence in MDT matches a variable that can be configured with a value. Let’s take a look at the Validate step in the task sequence:
In this step you can see that you can configure the minimum memory, minimum processor speed, the minimum hard drive space required, and whether or not to deploy the image based on if the existing system is running a Client or Server Operating System. Each one of these configuration items can be configured as variables. Respectively for these items the variables are:
- ImageMemory
- ImageProcessorSpeed
- ImageSize
- VerifyOS
So how was I able to determine which variable to use? The MDT documentation does good job of listing all of the variables that can be set as well as limited descriptions of each of the variables. However if you just want to get a quick list of a specific step in the task sequence you can open up your configured task sequence XML file and look at that specific step. For example the validate step looks like the following in the XML file:
<step type=”BDD_Validate” name=”Validate” successCodeList=”0 3010″ description=”" startIn=”" disable=”false” continueOnError=”false”>
<defaultVarList>
<variable name=”ImageSize” property=”ImageSize”>0</variable>
<variable name=”ImageProcessorSpeed” property=”ImageProcessorSpeed”>800</variable>
<variable name=”ImageMemory” property=”ImageMemory”>512</variable>
<variable name=”VerifyOS” property=”VerifyOS”>CLIENT</variable>
</defaultVarList>
<action>cscript.exe “%SCRIPTROOT%\ZTIValidate.wsf”</action>
</step>
Here you can see in the XML file all of the variables that are associated with the Validate Step.
So now that you have the variables how would you use them? One possible way of using the variables would be to set them in the customsettings.ini file. This is configured by going to the Rules tab in the properties of the Deployment Share or you can just edit the file using notepad by going to the Control directory in the DeploymentShare.
Let’s say that you wanted to set the minimum memory to 1 GB instead of 512 MB. To do that you could edit the task sequence or you could add the following line to the customettings.ini file:
Properties = ImageMemory
ImageMemory = 1024
“Note – to see a full list of variables that MDT can configure open up the ztigather.xml file in the DeploymentShare\Scripts folder. In this case ImageMemory is not defined in ztigather.xml so you can add it by adding ImageMemory to the Properties line in the customsettings.ini”
Now when the validate step runs it will use the value specified in the customsettings.ini instead of the value in the task sequence. In most cases the first value for a variable that gets set will take precedence over any other value.
Adding variables directly to the customsettings.ini is a good start to doing dynamic deployments but if you add in all of the variables you need for every scenario directly into the customsettings.ini you will quickly replace the administrative overhead of managing a huge task sequence with lots of conditional steps with the administrative overhead of managing a huge customsettings.ini file. You also now have to worry about replicating the customsettings.ini out to many different sites, locations, or USB drives. To simplify both the management of the task sequence and the customsettings.ini file you should use the MDT Configuration Database to store your variables. So lets now look at how to set up the database.
Creating the MDT Configuration Database
To create the database you need to navigate to the Database node under the Advanced Configuration node in the Deployment Workbench. Note if you are using ConfigMgr 2007 you will still need to create and manage the database using the Deployment Workbench. MDT can use any Microsoft SQL Server from SQL Server 2000 – SQL Server 2008 including SQL Server Express. To create the database right click on the Database and choose New Database. You will be prompted for the following:
- SQL Server Name – name of your SQL server
- Instance – only needed if you installed SQL without using the default instance or you are using SQL Server Express
- Port – only needed if you are using TCP/IP sockets (not recommended)
- Network Library – Named Pipes or TCP/IP sockets
Let’s talk a little bit about the Network Library. It is HIGHLY recommended that you use Named Pipes over TCP/IP sockets. Unfortunately Windows PE does not have the ability to use integrated security with TCP/IP sockets. That is if you want to use an Active Directory or Windows username and password to connect to the database you must be using Named Pipes. If you use TCP/IP sockets you would need a SQL user account and password.
The next item you will need to provide is the SQL Share. That is a share that MDT uses to authenticate to the server so that integrated security can be used. The share does not need to contain anything, it just needs to exist on the SQL Server.
Now that you have created your database by completing the wizard. You need to configure the CustomSettings.ini to use the database. To do so again right click on the Database node and choose Configure Database Rules. This will start another wizard. For right now just click on Next until you have completed the wizard and your customsettings.ini file will be fully configured to query the database during your deployment. Note if you are using ConfigMgr 2007 with MDT integration, you will need to take the customsettings.ini and place it in your settings package.
Add items to the Database
So now that you have created the database and configured the customsettings.ini to query the database. Expand the Database node and you should see a screen like the following:
MDT allows you to configure settings based on the following:
- Computers – identified by MacAddress, UUID, or Serial Number
- Roles – arbitrary grouping computers (Accounting, Finance, IT, etc.)
- Locations – defined by default gateways
- Make and Model – Computer manufacturer and model specific settings
So lets configure a setting in the database that states for all Dell Latitude E5500 computers the Display Resolution should be 1440 X 900. To do that we would add an entry under Make and Model. Right click on Make and Model and choose New. Enter the following:
- Make – Dell Inc.
- Model – Latitude E5500
Click on the Details Pane and you should see a screen like the following:
Find Xresolution and set the value to 1440. Also set the Yresolution to 900. By clicking on Apply the values will be set and now when the deployment occurs all Dell Latitude E5500 laptops will automatically get the display resolution set. There is nothing to configure in the task sequence or in the customsettings.ini because we already configured the customsettings.ini to query the database earlier.
This is a very simple example of one particular setting. In future posts I will cover more scenarios such as Make and Model application selection, driver selection and Location, Role, and computer specific settings.
Updating your Boot Image
The only thing left for you to do is verify that your boot image contains ADO (Active-X Data Objects). ADO is needed to query a database. In Lite Touch, ADO is configured by default. To verify this go to the properties of your Deployment Share and click on either Windows PE X86 Components or Windows PE x64 Components and verify that ADO is selected under Feature Packs. If it is not, select it and Update your Deployment Share.
For ConfigMgr you will need to create a custom boot image using the MDT provided wizard. Right click on Boot Images and choose Create Boot Image using Microsoft Deployment and walk through the wizard making sure you choose ADO under Feature Packs.
Summary
This post just explained the very basics of why you would want to use the database and how you can set your database up very quickly. There is a lot more that the MDT Configuration Database can provide and automate to make your deployments truly dynamic. Make sure you check back for more posts in the future on some intermediate and advanced posts on the MDT Database.
-Tim Mintner
Understanding USMT with MDT 2010 November 20, 2009
Posted by tmintner in MDT 2010, USMT, Windows 7.Tags: ConfigMgr, hard link, MDT 2010, SCCM, USMT
16 comments
The User State Migration Tool (USMT) is an extremely powerful and essential piece of an Operating System Deployment. With the release of the Windows AIK for Windows 7, USMT 4.0 was made available and includes many great new features such as hard-link migration (for more information on what’s new in USMT 4.0 see this article). MDT 2010 integrates USMT directly into the task sequence for both Lite Touch Installations and Zero Touch Installations. There have been several questions since MDT 2010 was released on how USMT works with MDT and how all of the pieces fit together.
Lite Touch Installation
USMT 4.0
In order to user MDT 2010, you must install the Windows AIK for Windows 7. The Windows AIK now includes USMT 4.0 as a feature of the AIK so there is no longer a separate download required for USMT. When you create your Deployment Share inside of the Deployment Workbench, MDT will create a folder at the root of the deployment share called USMT and copy the USMT files into that folder.
Refresh Scenario
A refresh scenario means that you are deploying an Operating System to a computer that already has an existing Operating System using a task sequence created with the Standard Client Task Sequence. The process is started from within the current Operating System. In a Refresh scenario, the disk is not formatted or partitioned so in most cases, the user data can be saved locally on disk saving time and network bandwidth. During a Lite Touch Installation there are only two steps in the task sequence step that uses USMT. The first step is called Capture User State and the second step is called Restore User State. This step will run a script called ztiuserstate.wsf. The actions that ztiuserstate will be performed are determined by the following factors:
- The Operating System being deployed
- The values provided in CustomSettings.ini for UserDataLocation and UDDIR and UDShare
- The values provided in the Client Deployment Wizard used to start the Task Sequence
If ZTIUserState determines that you are deploying Windows XP it will not be able to use USMT 4.0 and will try to use USMT 3 for the user state migration (more on that later). If you have specified that UserDataLocation = Network and you have also specified a UDDIR and UDShare in the customsettings.ini then USMT will migrate all of the files to a compressed file at the network location you specify. Also if you provide a network location in the Client Deployment Wizard, USMT will migrate the user data to a compressed file at the network location you specify. If UserDataLocation = AUTO and you are not deploying Windows XP, the ztiuserstate script will keep the data local in the MININT folder using hard-link migration. There is no need to do an estimate because the hard-link migration process only requires 250 MB of space on the disk and if you didn’t have that much the process would fail in the validate step.
Replace Scenario
A Replace scenario is made up of two task sequences. The first task sequence is based upon the Standard Client Replace template and the second task sequence is based on the Standard Client task sequence template. The first task sequence is initiated from within the existing Operating System like in a Refresh scenario. The USMT capture process in a Replace scenario works just like a Refresh scenario with one exception, in a Replace scenario the user data can not be stored locally so you must provide a network location to store the User Data.
The second task sequence is started by booting into the Lite Touch boot image and doing a New Computer deployment. The Client Deployment Wizard will ask if you want to restore user state and where the user state is stored. The Restore User State step in the task sequence would then use USMT to restore the user state to the computer being deployed.
USMT 3.01
So if USMT 4 has all these new cool features, why would you ever still want to use USMT 3? Well USMT 4.0 cannot restore user data onto Windows XP. Loadstate.exe from USMT 4.0 will not run on Windows XP. So if you plan on migrating user data to Windows XP you will still need to use USMT 3.01. To use USMT 3.01 you will need to download it from Microsoft. The Deployment Workbench has direct links to both the 32 bit and 64 bit versions of USMT 3.01 in the Components section. After downloading the installation files you will need to place those installations files in the Tools\X86 folder in your Deployment Share for 32 bit installs and Tools\X64 for 64 bit installs.
Refresh Scenario
In a Refresh scenario,the Lite Touch Installation process will be able to determine if the Operating System being deployed is Windows XP. The same factors mentioned above are applicable for USMT 3.01. If the Operating System is Windows XP, the ztiuserstate script will install USMT 3.01 on the computer and then do an estimate to determine how much user data is on the computer. If the amount of user data is less than the amount of disk space needed then ztiuserstate will store the user data on the local disk in the MININT folder. If there is not enough space then the user data will be stored in the UDSHARE and UDDIR locations.
Replace Scenario
A Replace scenario is a little trickier. The Lite Touch Installation process won’t be able to automatically determine what Operating System you are going to be deploying because the Operating System is going to be deployed with a separate task sequence potentially even on a different computer. In a Replace scenario ztiuserstate will use USMT 4.0 by default, however there is one problem with that. User Data backed up with USMT 4 cannot be restored with USMT 3 and USMT 4 cannot be run on Windows XP! So if you are replacing a Windows XP computer with another Windows XP computer, how can you make sure that USMT 3.01 is used? To handle that scenario, MDT has a variable called USMT3. To force the Replace scenario to use USMT 3 you would enter the following into your customsettings.ini:
USMT3 = YES
Zero Touch Installation (ConfigMgr/SCCM)
The USMT process with ZTI is slightly different than the process with Lite Touch. The steps in a ZTI task sequence look like the following for capturing User State:
The MDT integrated task sequence uses the built in actions for Request State Store, Capture User State, Release State Store, and Restore User State. The Ztiuserstate.wsf script is only used in one step: Determine Local or Remote User State.
With ZTI, the version of USMT that is used is solely dependent on the USMT package that is associated with the Determine Local or Remote User State, Capture User State, and Restore User State steps in the task sequence. You will need to create a package that contains the files for either USMT 3.01 or USMT 4.0. Thankfully when you walk through the wizard to create the MDT task sequence in Configuration Manager, the MDT provided wizard will create the USMT 4.0 package for you automatically. If you want to create a USMT 3.01 package you will need to download and install USMT 3.01 on a client computer and use the installation folder in the Program Files folder as the source directory for your package.
USMT 4.0
The version of USMT that you are using for your USMT package will determine what actions the Determine Local or Remote User State will perform. If you are using USMT 4.0 then the Determine Local or Remote User State will set the variable needed to do a hard-link migration and also set a variable called USMTLOCAL =TRUE. The Request State Store and Release State Store steps in the task sequence have a condition on them so that they will only run if USMTLOCAL is not true. That means if you are using USMT 4, the user state will always be local and the State Migration Point will never be used. If you would like to use the State Migration Point instead of using hard-link migration then just disable the Determine Local or Remote UserState step in the task sequence
USMT 3.01
If you are using USMT 3.01 then the Determine Local or Remote User State step will perform a USMT Estimate to determine if there is enough space locally on the disk to store the user data. If there is enough space locally the variable USMTLOCAL is set to TRUE. Again the Request and Release State Store steps are conditional on this variable so if there is not enough room locally the State Migration Point will be used
Summary
Whew..that is a lot of information. As you can see, MDT tries to cover all of the scenarios with USMT whether you are using USMT 4.0 or still deploying Windows XP and need USMT 3.01. Enjoy and happy deploying!
-Tim Mintner