<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://myitforum.com/cs2/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Jeff Huston at myITforum.com</title><link>http://myitforum.com/cs2/blogs/jhuston/default.aspx</link><description>I dunno, it&amp;#39;s like herding cats...</description><dc:language>en</dc:language><generator>CommunityServer 2007.1 SP2 (Build: 31113.47)</generator><item><title>Server Metadata in SCCM</title><link>http://myitforum.com/cs2/blogs/jhuston/archive/2009/07/21/server-metadata-in-sccm.aspx</link><pubDate>Tue, 21 Jul 2009 21:41:00 GMT</pubDate><guid isPermaLink="false">8e8f7986-475c-475d-bdc9-a1b3a63b955b:140012</guid><dc:creator>jhuston</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://myitforum.com/cs2/blogs/jhuston/rsscomments.aspx?PostID=140012</wfw:commentRss><comments>http://myitforum.com/cs2/blogs/jhuston/archive/2009/07/21/server-metadata-in-sccm.aspx#comments</comments><description>&lt;p&gt;&amp;nbsp;It is not uncommon to need additional data to be stored about a server or set of servers.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Who the responsible parties are (owners of the server or applications)&lt;/li&gt;
&lt;li&gt;What applications the server supports (logical business systems that span multiple servers)&lt;/li&gt;
&lt;li&gt;Maintenance information&lt;/li&gt;
&lt;li&gt;And more&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;SCCM does a great job of inventorying the details of a system - the hardware installed, the applications installed, etc.&amp;nbsp; It does not, however, have any mechinsm built in for collecting random bits of data that identify a server as part of a &amp;quot;system&amp;quot; of servers.&amp;nbsp; For instance, you may have a multi-tier app that has a database server, a web front end, and a job server.&amp;nbsp; SCCM clearly identifies the software bits that are installed on each of these servers but does not identify that the servers are related in some way.&lt;/p&gt;
&lt;p&gt;With the tool available in the attachment to this entry, you have the option to add metadata to the server that is captured and can be used in reporting as well as collection assignment for targeting.&lt;/p&gt;
&lt;p&gt;Since this is just metadata, it doesn&amp;#39;t have to be limited to just logical business systems.&amp;nbsp; You can include information such as who the responsible party for a server is or the maintenance window assignement for a server.&amp;nbsp; You can determine which environment a non-production server is a part of.&amp;nbsp; You can be as creative as you wish (or need) to be.&lt;/p&gt;
&lt;p&gt;The attachment has four files in it:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;MetaData_v1.1.1.hta.&amp;nbsp; This is the main application that should be advertised to your systems.&amp;nbsp; It allows for the editing of meta data on each server.&lt;/li&gt;
&lt;li&gt;MetaData.SMS_DEF.MOF.&amp;nbsp; This is an excerpt that should be inserted into your SMS_DEF.MOF file in order to allow SCCM to capture the metadata during hardware inventories.&lt;/li&gt;
&lt;li&gt;MetaData.Reports.MOF.&amp;nbsp; These are some sample reports that you can use that utilize some of the metadata.&amp;nbsp; Some of the reports require a particular categorization to the metadata tags, so you may need to modify them.&lt;/li&gt;
&lt;li&gt;Server MetaData Tool Overview.pdf.&amp;nbsp; This document provides an overview of the tool and how it works.&amp;nbsp; It also provides some ideas for tags and how to format them.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The HTML application, when it is run, does connect up to the management point to read in current tags.&amp;nbsp; It assumes that the SCCM WMI provider is installed on the MP (since it just calls into that structure to identify the current tags).&amp;nbsp; You may need to modify the query portion of the tool to connect to the correct server and if the WMI class name is different in your environment.&amp;nbsp; Since it does do this connection, users who run the tool must have the right to read the SMS_&lt;em&gt;site&lt;/em&gt; WMI repository on the site server.&amp;nbsp; Usually not a big deal - just add them to the SMS Administrators group on the site server (which authorizes the ability to connect to the WMI provider but does not assign permissions within the app itself).&lt;/p&gt;
&lt;p&gt;Let me know if this is useful to you.&lt;/p&gt;&lt;img src="http://myitforum.com/cs2/aggbug.aspx?PostID=140012" width="1" height="1"&gt;</description><enclosure url="http://myitforum.com/cs2/blogs/jhuston/attachment/140012.ashx" length="218960" type="application/x-zip-compressed" /><category domain="http://myitforum.com/cs2/blogs/jhuston/archive/tags/SMS/default.aspx">SMS</category><category domain="http://myitforum.com/cs2/blogs/jhuston/archive/tags/SMS+2003/default.aspx">SMS 2003</category><category domain="http://myitforum.com/cs2/blogs/jhuston/archive/tags/SCCM+2007/default.aspx">SCCM 2007</category><category domain="http://myitforum.com/cs2/blogs/jhuston/archive/tags/HTML+Application/default.aspx">HTML Application</category><category domain="http://myitforum.com/cs2/blogs/jhuston/archive/tags/HTA/default.aspx">HTA</category></item><item><title>Sysprep.inf and SCCM Image Capture</title><link>http://myitforum.com/cs2/blogs/jhuston/archive/2008/04/23/sysprep-inf-and-sccm-image-capture.aspx</link><pubDate>Wed, 23 Apr 2008 15:09:00 GMT</pubDate><guid isPermaLink="false">8e8f7986-475c-475d-bdc9-a1b3a63b955b:115374</guid><dc:creator>jhuston</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://myitforum.com/cs2/blogs/jhuston/rsscomments.aspx?PostID=115374</wfw:commentRss><comments>http://myitforum.com/cs2/blogs/jhuston/archive/2008/04/23/sysprep-inf-and-sccm-image-capture.aspx#comments</comments><description>&lt;p&gt;When using SCCM to capture a computer image (such as under Microsoft Deployment Toolkit 2008), it is sometimes necessary to provide a custom Sysprep.inf file to be used with the Sysprep process (the Prepare Windows for Capture step).&lt;/p&gt;
&lt;p&gt;In our environment, for instance, we do not have the Sysprep process preload all of the built in drivers (the Automatically&amp;nbsp;Build Mass Storage Driver List option) because of the amount of time it takes for that to occur.&amp;nbsp; Instead, we use OEM drivers for most everything.&amp;nbsp; This works great until we get to Virtual Machines (VMware and Microsoft) where drivers are not provided.&amp;nbsp; Instead, we must use the driver from the OS.&amp;nbsp; Since SCCM cannot force in a driver that is originally part of the OS, we must have a custom Sysprep.inf file configured to preload just those specific drivers.&lt;/p&gt;
&lt;p&gt;It is &lt;em&gt;not&lt;/em&gt; obvious, however, where to place that Sysprep.inf.&lt;/p&gt;
&lt;p&gt;We discovered that the Sysprep.inf file should be placed into the SCCM package that holds the Sysprep.exe and associated files.&amp;nbsp; SCCM copies this directory to the hard drive fo the system being captured and will make use of that Sysprep.inf file.&lt;/p&gt;
&lt;p&gt;When &lt;em&gt;deploying&lt;/em&gt; the image, you can specify a &lt;em&gt;diferent&lt;/em&gt; custom sysprep.inf file in place of an unattend.txt file to customize the setup of the system.&amp;nbsp; Under the Microsoft Deployment Toolkit 2008 way of doing things, this &lt;em&gt;deployment&lt;/em&gt; sysprep.inf file is located in the same place as the CustomSettings.ini file.&lt;/p&gt;
&lt;p&gt;Since the original sysprep.inf file used for capture will be replaced with the custom one, you need to make sure that you modify the &lt;em&gt;deployment&lt;/em&gt; sysprep.inf file to include the [Sysprepcleanup] section so that unused drivers will be successfully removed.&amp;nbsp; You can get this section by using IMAGEX to mount a captured image WIM file&amp;nbsp;and locating the Sysprep.inf file in the \Sysprep directory.&amp;nbsp; The section is usually located at the end.&lt;/p&gt;&lt;img src="http://myitforum.com/cs2/aggbug.aspx?PostID=115374" width="1" height="1"&gt;</description><category domain="http://myitforum.com/cs2/blogs/jhuston/archive/tags/SCCM+2007/default.aspx">SCCM 2007</category><category domain="http://myitforum.com/cs2/blogs/jhuston/archive/tags/Microsoft+Deployment+Toolkit+2008/default.aspx">Microsoft Deployment Toolkit 2008</category></item><item><title>Problem with Software Updates and New SCCM Child Sites</title><link>http://myitforum.com/cs2/blogs/jhuston/archive/2008/02/14/problem-with-software-updates-and-new-sccm-child-sites.aspx</link><pubDate>Thu, 14 Feb 2008 13:41:00 GMT</pubDate><guid isPermaLink="false">8e8f7986-475c-475d-bdc9-a1b3a63b955b:112626</guid><dc:creator>jhuston</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://myitforum.com/cs2/blogs/jhuston/rsscomments.aspx?PostID=112626</wfw:commentRss><comments>http://myitforum.com/cs2/blogs/jhuston/archive/2008/02/14/problem-with-software-updates-and-new-sccm-child-sites.aspx#comments</comments><description>&lt;p&gt;In our environment, we recently added two new child sites to our System Center Configuration Manager 2007 hierarchy.&amp;nbsp; The parent site had been running for several months prior to the addition of the child sites.&lt;/p&gt;
&lt;p&gt;While that parent site was up and running, we used it to perform typical software update tasks such as the packaging and deployment of updates.&amp;nbsp; We would create a new update list and deployment for each monthly issuance of updates from Microsoft.&amp;nbsp; Rather than make monthly deployment packages, the patches were downloaded to a single annual package (thus 2007-10, 2007-11, and 2007-12 were sourced out of the 2007 deployment package).&lt;/p&gt;
&lt;p&gt;All was working just fine until I added the child sites.&lt;/p&gt;
&lt;p&gt;The child sites are automatically configured to have WSUS synchronize from the parent site&amp;#39;s WSUS server.&amp;nbsp; This part worked out just fine.&amp;nbsp; The child WSUS server obtained the list of updates successfully.&amp;nbsp; The break in the process, however, came with the synchronization&amp;nbsp;of the SCCM database.&lt;/p&gt;
&lt;p&gt;With the parent site, the SCCM database gets its data from the local WSUS server.&amp;nbsp; The child sites, however, get their database data from the parent SCCM database rather than the WSUS server.&amp;nbsp; This means that the child sites separate the WSUS synchronization from the database synchronization.&lt;/p&gt;
&lt;p&gt;The SCCM database table that holds the lionshare of the data for the software updates process is the CI_ConfigurationItems table.&amp;nbsp; This table holds records for each update known to the system as well as each of the update lists, deployments, and deployment packages definitions.&amp;nbsp; Part of these definitions indicate when a particular update is superseded by another and when an update is expired.&lt;/p&gt;
&lt;p&gt;There does seem to be a mechanism to tombstone entries so that they are properly replicated, but the tombstone lifetime does not appear to be sufficient.&amp;nbsp; It is unclear which &lt;strong&gt;Delete Aged&amp;nbsp;XX Data&lt;/strong&gt; site maintenance task is responsible for getting rid of the data, but in my case, the expired data had been removed from the system.&lt;/p&gt;
&lt;p&gt;Now because I had been using the parent site for longer than the tombstone lifetime, I still had packages, deployments, and update lists that referred to data that was no longer present (or at least would not replicate to the child site).&amp;nbsp; Because of this, the child site would not correctly replicate the package or deployment.&amp;nbsp; Even though all other updates were available and valid, the child site would not allow the replication to succeed.&amp;nbsp; This was a huge problem.&lt;/p&gt;
&lt;p&gt;At first, I tried forcing the CI_ConfigurationItems table to re-replicate (I updated the LastModifiedBy text field on all rows).&amp;nbsp; The replication process was kicked off successfully (it took 4-5 hours to complete), but I was still missing the data.&amp;nbsp; On the child site, the &lt;strong&gt;objreplmgr.log&lt;/strong&gt; file would contain records similar to &lt;strong&gt;Referenced configuration items are not available yet&lt;/strong&gt; and list the unique identifiers for the item that was needed.&amp;nbsp; In addition, the inboxes\objmgr.box\INCOMING\Retry folder would have a large number of .CID files in it.&amp;nbsp; Obviously there was some problem here.&lt;/p&gt;
&lt;p&gt;Turns out, the problem was the expired updates.&amp;nbsp; On the parent site, I went through all of the deployment packages, deployments, and update lists and removed the expired updates from them.&amp;nbsp; Once that was completed, the replication was successful and the child sites now had fully registered versions of the lists/deployments/packages.&lt;/p&gt;
&lt;p&gt;So, the lesson here is to find those expired updates and remove them from the referencing lists before you add any child sites.&amp;nbsp; Theoretically, the tombstoning &lt;em&gt;should&lt;/em&gt; catch it properly when a child site exists, but that still bears some discovery to see if that part works (I have my doubts as I have the system downloading definition updates every few hours, which would expire previous updates and the IsTombstoned flag is never set in the database table).&lt;/p&gt;
&lt;p&gt;Long post, but hopefully this will help someone else out there.&lt;/p&gt;&lt;img src="http://myitforum.com/cs2/aggbug.aspx?PostID=112626" width="1" height="1"&gt;</description><category domain="http://myitforum.com/cs2/blogs/jhuston/archive/tags/SCCM+2007/default.aspx">SCCM 2007</category></item><item><title>OPINION: Software Updates or Software Deployments</title><link>http://myitforum.com/cs2/blogs/jhuston/archive/2007/12/20/opinion-software-updates-or-software-deployments.aspx</link><pubDate>Thu, 20 Dec 2007 20:18:00 GMT</pubDate><guid isPermaLink="false">8e8f7986-475c-475d-bdc9-a1b3a63b955b:109416</guid><dc:creator>jhuston</dc:creator><slash:comments>2</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://myitforum.com/cs2/blogs/jhuston/rsscomments.aspx?PostID=109416</wfw:commentRss><comments>http://myitforum.com/cs2/blogs/jhuston/archive/2007/12/20/opinion-software-updates-or-software-deployments.aspx#comments</comments><description>&lt;p&gt;Under SCCM (and SMS), there are two different methods for the deployment of software &amp;quot;bits&amp;quot; to an end-user&amp;#39;s system.&amp;nbsp; These two different methods have clear distinctions in how they operate and what they should be used for, but there is a gray area between them that can be a bit muddled to deal with.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Software Updates&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The Software Update system in SCCM is designed, primarily, for the distribution of binary patches to existing software.&amp;nbsp; The most obvious example are Microsoft security updates.&amp;nbsp; These updates are installed in, essentially, a non-interactive mode and return a simple numeric exit code to determine success, reboot needed, or failure.&amp;nbsp; SCCM has a built in detection mechanism and uses state messages to track the progress of deployment.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Software Deployments&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The Software Deployment subsystem, however, is designed to distribute full software packages - especially new installations.&amp;nbsp; Software is expected to return either an exit code or a MIF file to determine status.&amp;nbsp; Deployments are targeted to collections of computers that must use membership queries (based on inventory) to determine applicability of the package.&amp;nbsp; For instance, if the primary console user of a machine is in a particular user group, deploy (or offer to deploy) the ACME Widget software.&lt;/p&gt;
&lt;p&gt;The gray area starts to show up when a software update is provided as a full software package.&amp;nbsp; Think of Apple QuickTime Player or Adobe Reader as examples.&amp;nbsp; Although IT staff wish to deploy the updated version due to security vulnerabilities, they are faced with deploying a full product.&lt;/p&gt;
&lt;p&gt;Most of these products come as a collection of files, which Software Deployments are good at delivering.&amp;nbsp; However, in many cases, those files can be collected into a self-extracting executable (such as one created by the SMS Installer), which is what is required by Software Updates.&lt;/p&gt;
&lt;p&gt;Since it is an update, it is tempting to use Software Updates to determine its applicability and handle the deployment.&amp;nbsp; The rules provided by Software Updates, however, are essentially the same as what is available to collections for Software Deployments (registry keys, file information, WMI lookups).&lt;/p&gt;
&lt;p&gt;What doesn&amp;#39;t help the matter is when vendors provide what are essentially full software installs as Software Updates.&amp;nbsp; Dell does this.&amp;nbsp; Even Microsoft does this (such as Windows Live branded products).&lt;/p&gt;
&lt;p&gt;For items that do not come in a catalog (where we would have to use the Custom Updates Publisher), we have chosen to stay faithful (if that is the right term here) to the original purpose of Software Deployments vs Software Updates.&amp;nbsp; &lt;/p&gt;
&lt;p&gt;If the software is a single-file binary patch, it goes through Software Updates.&amp;nbsp; If it is a full version of the software, it goes through Software Deployments.&lt;/p&gt;
&lt;p&gt;Hopefully this advise helps some out there.&lt;/p&gt;&lt;img src="http://myitforum.com/cs2/aggbug.aspx?PostID=109416" width="1" height="1"&gt;</description><category domain="http://myitforum.com/cs2/blogs/jhuston/archive/tags/Patch+Management/default.aspx">Patch Management</category><category domain="http://myitforum.com/cs2/blogs/jhuston/archive/tags/Package+Deployment/default.aspx">Package Deployment</category><category domain="http://myitforum.com/cs2/blogs/jhuston/archive/tags/Deployment/default.aspx">Deployment</category><category domain="http://myitforum.com/cs2/blogs/jhuston/archive/tags/SMS+2003/default.aspx">SMS 2003</category><category domain="http://myitforum.com/cs2/blogs/jhuston/archive/tags/SCCM+2007/default.aspx">SCCM 2007</category></item><item><title>SCCM Maintenance Windows and Software Updates</title><link>http://myitforum.com/cs2/blogs/jhuston/archive/2007/12/18/sccm-maintenance-windows-and-software-updates.aspx</link><pubDate>Tue, 18 Dec 2007 18:08:00 GMT</pubDate><guid isPermaLink="false">8e8f7986-475c-475d-bdc9-a1b3a63b955b:109274</guid><dc:creator>jhuston</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://myitforum.com/cs2/blogs/jhuston/rsscomments.aspx?PostID=109274</wfw:commentRss><comments>http://myitforum.com/cs2/blogs/jhuston/archive/2007/12/18/sccm-maintenance-windows-and-software-updates.aspx#comments</comments><description>&lt;p&gt;SCCM has made huge changes and improvements with software update delivery/installation as well as the introduction of very much needed functionality with service windows.&lt;/p&gt;
&lt;p&gt;However, there are some &amp;quot;gotchas&amp;quot; for maintenance windows that you should be made aware of.&lt;/p&gt;
&lt;p&gt;With regular software deployments, the &lt;strong&gt;maximum runtime&lt;/strong&gt; value is used to determine if the program will be run within a given maintenance window.&amp;nbsp; For software updates, there is no opportunity to input this data.&amp;nbsp; Instead, SCCM has defaulted to a runtime of 35 minutes per software update (75 for each service pack).&amp;nbsp; When the update deployment routine runs, it requires a maintenance window of at least 35 minutes in order to deploy the updates.&lt;/p&gt;
&lt;p&gt;Another gotcha is users that configure their own update installation schedule via the &lt;strong&gt;Configuration Manager&lt;/strong&gt; control panel applet (on the &lt;strong&gt;Updates&lt;/strong&gt; tab).&amp;nbsp; If the user selects a time that is outside of defined maintenance windows, the updates will NOT be installed.&amp;nbsp; It appears that SCCM just treats this as another schedule item and evaluates it like any other running program (with maintence window exclusions in-tact if excluded by the original advertisement).&lt;/p&gt;
&lt;p&gt;Finally, software update deployments that have a grace period of, say two weeks, assigned to computers with a maintenance window between the original advertisement and the mandatory deadline will not install automatically during one of the intervening maintenance periods.&amp;nbsp; The software updates will only be automatically installed once the mandatory deadline has been exceeded (during the next maintenance window).&amp;nbsp; If you have laptop computers, this may prove to be challenging to setup correctly and to establish end-user expectations.&amp;nbsp; For example, if the mandatory period is set for Thursday night at midnight (during a maintenance window), if a computer is on, it will be patched and rebooted.&amp;nbsp; If the computer was off during the maintenance period but comes on the following morning, one of two things will happen.&amp;nbsp; If the exclusion to only run during maintenance windows is enabled, the laptop will not get the updates.&amp;nbsp; If the exclusion is to run anytime after the mandatory date is reached, the computer will get the patches and potentially reboot (if that exclusion is also enabled).&lt;/p&gt;&lt;img src="http://myitforum.com/cs2/aggbug.aspx?PostID=109274" width="1" height="1"&gt;</description></item><item><title>Scripts in SCCM 2007 DCM Configuration Items</title><link>http://myitforum.com/cs2/blogs/jhuston/archive/2007/12/14/scripts-in-sccm-2007-dcm-configuration-items.aspx</link><pubDate>Fri, 14 Dec 2007 22:42:00 GMT</pubDate><guid isPermaLink="false">8e8f7986-475c-475d-bdc9-a1b3a63b955b:109117</guid><dc:creator>jhuston</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://myitforum.com/cs2/blogs/jhuston/rsscomments.aspx?PostID=109117</wfw:commentRss><comments>http://myitforum.com/cs2/blogs/jhuston/archive/2007/12/14/scripts-in-sccm-2007-dcm-configuration-items.aspx#comments</comments><description>&lt;p&gt;DCM in SCCM 2007 allows the administrator to use scripts to detect if a particular configuration item is applicable as well as if a particular setting is valid.&amp;nbsp; Unfortunately, the documentation that comes with the product does not show how to author the scripts to make it work.&amp;nbsp; I found the info in the beta version of the SCCM SDK (thanks to Wally Mead for the clue) and I wanted to share with you what I&amp;#39;ve found.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Detection Method Scripts&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;For Application configuration items, you can specify a script to determine if an application is installed (as opposed to an MSI installation GUID).&amp;nbsp; To do that, simply create a script that returns any kind of text.&amp;nbsp; If text is returned, DCM believes that the application is installed.&amp;nbsp; If no text is returned, DCM believes that the application is not installed.&lt;/p&gt;
&lt;p&gt;For example, I&amp;#39;ve created a configuration item that ensures that any Intel NICs installed in Windows XP workstations is set to AUTO.&amp;nbsp; In order to do this, I need to know if the Intel NIC is installed.&amp;nbsp; I use the following script to do this:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Set WMI = GetObject(&amp;quot;winmgmts:\\.\root\cimv2&amp;quot;)&lt;br /&gt;Set RS = WMI.ExecQuery(&amp;quot;SELECT * FROM Win32_PNPEntity WHERE DeviceID like &amp;#39;PCI\\VEN_8086&amp;amp;DEV_109A%&amp;#39;&amp;quot;)&lt;br /&gt;If RS.Count &amp;gt; 0 Then WScript.Echo &amp;quot;Device Found&amp;quot;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;You can see that if a matching device is found, text is returned, causing DCM to continue processing the configuration item.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Setting Scripts&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;For setting validation scripts, DCM treats text returned as the &amp;quot;value&amp;quot; of the script.&amp;nbsp; This is similar to looking at a REG_SZ registry key.&amp;nbsp; You can evaluate based on the specific text returned to return an Information, Warning, or Error level event.&amp;nbsp; In addition, you can ensure that &lt;em&gt;some&lt;/em&gt; string is returned by setting the Report a non-compliance event if&amp;nbsp;the instance count fails and set the requirement to be Greater than 0.&lt;/p&gt;
&lt;p&gt;For the same example, here is the script used:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;#39;This script will check the speed duplex setting&lt;br /&gt;&amp;#39;&lt;br /&gt;DeviceIDs = Array(&amp;quot;pci\ven_8086&amp;amp;dev_109a&amp;quot;)&lt;br /&gt;&amp;#39;&lt;br /&gt;Set REG = GetObject(&amp;quot;winmgmts://./root/default:StdRegProv&amp;quot;)&lt;br /&gt;&amp;#39;&lt;br /&gt;Const HKLM = &amp;amp;H80000002&lt;br /&gt;Const Root = &amp;quot;SYSTEM\CurrentControlSet\Control\Class\{4D36E972-E325-11CE-BFC1-08002bE10318}&amp;quot;&lt;br /&gt;&amp;#39;&lt;br /&gt;&amp;#39;Enum configuration subkeys&lt;br /&gt;REG.EnumKey HKLM, Root, ConfigKeys&lt;br /&gt;&amp;#39;&lt;br /&gt;&amp;#39;Look for matching device id&lt;br /&gt;For Each ConfigKey in ConfigKeys&lt;br /&gt;&amp;nbsp;MDID = &amp;quot;&amp;quot;&lt;br /&gt;&amp;nbsp;On Error Resume Next&lt;br /&gt;&amp;nbsp;REG.GetStringValue HKLM, Root &amp;amp; &amp;quot;\&amp;quot; &amp;amp; ConfigKey, &amp;quot;MatchingDeviceID&amp;quot;, MDID&lt;br /&gt;&amp;nbsp;On Error Goto 0&lt;br /&gt;&amp;nbsp;For Each DID in DeviceIDs&lt;br /&gt;&amp;nbsp;&amp;nbsp;If Left(UCase(MDID),Len(DID)) = UCase(DID) Then&lt;/p&gt;
&lt;p&gt;&amp;#39;Check the speed setting here&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;REG.GetStringValue HKLM, Root &amp;amp; &amp;quot;\&amp;quot; &amp;amp; ConfigKey, &amp;quot;SpeedDuplex&amp;quot;, SD&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;If SD = &amp;quot;0&amp;quot; Then&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;WScript.Echo &amp;quot;Set correctly&amp;quot;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;End If&lt;br /&gt;&amp;nbsp;&amp;nbsp;End If&lt;br /&gt;&amp;nbsp;Next&lt;br /&gt;Next&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;For the Validation tab, I&amp;#39;m checking that the string returned is &amp;quot;Set correctly&amp;quot; and that there is at least 1 string returned.&lt;/p&gt;
&lt;p&gt;Hope that this helps!&lt;/p&gt;&lt;img src="http://myitforum.com/cs2/aggbug.aspx?PostID=109117" width="1" height="1"&gt;</description><category domain="http://myitforum.com/cs2/blogs/jhuston/archive/tags/SCCM+2007/default.aspx">SCCM 2007</category></item><item><title>Dell PowerEdge R900 in BDD</title><link>http://myitforum.com/cs2/blogs/jhuston/archive/2007/12/13/dell-poweredge-r900-in-bdd.aspx</link><pubDate>Thu, 13 Dec 2007 14:13:00 GMT</pubDate><guid isPermaLink="false">8e8f7986-475c-475d-bdc9-a1b3a63b955b:109044</guid><dc:creator>jhuston</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://myitforum.com/cs2/blogs/jhuston/rsscomments.aspx?PostID=109044</wfw:commentRss><comments>http://myitforum.com/cs2/blogs/jhuston/archive/2007/12/13/dell-poweredge-r900-in-bdd.aspx#comments</comments><description>&lt;p&gt;We are starting to deploy the new Quad-Quad Dell R900 servers here (16 cores) via BDD 2007.&amp;nbsp; We have had great success with the Dell PowerEdge 2950, which uses a similar Braodcom dual-driver NetXtreme II 1GigE net card.&lt;/p&gt;
&lt;p&gt;For the 2950, we would run a &lt;a class="" href="http://myitforum.com/cs2/blogs/jhuston/archive/2007/04/26/hardware-device-enumeration-and-driver-installation-in-windows-pe-2-0.aspx" target="_blank"&gt;custom script&lt;/a&gt; in Windows PE to load both halves of the driver stack (since Win PE does not detect newly attached PnP devices).&amp;nbsp; The drivers that worked for the 2950 would NOT work for the R900.&lt;/p&gt;
&lt;p&gt;Dell, unfortunately, did not make drives available for the R900 in a format that could be used.&amp;nbsp; Via their support site, I could download the installer package for the drivers, but it attempts to actually install the drivers, not just deliver them in a flat directory for me to import into BDD.&amp;nbsp; What to do?&lt;/p&gt;
&lt;p&gt;I downloaded the CD-ROM ISO that Dell provides for OS installation.&amp;nbsp; This CD would normally be used by booting off of it and running through a little wizard to configure an UNATTEND.TXT file, then swapping it out for the OS CD/DVD upon which the installation completes.&amp;nbsp; Obviously, the drivers for the system must be in there somewhere.&lt;/p&gt;
&lt;p&gt;Buried on the CD was a tool to handily extract said drivers for me.&amp;nbsp; Buried in the Server_Assistant\Driver_Tool\Bin directory (from the 5.3 version of the CD) was a tool called &lt;strong&gt;make_driver_dir.exe&lt;/strong&gt;.&amp;nbsp; This tool would take a couple of parameters and provide a directory of extracted drivers for a given server model and operating system.&amp;nbsp; The CD supports all 6th generation servers up through the current models and for the following operating systems:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;div&gt;Red Hat Linux in 32-bit (&lt;strong&gt;rh30, rh40, rh50&lt;/strong&gt;) and 64-bit (&lt;strong&gt;rh30_64, rh40_64, rh50_64&lt;/strong&gt;) versions&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;SUSE Linux in 64-bit (&lt;strong&gt;suse9_64, suse10_64&lt;/strong&gt;) versions&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;VMware ESX (&lt;strong&gt;esx310&lt;/strong&gt;)&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;Windows 2000 (&lt;strong&gt;w2000&lt;/strong&gt;)&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;Windows 2003 (&lt;strong&gt;w2003, w2003_64, w2003sbs&lt;/strong&gt;)&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;Windows 2008 (&lt;strong&gt;w2008, w2008_64, winlh, winlh_64&lt;/strong&gt;)&lt;/div&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;The nicknames listed in bold are the OS names to use with the tool to extract drivers.&lt;/p&gt;
&lt;p&gt;Using this tool, I was able to obtain working Broadcom drivers that work for the system.&amp;nbsp; In addition, I changed &lt;em&gt;how&lt;/em&gt; I install those drivers.&lt;/p&gt;
&lt;p&gt;For Windows PE, I am now making use of the monolithic stack drivers (the RIS driver) since I now have a version that is 64-bit.&amp;nbsp; I had to clean up the INF file a bit before importing it into the BDD Workbench (remove the empty sections 64-bit sections from the 32-bit driver and the empty 32-bit sections from the 64-bit driver).&amp;nbsp; When will manufacturer&amp;#39;s learn?&lt;/p&gt;
&lt;p&gt;For the OS build, I now include the virtual bus driver (which is tied to the actual PCI device ID) in my SYSPREP.INF file (along with RAID card drivers).&amp;nbsp; This causes that driver layer to be pre-installed for deployment and will be removed if not needed (just like unusued RAID cards).&amp;nbsp; In addition, the Broadcom NIC drivers (that associate with the virtual device ID) are located in a static directory that is referenced in Sysprep&amp;#39;s OEMDriverFiles search path.&amp;nbsp; This was done because BDD only includes drivers for devices that it enumerates while under Windows PE (which would exclude the virtual NIC device).&lt;/p&gt;
&lt;p&gt;So, with all of that done, my Windows PE deployment is much more streamlined and I can successfully deploy to R900 (and 2950) servers.&lt;/p&gt;&lt;img src="http://myitforum.com/cs2/aggbug.aspx?PostID=109044" width="1" height="1"&gt;</description><category domain="http://myitforum.com/cs2/blogs/jhuston/archive/tags/Guidance/default.aspx">Guidance</category><category domain="http://myitforum.com/cs2/blogs/jhuston/archive/tags/BDD+2007/default.aspx">BDD 2007</category></item><item><title>HAL Replacement in BDD</title><link>http://myitforum.com/cs2/blogs/jhuston/archive/2007/08/09/hal-replacement-in-bdd.aspx</link><pubDate>Thu, 09 Aug 2007 17:25:00 GMT</pubDate><guid isPermaLink="false">8e8f7986-475c-475d-bdc9-a1b3a63b955b:104794</guid><dc:creator>jhuston</dc:creator><slash:comments>5</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://myitforum.com/cs2/blogs/jhuston/rsscomments.aspx?PostID=104794</wfw:commentRss><comments>http://myitforum.com/cs2/blogs/jhuston/archive/2007/08/09/hal-replacement-in-bdd.aspx#comments</comments><description>&lt;p&gt;Many of you folks probably attended the session at TechEd on building a single master image.&amp;nbsp; There was a sample script in there about replacing the HAL.&amp;nbsp; Based on that script and other knowledge gleened around the internet, I&amp;#39;ve created a BDD-compliant script that will replace the HAL.&lt;/p&gt;
&lt;p&gt;Please see the script in the attached ZIP file.&lt;/p&gt;
&lt;p&gt;To use the script, save it to the Scripts directory in the Distribution$ share, and then add it to the task sequence in the PostInstall phase (I have it nudged between the Configure and Install Drivers tasks).&lt;/p&gt;
&lt;p&gt;The script will examine the HAL being used by Windows PE (which indicates if the chipset is PIC or APIC) as well as the number of processors installed (via WMI).&amp;nbsp; Based on that information (along with whether the target system is 32-bit or 64-bit), it will update the Sysprep.inf file with the appropriate command (UpdateUPHAL or UpdateHAL) as well as copy over the correct HAL.DLL and NTOSKRNL.EXE images (so that mini-setup can boot).&lt;/p&gt;
&lt;p&gt;Give it a whack and let me know if you have any issues.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;strong&gt;UPDATE 9/4/2007&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;I found an error in the script when it is run against a flat-file installation (i.e., when creating an image).&amp;nbsp; I&amp;#39;ve posted an updated version of the script that should correct that error.&lt;/p&gt;&lt;img src="http://myitforum.com/cs2/aggbug.aspx?PostID=104794" width="1" height="1"&gt;</description><enclosure url="http://myitforum.com/cs2/blogs/jhuston/attachment/104794.ashx" length="2176" type="application/x-zip-compressed" /><category domain="http://myitforum.com/cs2/blogs/jhuston/archive/tags/BDD+2007/default.aspx">BDD 2007</category><category domain="http://myitforum.com/cs2/blogs/jhuston/archive/tags/Deployment/default.aspx">Deployment</category><category domain="http://myitforum.com/cs2/blogs/jhuston/archive/tags/VBScript/default.aspx">VBScript</category></item><item><title>SMS Schedule Token Strings</title><link>http://myitforum.com/cs2/blogs/jhuston/archive/2007/07/30/sms-schedule-token-strings.aspx</link><pubDate>Mon, 30 Jul 2007 20:19:00 GMT</pubDate><guid isPermaLink="false">8e8f7986-475c-475d-bdc9-a1b3a63b955b:104543</guid><dc:creator>jhuston</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://myitforum.com/cs2/blogs/jhuston/rsscomments.aspx?PostID=104543</wfw:commentRss><comments>http://myitforum.com/cs2/blogs/jhuston/archive/2007/07/30/sms-schedule-token-strings.aspx#comments</comments><description>&lt;p&gt;In many places, SMS uses a 16 character string to represent one of the SMS_ST schedule token WMI class objects.&amp;nbsp; SMS provides a way to convert between the textual representation and the WMI object via the SMS_ScheduleMethods object.&lt;/p&gt;
&lt;p&gt;Unfortunately, this object is only available via the site server.&amp;nbsp; Unless you wish to allow all of your users and machines to directly access the WMI on your site server (not recommended), you are at a loss as to how to convert these strings into useful data.&lt;/p&gt;
&lt;p&gt;Well, I took the time to reverse engineer the text strings into their objects and have provided some documentation on how the 16 character interval string is formulated (see the attachment).&amp;nbsp; In addition, in the attached document, is sample VBScript code to encode and decode these strings.&amp;nbsp; Take a gander.&amp;nbsp; Let me know if you have any questions.&lt;/p&gt;
&lt;p&gt;Note that this may change for SCCM 2007 (since the string itself is undocumented for SMS 2003).&lt;/p&gt;&lt;img src="http://myitforum.com/cs2/aggbug.aspx?PostID=104543" width="1" height="1"&gt;</description><enclosure url="http://myitforum.com/cs2/blogs/jhuston/attachment/104543.ashx" length="122880" type="application/msword" /><category domain="http://myitforum.com/cs2/blogs/jhuston/archive/tags/Scheduling/default.aspx">Scheduling</category><category domain="http://myitforum.com/cs2/blogs/jhuston/archive/tags/SMS+2003/default.aspx">SMS 2003</category><category domain="http://myitforum.com/cs2/blogs/jhuston/archive/tags/VBScript/default.aspx">VBScript</category></item><item><title>Hardware Device Enumeration and Driver Installation in Windows PE 2.0</title><link>http://myitforum.com/cs2/blogs/jhuston/archive/2007/04/26/hardware-device-enumeration-and-driver-installation-in-windows-pe-2-0.aspx</link><pubDate>Thu, 26 Apr 2007 17:53:00 GMT</pubDate><guid isPermaLink="false">8e8f7986-475c-475d-bdc9-a1b3a63b955b:101469</guid><dc:creator>jhuston</dc:creator><slash:comments>2</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://myitforum.com/cs2/blogs/jhuston/rsscomments.aspx?PostID=101469</wfw:commentRss><comments>http://myitforum.com/cs2/blogs/jhuston/archive/2007/04/26/hardware-device-enumeration-and-driver-installation-in-windows-pe-2-0.aspx#comments</comments><description>&lt;p&gt;Microsoft Windows PE 2.0 is an improvement over the previous versions of Windows PE.&amp;nbsp; This new version is built on the Vista kernel and has updated components.&amp;nbsp; But with this upgrade come a couple of caveats.&lt;/p&gt;
&lt;p&gt;In PE 1.x, there was a difference between factory -minint and factory -winpe in how plug and play&amp;nbsp;device enumeration and driver installation was handled.&amp;nbsp; With the -minint switch, the enumeration occurred only once.&amp;nbsp; With the -winpe switch, enumeration was much more exhaustive.&lt;/p&gt;
&lt;p&gt;My example where this makes a difference is the Broadcom NetXtreme II Gigabit Ethernet NICs (specifically in Dell PowerEdge x950 servers, but also in models from HP and others).&amp;nbsp; This NIC has a dual-layer driver model.&amp;nbsp; Essentially, there is one driver (matched to the hardware&amp;#39;s PCI device ID) that creates a virtual driver bus.&amp;nbsp; A second driver is necessary (matched to the virtual bus&amp;#39;s device ID for the NIC) that is the actual network layer driver.&amp;nbsp; This was done so that the NIC could be used as an iSCSI interface (same VBD driver matched to the physical layer but a different top-level driver).&lt;/p&gt;
&lt;p&gt;With -minint, the VBD driver would be installed but the driver for the NIC itself would not be loaded.&amp;nbsp; With -winpe, an exhaustive check was performed that would catch the &amp;quot;installation&amp;quot; of the new virtual bus, enumerate it, and then install the network layer driver.&lt;/p&gt;
&lt;p&gt;Windows PE 2.0 no longer has the -minint or the -winpe switches.&amp;nbsp; Instead, it appears (in my experience) to operate equivalent to the -minint switch mode -- it will only install drivers for devices found during the initial enumeration.&lt;/p&gt;
&lt;p&gt;In a previous post, I mentioned the use of HWPNP.EXE from Paraglider to work around this issue.&amp;nbsp; I found this utility from the Bart&amp;#39;s PE build documentation.&amp;nbsp; This utility works well and quickly.&amp;nbsp; However, it only works under 32-bit Windows PE 2.0.&amp;nbsp; I do not know if they plan on providing a 64-bit version in the future, but it became necessary for me to have something that would work under 64-bit Windows PE 2.0 (because I was in the process of installing Windows Server 2003 Enterprise x64 which requires a 64-bit PE shell to launch from).&lt;/p&gt;
&lt;p&gt;So, I took the idea of what HWPNP does and coded it up as a VB script file.&amp;nbsp; Essentially this file locates the INF directory in Windows PE 2.0, enumerates the INF files and builds a list of device IDs that are supported by those INF files.&amp;nbsp; Then it enumerates all devices via WMI and, if no driver is currently installed, it uses the DRVLOAD command to attempt to load the matching driver (via the discovered INF files).&amp;nbsp; It then repeats this process until it has enumerated through the WMI list and not installed a driver.&lt;/p&gt;
&lt;p&gt;Save the attached TXT file and change the extension .WSF.&amp;nbsp; In our environment, we have modified the UNATTEND.XML file for the Windows PE build so that it calls the script prior to either launching a command prompt (or in the case of BDD, launching the wizard).&amp;nbsp; That way, network and devices are present for the BDD driver injection scripts.&lt;/p&gt;&lt;img src="http://myitforum.com/cs2/aggbug.aspx?PostID=101469" width="1" height="1"&gt;</description><enclosure url="http://myitforum.com/cs2/blogs/jhuston/attachment/101469.ashx" length="6412" type="text/html" /><category domain="http://myitforum.com/cs2/blogs/jhuston/archive/tags/Guidance/default.aspx">Guidance</category><category domain="http://myitforum.com/cs2/blogs/jhuston/archive/tags/BDD+2007/default.aspx">BDD 2007</category><category domain="http://myitforum.com/cs2/blogs/jhuston/archive/tags/Automation/default.aspx">Automation</category><category domain="http://myitforum.com/cs2/blogs/jhuston/archive/tags/Deployment/default.aspx">Deployment</category></item><item><title>BDD Task Sequences Stink; Well, No They Don't; Well, Maybe</title><link>http://myitforum.com/cs2/blogs/jhuston/archive/2007/02/15/bdd-task-sequences-stink-well-no-they-don-t-well-maybe.aspx</link><pubDate>Thu, 15 Feb 2007 18:28:00 GMT</pubDate><guid isPermaLink="false">8e8f7986-475c-475d-bdc9-a1b3a63b955b:99118</guid><dc:creator>jhuston</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://myitforum.com/cs2/blogs/jhuston/rsscomments.aspx?PostID=99118</wfw:commentRss><comments>http://myitforum.com/cs2/blogs/jhuston/archive/2007/02/15/bdd-task-sequences-stink-well-no-they-don-t-well-maybe.aspx#comments</comments><description>&lt;P&gt;Interesting title.&amp;nbsp; I guess you can see my frustration with task sequences as they are used in BDD 2007.&amp;nbsp; The Deployment Workbench is where the problem lies, especially in how it lets you screw up task sequences.&lt;/P&gt;
&lt;P&gt;The task sequencing is a powerful feature of BDD 2007 (and SCCM 2007) and it definitely has its place.&amp;nbsp; The problem comes with the way that DW lets you add items to it and how those items become "disconnected".&amp;nbsp; Specifically, I'm talking about applications here.&lt;/P&gt;
&lt;P&gt;I started out using the task sequence for my build to add in my custom applications that I wanted in my workstation/server images.&amp;nbsp; The first application I tried would install just fine.&amp;nbsp; It was only after I started to make changes that I noticed the issue.&amp;nbsp; You see, I would make a change to the command-line in the Applications "table" in the Distribution Share section of the DW.&amp;nbsp; Those changes would not get used by the task sequence.&amp;nbsp; When DW adds the application to the task sequence, it copies the then-current command line to the TS.XML file and then that's it.&amp;nbsp; Any changes to the application entry in DW do not get replicated over to the task sequences that use it.&lt;/P&gt;
&lt;P&gt;The second issue comes with reboots.&amp;nbsp; The application table allows you to specify that a particular application needs a reboot of the computer after installation.&amp;nbsp; When you add this type of application to the task sequence, the reboot request is not part of that addition.&amp;nbsp; If you need a reboot, you must manually add in a reboot task to the sequence.&amp;nbsp; The task sequence quickly starts to lose some of its shine.&lt;/P&gt;
&lt;P&gt;So, I took a giant step back and said to myself "what other way could I get applications to install on the system?"&amp;nbsp; Well, the task sequence so conveniently has a call to the ZTIApplications.wsf script.&amp;nbsp; This script processes that fancy applications table from the deployment share part of DW.&amp;nbsp; It will correctly handle the reboots as well as command-line changes to application installs.&amp;nbsp; Now, how to get my build computer to have applications assigned to it.&lt;/P&gt;
&lt;P&gt;The applications are assigned via the CustomSettings.ini file.&amp;nbsp; At first, I was adding them in manually.&amp;nbsp; Unfortunately, you must know the GUID of the application that you want to install&amp;nbsp;(which can only be found by manually reviewing the Applications.XML file in the CONTROL folder).&amp;nbsp; Not fun.&lt;/P&gt;
&lt;P&gt;I then moved on to using a database version of CustomSettings (where it looks everything up from a database).&amp;nbsp; This way, I can use the DW GUI to manipulate the sequence of applications and pick from a list.&amp;nbsp; I ended up creating a "role" that has the applications that I want installed in my image.&amp;nbsp; I then assigned that role to my specific build computer.&amp;nbsp; Now, when the computer is built, it gets the correct applications.&lt;/P&gt;
&lt;P&gt;So, I recommend using roles wherever possible and avoiding making changes to the task sequence.&lt;/P&gt;&lt;img src="http://myitforum.com/cs2/aggbug.aspx?PostID=99118" width="1" height="1"&gt;</description><category domain="http://myitforum.com/cs2/blogs/jhuston/archive/tags/Guidance/default.aspx">Guidance</category><category domain="http://myitforum.com/cs2/blogs/jhuston/archive/tags/BDD+2007/default.aspx">BDD 2007</category><category domain="http://myitforum.com/cs2/blogs/jhuston/archive/tags/Deployment/default.aspx">Deployment</category></item><item><title>BDD 2007 for Server OS Deployment - Trial 3</title><link>http://myitforum.com/cs2/blogs/jhuston/archive/2007/02/01/bdd-2007-for-server-os-deployment-trial-3.aspx</link><pubDate>Thu, 01 Feb 2007 15:14:00 GMT</pubDate><guid isPermaLink="false">8e8f7986-475c-475d-bdc9-a1b3a63b955b:95827</guid><dc:creator>jhuston</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://myitforum.com/cs2/blogs/jhuston/rsscomments.aspx?PostID=95827</wfw:commentRss><comments>http://myitforum.com/cs2/blogs/jhuston/archive/2007/02/01/bdd-2007-for-server-os-deployment-trial-3.aspx#comments</comments><description>&lt;P&gt;Okay, on with the continuing saga.&amp;nbsp; So far, I've managed to get Windows PE 2.0 to recognize my "unique" network card.&amp;nbsp; Now, when it boots into Windows Server 2003 after completing setup, I discover that the network card is no more.&amp;nbsp; What happened?&lt;/P&gt;
&lt;P&gt;Well, here's what happened.&amp;nbsp; The script that copies drivers onto the hard drive has a unique method of operation that probably works fine in most cases, but not here.&amp;nbsp; Here's how Microsoft's provided script works:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;On the destination computer, enumerate all plug and play device IDs into an XML file&lt;/LI&gt;
&lt;LI&gt;Enumerate through the PNP device IDs&lt;/LI&gt;
&lt;UL&gt;
&lt;LI&gt;For each PNP ID, see if there is a match in the BDD Workbench list of Out-of-box drivers&lt;/LI&gt;
&lt;LI&gt;If there is a match, see if the driver belongs to one of the driver groups authorized for this computer (combination of the driver group specified in the Build configuration and the CustomSettings.ini)&lt;/LI&gt;
&lt;LI&gt;If all of that comes out positive, then copy the driver to the C:\Drivers directory on the destination computer and update the UNATTEND.TXT file.&lt;/LI&gt;&lt;/UL&gt;&lt;/UL&gt;
&lt;P&gt;So, here's my issue with that.&amp;nbsp; As you may recall, my network card (the Broadcom NetXtreme II) uses multiple drivers.&amp;nbsp; The first is a virtual bus driver which maps to a PNP PCI bus ID.&amp;nbsp; Once loaded, this driver then establishes new "virtual" devices on the "virtual" bus which then would load the NDIS or iSCSI drivers.&amp;nbsp; Since the PNP enumeration only happens once, it never sees these virtual devices and therefore never copies them down to the destination computer.&lt;/P&gt;
&lt;P&gt;Another issue is what if I wanted to essentially pre-stage device drivers on the computer (such as when I'm making a multi-platform source image to be captured and then deployed)?&amp;nbsp; BDD will copy down a named directory and add it&amp;nbsp;to the computer (you must specify the directory in CustomSettings.ini and, I believe, manually update UNATTEND.TXT).&amp;nbsp; That's great, but now I have to maintain the driver in multiple spots.&amp;nbsp; The BDD Workbench isn't helping me out any here.&lt;/P&gt;
&lt;P&gt;To work around this, I copied the ZTIDrivers.wsf file to ZTIDriversPreStage.wsf.&amp;nbsp; I made a couple of quick modifications to it so that it would copy all drivers in the list of driver groups into the C:\Drivers directory.&lt;/P&gt;
&lt;P&gt;First, comment out the PNP device enumeration sequence on lines 266 - 274.&amp;nbsp; Add a line just below with the command &lt;STRONG&gt;FindMatch "XXX"&lt;/STRONG&gt;.&amp;nbsp; This will call the FindMatch subroutine.&amp;nbsp; Since we're going to modify that in a second, the PNP ID will become pointless (hence the XXX).&lt;/P&gt;
&lt;P&gt;Scroll down to line 395 (in the FindMatch function) and change the &lt;STRONG&gt;If Instr(1, sPNPId, oPNPId.text, 1) &amp;gt; 0 then&lt;/STRONG&gt; statement to &lt;STRONG&gt;If 1 = 1 then&lt;/STRONG&gt;.&amp;nbsp; This will bypass the PNP ID match and simply resort to driver group matching.&lt;/P&gt;
&lt;P&gt;Finally, in my Task Sequence, I modified the two "Inject Drivers" tasks (Preinstall\Non-Replace Only and Postinstall) to use the ZTIDriversPreStage.wsf file.&lt;/P&gt;
&lt;P&gt;After these modifications, the system found my unique network card and started it successfully (not to mention pre-staging all of the available device drivers for me).&lt;/P&gt;&lt;img src="http://myitforum.com/cs2/aggbug.aspx?PostID=95827" width="1" height="1"&gt;</description><category domain="http://myitforum.com/cs2/blogs/jhuston/archive/tags/Guidance/default.aspx">Guidance</category><category domain="http://myitforum.com/cs2/blogs/jhuston/archive/tags/BDD+2007/default.aspx">BDD 2007</category><category domain="http://myitforum.com/cs2/blogs/jhuston/archive/tags/Deployment/default.aspx">Deployment</category></item><item><title>Issue with WinPE 2.0, Diskpart.exe, and certain RAID cards</title><link>http://myitforum.com/cs2/blogs/jhuston/archive/2007/01/31/issue-with-winpe-2-0-diskpart-exe-and-certain-raid-cards.aspx</link><pubDate>Wed, 31 Jan 2007 21:21:00 GMT</pubDate><guid isPermaLink="false">8e8f7986-475c-475d-bdc9-a1b3a63b955b:95456</guid><dc:creator>jhuston</dc:creator><slash:comments>2</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://myitforum.com/cs2/blogs/jhuston/rsscomments.aspx?PostID=95456</wfw:commentRss><comments>http://myitforum.com/cs2/blogs/jhuston/archive/2007/01/31/issue-with-winpe-2-0-diskpart-exe-and-certain-raid-cards.aspx#comments</comments><description>&lt;P&gt;While using BDD 2007, which uses WinPE 2.0, I had a strange issue.&amp;nbsp; BDD 2007 would call the DISKPART.EXE and FORMAT.COM commands to partition and format a RAID-1 volume and install an OS onto it.&amp;nbsp; This seems to work fine until the OS (Windows 2003 in this case) reboots after the textmode portion of the setup.&lt;/P&gt;
&lt;P&gt;After playing around with this, I discovered that there is some sort of weird interaction with DISKPART.EXE (version 6.0), Windows Server 2003, and the Dell PERC 5/i serial-attached-SCSI (SAS) RAID card on my Dell PowerEdge 2950.&lt;/P&gt;
&lt;P&gt;The symptom was this.&amp;nbsp; During the reboot after the textmode portion of the setup has completed, the computer would being the POST operation.&amp;nbsp; When it got to the RAID card, it would initialize the card, not that there were 1 or more logical volumes, and then freeze.&amp;nbsp; It is my belief that at the point it freezes, the system BIOS is attempting to enumerate the logical volume to see if it should add it to the boot order when POST is completed.&lt;/P&gt;
&lt;P&gt;The only way to clear this was to reinitialize the drives (erasing all data).&amp;nbsp; It was clear that *something* was being written to the drives in a weird way that caused the behavior.&lt;/P&gt;
&lt;P&gt;I then tried various permutations (including running the bootsect.exe command) to get it to work.&amp;nbsp; If I used WinPE 2005 (from BDD 2.5) to partition/format the disk and then used WinPE 2.0 (and BDD 2007) to perform the installation (with the partition/format command disabled), it would work just fine.&lt;/P&gt;
&lt;P&gt;I then discovered that the FORMAT.COM command was not at fault, but it was the DISKPART.EXE utility that was causing my issue.&amp;nbsp; BDD 2007 does not issue any unusual commands so I have to assume that it was the utility itself.&amp;nbsp; To verify this, I ended up replacing the command with a third-party shareware utility (AEFDISK32) to repartition the volume.&amp;nbsp; I was still calling WinPE 2.0's FORMAT.COM.&amp;nbsp; Once this was in place, the system partitioned the disk, formatted it, and made its way past the point it was freezing before.&lt;/P&gt;
&lt;P&gt;Not sure if this is a fix to come from Microsoft or Dell (either the system BIOS or the RAID firmware), but if you get stuck with some unusual behavior, give this a try.&lt;/P&gt;&lt;img src="http://myitforum.com/cs2/aggbug.aspx?PostID=95456" width="1" height="1"&gt;</description><category domain="http://myitforum.com/cs2/blogs/jhuston/archive/tags/Guidance/default.aspx">Guidance</category><category domain="http://myitforum.com/cs2/blogs/jhuston/archive/tags/BDD+2007/default.aspx">BDD 2007</category><category domain="http://myitforum.com/cs2/blogs/jhuston/archive/tags/Deployment/default.aspx">Deployment</category></item><item><title>BDD 2007 for Server OS Deployment - Trial 2</title><link>http://myitforum.com/cs2/blogs/jhuston/archive/2007/01/31/bdd-2007-for-server-os-deployment-trial-2.aspx</link><pubDate>Wed, 31 Jan 2007 21:10:00 GMT</pubDate><guid isPermaLink="false">8e8f7986-475c-475d-bdc9-a1b3a63b955b:95451</guid><dc:creator>jhuston</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://myitforum.com/cs2/blogs/jhuston/rsscomments.aspx?PostID=95451</wfw:commentRss><comments>http://myitforum.com/cs2/blogs/jhuston/archive/2007/01/31/bdd-2007-for-server-os-deployment-trial-2.aspx#comments</comments><description>&lt;P&gt;Okay, last time I discussed how to get plug and play enumeration to fully discover all resources.&amp;nbsp; That's just fine.&amp;nbsp; One of those resources, however, is a serial-attached-SCSI (SAS) RAID card that has the boot disk attached to it.&lt;/P&gt;
&lt;P&gt;The Out-of-box drivers works just fine for getting WinPE 2.0 to see that RAID card, partition it, format it, etc.&amp;nbsp; However, when the Windows 2003 setup runs, it needs the same RAID drivers available for the textmode portion of the installation.&amp;nbsp; BDD 2007 does not place the SCSIAdapter drivers into a $OEM$\textmode directory for you - you need to do this yourself.&lt;/P&gt;
&lt;P&gt;So, where do I put them?&amp;nbsp; You will notice a $OEM$ directory at the top of the &lt;EM&gt;d&lt;/EM&gt;:\Distribution folder.&amp;nbsp; Should you place the files here?&amp;nbsp; Not necessarily.&amp;nbsp; Turns out that the task sequence calls a script called LTIApply.wsf when it comes time to install the OS.&amp;nbsp; For non-Vista operating systems, it will first copy the source files down to the MININT directory on the boot drive and then copy the $OEM$ directory and proceed with installation.&lt;/P&gt;
&lt;P&gt;The LTIApply.wsf script will look in several locations for the $OEM$ directory and, once it is found, use that directory for the build.&amp;nbsp; It will not merge directories, so plan ahead.&amp;nbsp; This is the order in which it looks for the directory:&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;&lt;EM&gt;d&lt;/EM&gt;:\Distribution\Control\&lt;EM&gt;build_name&lt;/EM&gt;\$OEM$&lt;/LI&gt;
&lt;LI&gt;&lt;EM&gt;d&lt;/EM&gt;:\Distribution\Operating Systems\&lt;EM&gt;OS_Name&lt;/EM&gt;\$OEM$&lt;/LI&gt;
&lt;LI&gt;&lt;EM&gt;d&lt;/EM&gt;:\Distribution\&lt;EM&gt;architecture&lt;/EM&gt;\$OEM$&lt;/LI&gt;
&lt;LI&gt;&lt;EM&gt;d&lt;/EM&gt;:\Distribution\$OEM$&lt;/LI&gt;&lt;/OL&gt;
&lt;P&gt;In my test case, I used the first option and placed the $OEM$ in the same directory as the build control files.&amp;nbsp; This makes sense since you also must update the UNATTEND.TXT file to indicate which drivers to load via the OEM files and what files to include in the temporary boot directory used by textmode.&lt;/P&gt;
&lt;P&gt;Once that is taken care of, you should be good to go for installation.&lt;/P&gt;&lt;img src="http://myitforum.com/cs2/aggbug.aspx?PostID=95451" width="1" height="1"&gt;</description><category domain="http://myitforum.com/cs2/blogs/jhuston/archive/tags/Guidance/default.aspx">Guidance</category><category domain="http://myitforum.com/cs2/blogs/jhuston/archive/tags/BDD+2007/default.aspx">BDD 2007</category><category domain="http://myitforum.com/cs2/blogs/jhuston/archive/tags/Deployment/default.aspx">Deployment</category></item><item><title>BDD 2007 for Server OS Deployment - Trial 1</title><link>http://myitforum.com/cs2/blogs/jhuston/archive/2007/01/28/bdd-2007-for-server-os-deployment-trial-1.aspx</link><pubDate>Mon, 29 Jan 2007 01:58:00 GMT</pubDate><guid isPermaLink="false">8e8f7986-475c-475d-bdc9-a1b3a63b955b:93954</guid><dc:creator>jhuston</dc:creator><slash:comments>2</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://myitforum.com/cs2/blogs/jhuston/rsscomments.aspx?PostID=93954</wfw:commentRss><comments>http://myitforum.com/cs2/blogs/jhuston/archive/2007/01/28/bdd-2007-for-server-os-deployment-trial-1.aspx#comments</comments><description>&lt;P&gt;As I indicated before, I'm going to include some of the information that I've learned about adapting BDD 2007 for server operating system deployment (specifically Windows Server 2003).&lt;/P&gt;
&lt;P&gt;The first trial that has come up is the use of Windows PE 2.0 in combination with certain "unusual" network drivers.&amp;nbsp; Here's my example system: a Dell PowerEdge 1950 (also PowerEdge 2950).&amp;nbsp; These puppies use the Broadcom NetXtreme II network interface cards.&amp;nbsp; These high-falutin' NICs not only gain access to the network, but include support for a TCP Offload Engine (TOE) as well as an iSCSI driver.&amp;nbsp; In order to accomplish this, Broadcom has written a two-driver stack.&amp;nbsp; The first is the Virtual Bus Driver (VBD).&amp;nbsp; This is a "System" driver (at least according to the Deployment Workbench.&amp;nbsp; This is the base level interface that you then plug in the NDIS or iSCSI drivers.&lt;/P&gt;
&lt;P&gt;Because of this two-tier structure, Windows PE 2.0 cannot correctly determine and load the drivers.&amp;nbsp; Under Windows PE 2005, this was curable by using the -winpe switch instead of the -minint switch which would effectively perform an exhaustive plug and play detection.&amp;nbsp; Since Windows PE 2.0 no longer has these switch options, it does not seem to do an exhaustive PNP detection and therefore does not load both drivers.&lt;/P&gt;
&lt;P&gt;Broadcom has "tried" to help by offering a monolithic driver (which they call their RIS driver stack).&amp;nbsp; This is a purpose built driver for networking only (no TOE or iSCSI support).&amp;nbsp; Unfortunately, the driver is not signed.&amp;nbsp; I believe that it is for this reason that Windows PE 2.0 will not load the driver (but I cannot be certain).&lt;/P&gt;
&lt;P&gt;Here's how I've gotten around this.&amp;nbsp; First, I created a directory and placed the HWPNP utility from &lt;A class="" href="http://www.paraglidermc.com/"&gt;Paraglider&lt;/A&gt; (&lt;A href="http://www.paraglidernc.com/plugins/HWPnP1022a.cab"&gt;http://www.paraglidernc.com/plugins/HWPnP1022a.cab&lt;/A&gt;&amp;nbsp;extract the contents) in it.&amp;nbsp; This is a pretty nifty utility that forces a plug and play enumeration and installs the device drivers, signed or not.&amp;nbsp; It was originally written for the BartPE set of tools, but works just fine over here.&lt;/P&gt;
&lt;P&gt;In my LAB distribution point, I configured it to load the additional set of files (this directory).&amp;nbsp; This will put the files at the root of the PE image (X:\).&lt;/P&gt;
&lt;P&gt;Next, I modified the Unattend_PE_x86.xml file to run the HWPNP.EXE when PE starts.&amp;nbsp; This file can be found in the C:\Program Files\BDD 2007\Templates directory.&lt;/P&gt;
&lt;P&gt;I changed the &amp;lt;ORDER&amp;gt; value of the litetouch.wsf command to be 2 and added a new section just above it with an order of 1.&amp;nbsp; Here's the snippet:&lt;/P&gt;
&lt;P&gt;&amp;lt;RunSynchronousCommand wcm:action="add"&amp;gt;&lt;BR&gt;&amp;lt;Description&amp;gt;HW Plug and Play&amp;lt;/Description&amp;gt;&lt;BR&gt;&amp;lt;Order&amp;gt;1&amp;lt;/Order&amp;gt;&lt;BR&gt;&amp;lt;Path&amp;gt;X:\HWPNP.EXE +all /a /p&amp;lt;/Path&amp;gt;&lt;BR&gt;&amp;lt;/RunSynchronousCommand&amp;gt;&lt;/P&gt;
&lt;P&gt;The +all forces the HWPNP utility to check all drivers and add them.&amp;nbsp; The /a command will attempt to load all drivers even if one is loaded with a matching PNP ID.&amp;nbsp; The /p parameter shows a progress bar.&lt;/P&gt;
&lt;P&gt;Now, I include the RIS version of the Broadcom driver in the Out-of-box drivers listing and assign it to a group that is included in the LAB Windows PE build.&amp;nbsp; Build out the Windows PE image and voila - network connectivity is there.&lt;/P&gt;&lt;img src="http://myitforum.com/cs2/aggbug.aspx?PostID=93954" width="1" height="1"&gt;</description><category domain="http://myitforum.com/cs2/blogs/jhuston/archive/tags/Guidance/default.aspx">Guidance</category><category domain="http://myitforum.com/cs2/blogs/jhuston/archive/tags/BDD+2007/default.aspx">BDD 2007</category><category domain="http://myitforum.com/cs2/blogs/jhuston/archive/tags/Deployment/default.aspx">Deployment</category></item></channel></rss>