<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>System Center Ideas &#187; Windows</title>
	<atom:link href="http://systemcenterideas.com/category/windows/feed/" rel="self" type="application/rss+xml" />
	<link>http://systemcenterideas.com</link>
	<description></description>
	<lastBuildDate>Tue, 08 Dec 2009 16:38:52 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>USMT Issues with MDT 2010</title>
		<link>http://systemcenterideas.com/2009/09/usmt-issues-with-mdt-2010/</link>
		<comments>http://systemcenterideas.com/2009/09/usmt-issues-with-mdt-2010/#comments</comments>
		<pubDate>Fri, 25 Sep 2009 17:48:55 +0000</pubDate>
		<dc:creator>Chad Ingles</dc:creator>
				<category><![CDATA[Deployment]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://systemcenterideas.com/2009/09/usmt-issues-with-mdt-2010/</guid>
		<description><![CDATA[I’m working on a Windows XP to Windows 7 migration project (I think we’ll all be working on those for the next couple of years!) using a standalone MDT 2010 solution. Overall it’s been working great and the improvements in MDT over each version have resulted in a really impressive deployment platform. I’ve got a [...]]]></description>
			<content:encoded><![CDATA[<p>I’m working on a Windows XP to Windows 7 migration project (I think we’ll all be working on those for the next couple of years!) using a standalone MDT 2010 solution. Overall it’s been working great and the improvements in MDT over each version have resulted in a really impressive deployment platform.</p>
<p>I’ve got a Windows XP REFRESH scenario working and USMT is doing what it’s supposed to do even with hardlinking enabled and working automatically. But it’s not capturing the users’ mapped printers and network drives, or other user settings. My Documents, desktop items, IE favourites, those are all fine.</p>
<p>It took a fair bit of digging but I finally came across this in USMTcapture.log</p>
<p>?<strong>2009-09-23 15:16:05, Info                  [0x000000] Downlevel Manifests folder is not present. System component settings will not be gathered.</strong></p>
<p>This Downlevel Manifests folder is pretty important. It’s used to gather all of those user settings from older operating systems like Windows XP.</p>
<p>I poked around and the DlManifests folder was being copied from the deployment share and it looked like the correct folder structure was in place:</p>
<p><a href="http://systemcenterideas.com/wp-content/uploads/2009/09/usmt.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="usmt" src="http://systemcenterideas.com/wp-content/uploads/2009/09/usmt_thumb.png" border="0" alt="usmt" width="247" height="136" /></a></p>
<p>Scanstate.exe just wasn’t finding the DlManifests folder. On a hunch, I ended up modifying the ZTIUserState.wsf script to specifically set the current working directory to “C:\MININT\USMT” and it fixed the problem!</p>
<p>Here’s what I added to ZTIUserState.wsf starting around line 620:</p>
<p><span style="font-family: Courier New;">On Error Resume Next<br />
&#8216;*** BEGIN MODIFICATIONS ***<br />
Dim objShell<br />
Dim sCurDir<br />
&#8216; Save current directory<br />
sCurDir = oFSO.GetAbsolutePathName(&#8220;.&#8221;)<br />
oLogging.CreateEntry &#8220;Saved current directory: &#8221; _</span></p>
<p><span style="font-family: Courier New;"> &amp; sCurDir, LogTypeInfo<br />
&#8216; Set the current directory to sUSMTPath<br />
Set objShell = CreateObject(&#8220;WScript.Shell&#8221;)<br />
objShell.CurrentDirectory = sUSMTPath<br />
oLogging.CreateEntry &#8220;Set current directory: &#8221; _</span></p>
<p><span style="font-family: Courier New;"> &amp; sUSMTPath, LogTypeInfo<br />
&#8216;*** END MODIFICATIONS *** </span></p>
<p><span style="font-family: Courier New;">sCmd = &#8220;cmd /c &#8220;&#8221;"&#8221;" &amp; sUSMTPath &amp; &#8220;\scanstate.exe&#8221;" &#8221; _</span></p>
<p><span style="font-family: Courier New;"> &amp; sScanStateArgs &amp; &#8221; &gt; nul 2&gt;&amp;1&#8243;&#8221;"<br />
iRetVal = oUtility.RunWithHeartbeat(sCmd) </span></p>
<p><span style="font-family: Courier New;">&#8216;*** BEGIN MODIFICATIONS ***<br />
&#8216; Reset current directory to original value<br />
objShell.CurrentDirectory = sCurDir<br />
oLogging.CreateEntry &#8220;Set current directory: &#8221; _</span></p>
<p><span style="font-family: Courier New;"> &amp; sCurDir, LogTypeInfo<br />
&#8216;*** END MODIFICATIONS ***</span></p>
<p><span style="font-family: Courier New;"><em>UPDATE: I&#8217;ve attached the working ZTIUserState.wsf script. Big note, this is a modified MDT 2010 <strong>RC </strong>script. I&#8217;m not sure if there are other </em></span><span style="font-family: Courier New;"><em>changes between RC and RTM. I&#8217;ll take a look when I find a spare hour!</em></span></p>
<p><em>UPDATE2: Thanks Johan for confirming below that the fix applies to both MDT 2010 RC and RTM.</em></p>
<p><em>UPDATE3: This same fix works for MDT 2010 RC and RTM. The only difference (confirmed by Johan below) is the version number in the script comments. I&#8217;ve updated the attachment to include the RTM version of the script.</em></p>
<p><span style="font-family: 'Courier New';"><a href="http://systemcenterideas.com/wp-content/uploads/2009/11/ZTIUserState.zip">ZTIUserState</a></span></p>
]]></content:encoded>
			<wfw:commentRss>http://systemcenterideas.com/2009/09/usmt-issues-with-mdt-2010/feed/</wfw:commentRss>
		<slash:comments>17</slash:comments>
		</item>
		<item>
		<title>Per-User Configuration Using Active Setup</title>
		<link>http://systemcenterideas.com/2009/08/per-user-configuration-using-active-setup/</link>
		<comments>http://systemcenterideas.com/2009/08/per-user-configuration-using-active-setup/#comments</comments>
		<pubDate>Tue, 04 Aug 2009 14:54:18 +0000</pubDate>
		<dc:creator>Chad Ingles</dc:creator>
				<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://systemcenterideas.com/2009/08/per-user-configuration-using-active-setup/</guid>
		<description><![CDATA[Introduction A common difficulty in desktop management is configuring per-user settings. Active Setup is a process that runs automatically every time a user logs in to a computer that can address this problem in a simple and flexible way. If your application requires installation of components such as files or registry keys on a per-user [...]]]></description>
			<content:encoded><![CDATA[<h4>Introduction</h4>
<p>A common difficulty in desktop management is configuring per-user settings. Active Setup is a process that runs automatically every time a user logs in to a computer that can address this problem in a simple and flexible way.</p>
<p>If your application requires installation of components such as files or registry keys on a per-user basis, but your application has no advertised entry points or other triggers to initiate the installation process, then Active Setup is the solution. </p>
<p>When the user logs in the registry keys under <b><i>HKEY_LOCAL_MACHINE</i></b><b>\Software\Microsoft\Active Setup\Installed Components\%APPNAME%</b> are compared to the keys under <b><i>HKEY_CURRENT_USER</i></b><b>\Software\Microsoft\Active Setup\Installed Components\%APPNAME%</b> and if the HKCU registry entries don&#8217;t exist, or the version number of HKCU is less than HKLM, then a specified command-line is executed for the current user.</p>
<p>To implement Active Setup, you simply create the required registry key and values under HKEY_LOCAL_MACHINE to execute the command-line that will apply all of the per-user requirements to the system. This could be an executable, an msiexec.exe command-line, regedit.exe, batch file, or any other executable command-line.</p>
<p><i>Note: </i><i>Active Setup runs as the current user so it is not suitable for actions that require Administrator or other privileged security rights on the local computer.</i></p>
<h4>Creating the Active Setup Registry Entries</h4>
<p>Create the following registry key:</p>
<p><b>HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Active Setup\Installed Components\%APPNAME%</b></p>
<p>Where:</p>
<ul>
<li>%APPNAME% is an arbitrary string which can be the application name, or its ProductCode GUID if using an MSI. This value should be unique to the application. </li>
</ul>
<p>Create the following values under the registry key:</p>
<p>
<table border="1" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td valign="top">
<p><b>Name</b></p>
</td>
<td valign="top">
<p><b>Type</b></p>
</td>
<td valign="top">
<p><b>Data</b></p>
</td>
<td valign="top">
<p><b>Required</b></p>
</td>
</tr>
<tr>
<td valign="top">
<p><b>(Default)</b></p>
</td>
<td valign="top">
<p>REG_SZ</p>
</td>
<td valign="top">
<p>%APPNAME%</p>
</td>
<td valign="top">
<p>No</p>
</td>
</tr>
<tr>
<td valign="top">
<p><b>StubPath</b></p>
</td>
<td valign="top">
<p>REG_SZ</p>
</td>
<td valign="top">
<p>%COMMANDLINE%</p>
</td>
<td valign="top">
<p>Yes</p>
</td>
</tr>
<tr>
<td valign="top">
<p><b>Version</b></p>
</td>
<td valign="top">
<p>REG_SZ</p>
</td>
<td valign="top">
<p>%VERSION%</p>
</td>
<td valign="top">
<p>Yes</p>
</td>
</tr>
<tr>
<td valign="top">
<p><b>ComponentID</b></p>
</td>
<td valign="top">
<p>REG_SZ</p>
</td>
<td valign="top">
<p>%APPNAME%</p>
</td>
<td valign="top">
<p>No</p>
</td>
</tr>
</tbody>
</table>
<p>Where:</p>
<ul>
<li>%APPNAME% is the arbitrary application name specified above </li>
<li>%COMMANDLINE% is the command-line to execute </li>
<li>%VERSION% is an arbitrary version number to determine if Active Setup has run for the specific application </li>
</ul>
<p>When each new user logs on, the operating system compares the Active Setup keys between HKLM and HKCU, and runs the specified command-line if the HKCU entry is missing or the version in HKCU is less than HKLM. </p>
<p>To re-run the same Active Setup or a new version of your per-user application settings, increment the Version registry value in HKLM. The next time the user logs on Active Setup will run again for that user. </p>
<p>An example exported registry file containing the key and values required to configure Active Setup is included below. Simply replace the variables with your required values.<br />
<table cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td>
<p>Windows Registry Editor Version 5.00</p>
<p>[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Active Setup\Installed Components\%APPNAME%]</p>
<p>@=&quot;%APPNAME%&quot;</p>
<p>&quot;StubPath&quot;=&quot;%COMMANDLINE%&quot;</p>
<p>&quot;Version&quot;=&quot;%VERSION%&quot;</p>
<p>&quot;ComponentID&quot;=&quot;%APPNAME%&quot;</p>
</td>
</tr>
</tbody>
</table>
<p>Example registry file: <a href="http://systemcenterideas.com/wp-content/uploads/2009/08/Active_Setup_Example.reg">Active_Setup_Example.reg</a></p>
</p>
<h4>Example: Repairing An Existing MSI-Based Application</h4>
<p>To force a repair using the existing MSI where a separate Active Setup executable is not required you could use the following example:</p>
<p>Create the registry key:</p>
<p>HKEY_LOCAL_MACHINE\Software\Microsoft\Active Setup\Installed Components\%PRODUCTCODE%</p>
<p>Under the registry key create the following values:<br />
<table border="1" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td valign="top">
<p><b>Name</b></p>
</td>
<td valign="top">
<p><b>Type</b></p>
</td>
<td valign="top">
<p><b>Data</b></p>
</td>
<td valign="top">
<p><b>Required</b></p>
</td>
</tr>
<tr>
<td valign="top">
<p><b>(Default)</b></p>
</td>
<td valign="top">
<p>REG_SZ</p>
</td>
<td valign="top">
<p>%APPNAME%</p>
</td>
<td valign="top">
<p>No</p>
</td>
</tr>
<tr>
<td valign="top">
<p><b>StubPath</b></p>
</td>
<td valign="top">
<p>REG_SZ</p>
</td>
<td valign="top">
<p>msiexec /fauvs %PRODUCTCODE% /qb</p>
</td>
<td valign="top">
<p>Yes</p>
</td>
</tr>
<tr>
<td valign="top">
<p><b>Version</b></p>
</td>
<td valign="top">
<p>REG_SZ</p>
</td>
<td valign="top">
<p>%VERSION%</p>
</td>
<td valign="top">
<p>Yes</p>
</td>
</tr>
<tr>
<td valign="top">
<p><b>ComponentID</b></p>
</td>
<td valign="top">
<p>REG_SZ</p>
</td>
<td valign="top">
<p>%APPNAME%</p>
</td>
<td valign="top">
<p>No</p>
</td>
</tr>
</tbody>
</table>
<p>Where:</p>
<ul>
<li>%PRODUCTCODE% is the MSI ProductCode GUID for the application. </li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://systemcenterideas.com/2009/08/per-user-configuration-using-active-setup/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
<!-- WP Super Cache is installed but broken. The path to wp-cache-phase1.php in wp-content/advanced-cache.php must be fixed! -->