Michael Niehaus' Windows and Office deployment ramblings
In the Microsoft Deployment Toolkit (Lite Touch and Zero Touch for SMS 2003), as well as in ConfigMgr 2007, drivers are added just-in-time to a Windows Vista image as it is being deployed (after it is placed on the disk, but before it boots for the first time). This is done using the PKGMGR.EXE utility or the underlying APIs to add new drivers into the Windows Vista driver store, a special directory structure (located in C:\WINDOWS\system32\DriverStore) that Windows Vista uses to hold both in-box drivers and "trusted" third-party drivers.
It's worth noting that after MDT injects the drivers into the driver store, it no longer needs the local copies in C:\Drivers; they will be cleaned up later in the process.
It's also possible to add drivers later, after Windows Vista is up and running (online), using PNPUTIL.EXE, a new utility for interacting with the driver store. (Want to get really fancy? You can even self-sign unsigned drivers. See http://technet2.microsoft.com/windowsserver2008/en/library/4bbbeaa0-f7d6-4816-8a3a-43242d71d5361033.mspx?mfr=true for the details.)
Let's say you just want to see what additional drivers have been added to the driver store. That's pretty easy to do using PNPUTIL.EXE. Just issue this command:
PNPUTIL.EXE -e
This will show a brief listing of all third-party drivers present in the driver store. You can also delete third-party drivers (one at a time) using PNPUTIL.EXE -d, add drivers into the driver store with PNPUTIL.EXE -a, etc.
There are some other driver management improvements in Windows Vista worth mentioning:
It seems to be a common request: You want the MDT Deployment Wizard to show items sorted alphabetically. So here's a simple script to do that:
' First parameter: XML file name' Second parameter: name of the element to sort on, e.g. Name (case-sensitive) If WScript.Arguments.Count <> 2 then WScript.Echo "Usage: cscript.exe SortXML.vbs <filename> <node to sort on>" WScript.Echo "Sample: cscript.exe SortXML.vbs C:\Distribution\Control\Applications.xml Name" WScript.QuitEnd if ' First load the specified XML fileSet oXML = CreateObject("MSXML2.DOMDocument")oXML.PreserveWhiteSpace = trueoXML.Async = falseIf not oXML.Load(WScript.Arguments(0)) then WScript.Echo "Unable to load XML file " & WScript.Arguments(0) & ", aborting" WScript.QuitEnd if ' Populate the XSL transform Set oXSL = CreateObject("MSXML2.DOMDocument") oXSL.loadXML "<xsl:stylesheet version=""1.0"" xmlns:xsl=""http://www.w3.org/1999/XSL/Transform"" >" & _ " <xsl:template match=""@*|node()""><xsl:copy><xsl:apply-templates select=""@*|node()""><xsl:sort select=""" & WScript.Arguments(1) & """ /></xsl:apply-templates></xsl:copy></xsl:template>" & _ "</xsl:stylesheet>" ' Transform the XML and save it back oXML.transformNodeToObject oXSL, oXMLoXML.Save WScript.Arguments(0)
' First parameter: XML file name' Second parameter: name of the element to sort on, e.g. Name (case-sensitive)
If WScript.Arguments.Count <> 2 then WScript.Echo "Usage: cscript.exe SortXML.vbs <filename> <node to sort on>" WScript.Echo "Sample: cscript.exe SortXML.vbs C:\Distribution\Control\Applications.xml Name" WScript.QuitEnd if
' First load the specified XML fileSet oXML = CreateObject("MSXML2.DOMDocument")oXML.PreserveWhiteSpace = trueoXML.Async = falseIf not oXML.Load(WScript.Arguments(0)) then WScript.Echo "Unable to load XML file " & WScript.Arguments(0) & ", aborting" WScript.QuitEnd if
' Populate the XSL transform
Set oXSL = CreateObject("MSXML2.DOMDocument")
oXSL.loadXML "<xsl:stylesheet version=""1.0"" xmlns:xsl=""http://www.w3.org/1999/XSL/Transform"" >" & _ " <xsl:template match=""@*|node()""><xsl:copy><xsl:apply-templates select=""@*|node()""><xsl:sort select=""" & WScript.Arguments(1) & """ /></xsl:apply-templates></xsl:copy></xsl:template>" & _ "</xsl:stylesheet>"
' Transform the XML and save it back
oXML.transformNodeToObject oXSL, oXMLoXML.Save WScript.Arguments(0)
Save this as "SortXML.vbs" and then you can do things like this (substituting appropriate paths for your environment):
cscript.exe SortXML.vbs C:\Distribution\Control\Applications.xml FullName cscript.exe SortXML.vbs C:\Distribution\Control\TaskSequences.xml Name cscript.exe SortXML.vbs C:\Distribution\Control\Drivers.xml Name
cscript.exe SortXML.vbs C:\Distribution\Control\Applications.xml FullName
cscript.exe SortXML.vbs C:\Distribution\Control\TaskSequences.xml Name
cscript.exe SortXML.vbs C:\Distribution\Control\Drivers.xml Name
For safety, make sure you have a backup copy of the file before you do this. And don't do this while the Deployment Workbench is running, as it could overwrite your sorted file.
Unless you've been hiding under a rock, you probably noticed that the final RTM release of Hyper-V was made available today for Windows Server 2008. If you haven't tried Hyper-V yet, you've got to check it out - it's pretty impressive. Now that it is RTM, you no longer have an excuse :-)
John Howard posted a blog entry explaining how to inject the final Hyper-V update into a Windows Server 2008 WIM; read more about that at http://blogs.technet.com/jhoward/archive/2008/06/26/deploying-windows-server-2008-with-slipstreamed-hyper-v-rtm-part-1.aspx. For those of you who are familiar with Microsoft Deployment Toolkit, you probably know that there is an easier way for Lite Touch deployments. Here are the steps:
That's all there is to it: MDT 2008 will automatically inject the appropriate updates into Windows Vista SP1 (x86 or x64) and Windows Server 2008 (x86 or x64) as part of the OS deployment process, so they will be there from the first boot of the OS.
Now if you actually want to install the Hyper-V role, you can do this using the "Install Roles and Features" action. Just add it into your Windows Server 2008 task sequence, check the "Hyper-V" role, and it will be installed.
You'll have to wait for the Hyper-V updates to be available through Windows Update before you can do the same thing with ConfigMgr 2007, but fortunately you won't have to wait long: those updates will be published in the next couple of weeks.
I recently participated in some discussions around Microsoft certifications, which reminded me of how long it has been since I've actually taken a certification exam. So I decided I would get back into it again, and decided to start with something I should be able to handle with little difficulty, considering I've been working with Windows Vista for, well, since before it was even called Windows Vista: exam 70-620, Configuring Windows Vista Client (http://www.microsoft.com/learning/en/us/exams/70-620.mspx). So I scheduled the exam on Friday and walked in this morning, without any preparation except for "real world experience."
There were plenty of questions on the exam that made me cringe, not because of what they were asking but because of how the questions began:
You are an IT professional responsible for supporting PCs for your company. A user in your organization is running Windows Vista Ultimate.
Of course we all know that you would normally want to run Windows Vista Business or Windows Vista Enterprise in your organizations. And they get better:
You are an IT professional responsible for supported PCs for your company. A user in your organization is running Windows Vista Home Basic and would like to upgrade to Windows Vista Ultimate.
Yikes. I don't think I want to work for that company. Overall, though, it wasn't a bad exam and I passed easily, so now I am indeed qualified to configure Windows Vista clients. Aren't you glad? :-) If you are looking to take the exam yourself, be sure to know Windows Defender, Windows Meeting Place, Windows Mail, Internet Explorer add-on configuration, Windows Sidebar, Windows Calendar, Windows Fax and Scan, and connecting to networked video projectors. And then there's the topics that you know will be stressed, like User Account Control, Windows Firewall, network configuration and troubleshooting, Device Manager, etc.
The funniest part: In the "Sectional Results" area of the exam results page, my weakest area was "Installing and Upgrading Windows Vista." Sigh, back to work on the full-time job of installing and upgrading Windows Vista.
It's a Windows XP or Server 2003 image builder's nightmare: a new chipset that needs to be supported by your images. Why is it such a big deal? Because new chipsets mean new drivers, or at least new versions of existing drivers. And that includes new mass storage drivers. And adding a new mass storage driver typically means rebuilding and recapturing your Windows XP and Server 2003 images. (This isn't nearly as big of a deal for Windows Vista and Windows Server 2008 as you can inject these drivers without much fuss.)
The first signs of Intel's newest desktop 4 Series chipsets, which include the X48, G43, G45, P43, and P45, are showing up on the Intel site. First up is an updated Intel Matrix Storage Manager driver (iastor, one of our "favorites"), posted today and downloadable from http://downloadcenter.intel.com/filter_results.aspx?strTypes=all&ProductID=2973. Machines that include these chipsets can't be too far behind.