<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://www.wintellect.com/cs/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>John Robbins' Blog</title><link>http://www.wintellect.com/cs/blogs/jrobbins/default.aspx</link><description /><dc:language>en</dc:language><generator>CommunityServer 2.1 SP2 (Build: 61129.2)</generator><item><title>WinDBG 6.9.3.113 Released</title><link>http://www.wintellect.com/cs/blogs/jrobbins/archive/2008/05/05/windbg-6-9-3-113-released.aspx</link><pubDate>Mon, 05 May 2008 15:27:25 GMT</pubDate><guid isPermaLink="false">c9b5046a-91b6-4822-a57a-d848b8cb6435:6393</guid><dc:creator>jrobbins</dc:creator><slash:comments>1</slash:comments><comments>http://www.wintellect.com/cs/blogs/jrobbins/comments/6393.aspx</comments><wfw:commentRss>http://www.wintellect.com/cs/blogs/jrobbins/commentrss.aspx?PostID=6393</wfw:commentRss><description>&lt;p&gt;Looks like the WinDBG team was busy over the weekend and posted a new build of WinDBG:&lt;a href="http://www.microsoft.com/whdc/DevTools/Debugging/default.mspx"&gt; 6.9.3.113&lt;/a&gt;. The big fixes look like squashed bugs and performance improvements in symbol server portions. I bet you could drop those DLLs into your Visual Studio directories and get the benefit there as well. &lt;/p&gt;&lt;img src="http://www.wintellect.com/cs/aggbug.aspx?PostID=6393" width="1" height="1"&gt;</description></item><item><title>Vista x64 is Now Officially Supported on Mac Hardware!</title><link>http://www.wintellect.com/cs/blogs/jrobbins/archive/2008/04/25/vista-x64-is-now-officially-supported-on-mac-hardware.aspx</link><pubDate>Fri, 25 Apr 2008 16:31:47 GMT</pubDate><guid isPermaLink="false">c9b5046a-91b6-4822-a57a-d848b8cb6435:6043</guid><dc:creator>jrobbins</dc:creator><slash:comments>2</slash:comments><comments>http://www.wintellect.com/cs/blogs/jrobbins/comments/6043.aspx</comments><wfw:commentRss>http://www.wintellect.com/cs/blogs/jrobbins/commentrss.aspx?PostID=6043</wfw:commentRss><description>&lt;p&gt;You all know my &lt;a href="http://www.wintellect.com/cs/blogs/jrobbins/archive/2008/03/18/installing-windows-server-2003-r2-x64-on-a-mac-pro.aspx"&gt;geek&lt;/a&gt;
		&lt;a href="http://www.wintellect.com/cs/blogs/jrobbins/archive/2007/02/15/vista-x64-on-a-mac-pro-totally-awesome-dude.aspx"&gt;love&lt;/a&gt; for Apple hardware. Yesterday Apple &lt;a href="http://www.apple.com/support/downloads/bootcampupdate21forwindowsvista64.html"&gt;released&lt;/a&gt; the official drivers for Vista x64 support! You'll need to download and install Boot Camp Update 2.1 and you'll be set. Totally and completely excellent news!&lt;/p&gt;&lt;img src="http://www.wintellect.com/cs/aggbug.aspx?PostID=6043" width="1" height="1"&gt;</description></item><item><title>Easily Downloading and Installing the Sysinternals Suite</title><link>http://www.wintellect.com/cs/blogs/jrobbins/archive/2008/04/20/easily-downloading-and-installing-the-sysinternals-suite.aspx</link><pubDate>Sun, 20 Apr 2008 23:18:00 GMT</pubDate><guid isPermaLink="false">c9b5046a-91b6-4822-a57a-d848b8cb6435:5980</guid><dc:creator>jrobbins</dc:creator><slash:comments>4</slash:comments><comments>http://www.wintellect.com/cs/blogs/jrobbins/comments/5980.aspx</comments><wfw:commentRss>http://www.wintellect.com/cs/blogs/jrobbins/commentrss.aspx?PostID=5980</wfw:commentRss><description>&lt;P&gt;Everyone uses Mark Russinovich's and Bryce Cogswell's excellent &lt;A href="http://technet.microsoft.com/en-us/sysinternals/default.aspx"&gt;Sysinternals&lt;/A&gt; Tools. Tools like Process Explorer and Process Monitor have helped solve some of the toughest bugs I've ever worked on. I've been surprised how many people didn't know that all the tools available in a single download: the &lt;A href="http://technet.microsoft.com/en-us/sysinternals/bb842062.aspx"&gt;Sysinternals Suite&lt;/A&gt;. &lt;/P&gt;
&lt;P&gt;Whenever I see that one of the tools is updated, I find it easiest to grab the Suite .ZIP file and unzip it to my utility directory. After having done the manual updating a couple of times, I wrote a PowerShell script to do the download and unzipping automatically. I thought others might find it useful. Note that you'll need the excellent and free &lt;A href="http://www.7-zip.org/"&gt;7z&lt;/A&gt; archive tool in your path. &lt;/P&gt;
&lt;P&gt;As I'm still a PowerShell &lt;A href="http://www.wintellect.com/cs/blogs/jrobbins/archive/2008/02/17/eight-weeks-of-powershell.aspx"&gt;novice&lt;/A&gt;, please don't be afraid to point out anything I can do better. &lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:green;FONT-FAMILY:Courier New;"&gt;################################################################## &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:green;FONT-FAMILY:Courier New;"&gt;# Get-SysInternalsSuite.ps1 - John Robbins - john@wintellect.com&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:green;FONT-FAMILY:Courier New;"&gt;# &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:green;FONT-FAMILY:Courier New;"&gt;# Note that this script requires the excellent 7Z.EXE in the &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:green;FONT-FAMILY:Courier New;"&gt;# PATH environment variable. You can get 7Z.EXE, which is free, &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:green;FONT-FAMILY:Courier New;"&gt;# at &lt;A href="http://www.7-zip.org/"&gt;http://www.7-zip.org/&lt;/A&gt;. &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:green;FONT-FAMILY:Courier New;"&gt;################################################################# &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:Courier New;"&gt;&lt;SPAN style="COLOR:blue;"&gt;param&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt; ( [&lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;string&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;] &lt;/SPAN&gt;&lt;SPAN style="COLOR:purple;"&gt;$Extract&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt; , &lt;BR&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:Courier New;"&gt;&lt;SPAN style="COLOR:black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [&lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;string&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;] &lt;/SPAN&gt;&lt;SPAN style="COLOR:purple;"&gt;$Save&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt; ) &lt;BR&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:Courier New;"&gt;&lt;SPAN style="COLOR:black;"&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:green;FONT-FAMILY:Courier New;"&gt;# Always make sure all variables are defined. &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:Courier New;"&gt;&lt;SPAN style="COLOR:cadetblue;"&gt;&lt;STRONG&gt;Set-PSDebug&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR:cadetblue;"&gt;&lt;EM&gt;-Strict&lt;/EM&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt; &lt;BR&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:Courier New;"&gt;&lt;SPAN style="COLOR:blue;"&gt;function&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt; Usage &lt;BR&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:black;FONT-FAMILY:Courier New;"&gt;{ &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:Courier New;"&gt;&lt;SPAN style="COLOR:maroon;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ""&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt; &lt;BR&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:Courier New;"&gt;&lt;SPAN style="COLOR:maroon;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; "Downloads and extracts all the tools from Sysinternals"&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;&amp;nbsp;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:Courier New;"&gt;&lt;SPAN style="COLOR:maroon;"&gt;""&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;&amp;nbsp;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:Courier New;"&gt;&lt;SPAN style="COLOR:maroon;"&gt;"Usage: Get-SysInternalsSuite -extract &amp;lt;directory&amp;gt;"&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;&amp;nbsp;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:Courier New;"&gt;&lt;SPAN style="COLOR:maroon;"&gt;"&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [-save &amp;lt;directory&amp;gt;]"&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;&amp;nbsp;&lt;BR&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:Courier New;"&gt;&lt;SPAN style="COLOR:maroon;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;"Required Parameter :"&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt; &lt;BR&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:Courier New;"&gt;&lt;SPAN style="COLOR:maroon;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; " -extract &amp;lt;directory&amp;gt; : The directory where the SysinternalsSuite.zip"&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt; &lt;BR&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:Courier New;"&gt;&lt;SPAN style="COLOR:maroon;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; "&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; tools are extracted."&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt; &lt;BR&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:Courier New;"&gt;&lt;SPAN style="COLOR:maroon;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; "Optional Parameters :"&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt; &lt;BR&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:Courier New;"&gt;&lt;SPAN style="COLOR:maroon;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; " -save &amp;lt;directory&amp;gt; : Saves SysinternalsSuite.zip to the specified"&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt; &lt;BR&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:Courier New;"&gt;&lt;SPAN style="COLOR:maroon;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; "&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; directory. If not specified, the .ZIP file "&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt; &lt;BR&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:Courier New;"&gt;&lt;SPAN style="COLOR:maroon;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; "&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; is not saved."&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt; &lt;BR&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:Courier New;"&gt;&lt;SPAN style="COLOR:maroon;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; " -? : Display this usage information"&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt; &lt;BR&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:Courier New;"&gt;&lt;SPAN style="COLOR:maroon;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ""&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt; &lt;BR&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:Courier New;"&gt;&lt;SPAN style="COLOR:maroon;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ""&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt; &lt;BR&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:black;FONT-FAMILY:Courier New;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; exit&amp;nbsp;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:black;FONT-FAMILY:Courier New;"&gt;} &lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:Courier New;"&gt;&lt;SPAN style="COLOR:blue;"&gt;function&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt; CreateDirectoryIfNeeded ( [&lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;string&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;] &lt;/SPAN&gt;&lt;SPAN style="COLOR:purple;"&gt;$directory&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt; ) &lt;BR&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:black;FONT-FAMILY:Courier New;"&gt;{ &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:Courier New;"&gt;&lt;SPAN style="COLOR:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt; ( &lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;!&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt; ( &lt;/SPAN&gt;&lt;SPAN style="COLOR:cadetblue;"&gt;&lt;STRONG&gt;Test-Path&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR:purple;"&gt;$directory&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt; -type &lt;/SPAN&gt;&lt;SPAN style="COLOR:maroon;"&gt;"Container"&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt; ) )&amp;nbsp;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:black;FONT-FAMILY:Courier New;"&gt;{&amp;nbsp;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:Courier New;"&gt;&lt;SPAN style="COLOR:cadetblue;"&gt;&lt;STRONG&gt;New-Item&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt; -type directory &lt;/SPAN&gt;&lt;SPAN style="COLOR:cadetblue;"&gt;&lt;EM&gt;-Path&lt;/EM&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR:purple;"&gt;$directory&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt; &amp;gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR:purple;"&gt;$null&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt; &lt;BR&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:black;FONT-FAMILY:Courier New;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:black;FONT-FAMILY:Courier New;"&gt;} &lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:green;FONT-FAMILY:Courier New;"&gt;################################################################## &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:green;FONT-FAMILY:Courier New;"&gt;# Main execution starts here. &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:green;FONT-FAMILY:Courier New;"&gt;&lt;BR&gt;# Check for the help request. &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:Courier New;"&gt;&lt;SPAN style="COLOR:blue;"&gt;if&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt; ( ( &lt;/SPAN&gt;&lt;SPAN style="COLOR:navy;"&gt;$Args&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;-eq&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR:maroon;"&gt;'-?'&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;) &lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;-or&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt; ( &lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;!&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR:purple;"&gt;$Extract&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt; ) ) &lt;BR&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:black;FONT-FAMILY:Courier New;"&gt;{&amp;nbsp;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:black;FONT-FAMILY:Courier New;"&gt;Usage &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:black;FONT-FAMILY:Courier New;"&gt;}&amp;nbsp;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:Courier New;"&gt;&lt;SPAN style="COLOR:purple;"&gt;&lt;BR&gt;$paramLog&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;=&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR:maroon;"&gt;@" &lt;BR&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:maroon;FONT-FAMILY:Courier New;"&gt;Param Extract&amp;nbsp;&amp;nbsp; = $Extract &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:maroon;FONT-FAMILY:Courier New;"&gt;Param Save&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; = $Save &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:maroon;FONT-FAMILY:Courier New;"&gt;"@ &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:Courier New;"&gt;&lt;SPAN style="COLOR:cadetblue;"&gt;&lt;STRONG&gt;Write-Debug&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR:purple;"&gt;$paramLog&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt; &lt;BR&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:Courier New;"&gt;&lt;SPAN style="COLOR:black;"&gt;&lt;BR&gt;[&lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;string&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;]&lt;/SPAN&gt;&lt;SPAN style="COLOR:purple;"&gt;$sevenZName&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;=&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR:maroon;"&gt;"7Z.EXE"&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt; &lt;BR&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:green;FONT-FAMILY:Courier New;"&gt;# Verify I can find UNZIP.EXE in the path. &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:Courier New;"&gt;&lt;SPAN style="COLOR:black;"&gt;[&lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;string&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;]&lt;/SPAN&gt;&lt;SPAN style="COLOR:purple;"&gt;$sevenZPath&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;=&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt; $(&lt;/SPAN&gt;&lt;SPAN style="COLOR:cadetblue;"&gt;&lt;STRONG&gt;Get-Command&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR:purple;"&gt;$sevenZName&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;).Definition &lt;BR&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:Courier New;"&gt;&lt;SPAN style="COLOR:blue;"&gt;if&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt; ( &lt;/SPAN&gt;&lt;SPAN style="COLOR:purple;"&gt;$sevenZPath&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;.Length &lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;-eq&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt; 0 ) &lt;BR&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:black;FONT-FAMILY:Courier New;"&gt;{ &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:Courier New;"&gt;&lt;SPAN style="COLOR:cadetblue;"&gt;&lt;STRONG&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Write-Error&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR:maroon;"&gt;"Unable to find $sevenZName in the path."&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt; &lt;BR&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:black;FONT-FAMILY:Courier New;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; exit &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:black;FONT-FAMILY:Courier New;"&gt;} &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:green;FONT-FAMILY:Courier New;"&gt;&lt;BR&gt;# If the extract directory does not exist, create it. &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:Courier New;"&gt;&lt;SPAN style="COLOR:black;"&gt;CreateDirectoryIfNeeded ( &lt;/SPAN&gt;&lt;SPAN style="COLOR:purple;"&gt;$Extract&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt; ) &lt;BR&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:green;FONT-FAMILY:Courier New;"&gt;# If there's a save directory set, us that otherwise, use the %TEMP% directory. &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:Courier New;"&gt;&lt;SPAN style="COLOR:black;"&gt;[&lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;Boolean&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;]&lt;/SPAN&gt;&lt;SPAN style="COLOR:purple;"&gt;$deleteZipFile&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;=&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;$TRUE&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt; &lt;BR&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:Courier New;"&gt;&lt;SPAN style="COLOR:black;"&gt;[&lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;String&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;]&lt;/SPAN&gt;&lt;SPAN style="COLOR:purple;"&gt;$downloadFile&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;=&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR:maroon;"&gt;""&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt; &lt;BR&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:Courier New;"&gt;&lt;SPAN style="COLOR:blue;"&gt;if&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt; ( &lt;/SPAN&gt;&lt;SPAN style="COLOR:purple;"&gt;$Save&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;.Length &lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;-gt&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt; 0 ) &lt;BR&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:black;FONT-FAMILY:Courier New;"&gt;{&amp;nbsp;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:Courier New;"&gt;&lt;SPAN style="COLOR:black;"&gt;CreateDirectoryIfNeeded ( &lt;/SPAN&gt;&lt;SPAN style="COLOR:purple;"&gt;$Save&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt; ) &lt;BR&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:Courier New;"&gt;&lt;SPAN style="COLOR:purple;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $downloadFile&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;=&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR:purple;"&gt;$Save&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt; &lt;BR&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:Courier New;"&gt;&lt;SPAN style="COLOR:purple;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $deleteZipFile&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;=&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;$FALSE&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt; &lt;BR&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:black;FONT-FAMILY:Courier New;"&gt;} &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:Courier New;"&gt;&lt;SPAN style="COLOR:blue;"&gt;else&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt; &lt;BR&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:black;FONT-FAMILY:Courier New;"&gt;{&amp;nbsp;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:Courier New;"&gt;&lt;SPAN style="COLOR:green;"&gt;# Use the %TEMP% path for the user. &lt;BR&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:Courier New;"&gt;&lt;SPAN style="COLOR:purple;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $downloadFile&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;=&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR:purple;"&gt;$env:temp&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt; &lt;BR&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:black;FONT-FAMILY:Courier New;"&gt;} &lt;BR&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:green;FONT-FAMILY:Courier New;"&gt;# Build up the full location and filename. &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:Courier New;"&gt;&lt;SPAN style="COLOR:purple;"&gt;$downloadFile&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;=&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt; $(&lt;/SPAN&gt;&lt;SPAN style="COLOR:cadetblue;"&gt;&lt;STRONG&gt;Get-item&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR:purple;"&gt;$downloadFile&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;).FullName &lt;BR&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:Courier New;"&gt;&lt;SPAN style="COLOR:purple;"&gt;$downloadFile&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;=&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR:cadetblue;"&gt;&lt;STRONG&gt;Join-Path&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR:cadetblue;"&gt;&lt;EM&gt;-path&lt;/EM&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR:purple;"&gt;$downloadFile&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR:cadetblue;"&gt;&lt;EM&gt;-childpath&lt;/EM&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR:maroon;"&gt;"SysinternalsSuite.zip"&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;&amp;nbsp;&lt;BR&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:green;FONT-FAMILY:Courier New;"&gt;&amp;nbsp;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:green;FONT-FAMILY:Courier New;"&gt;# Let the download begin! &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:Courier New;"&gt;&lt;SPAN style="COLOR:cadetblue;"&gt;&lt;STRONG&gt;Write-Output&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR:maroon;"&gt;"Starting download of the Sysinternals Suite"&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt; &lt;BR&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:Courier New;"&gt;&lt;SPAN style="COLOR:purple;"&gt;$webClient&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;=&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR:cadetblue;"&gt;&lt;STRONG&gt;New-Object&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt; System.Net.WebClient &lt;BR&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:Courier New;"&gt;&lt;SPAN style="COLOR:purple;"&gt;$webClient&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;.DownloadFile(&lt;/SPAN&gt;&lt;SPAN style="COLOR:maroon;"&gt;"http://download.sysinternals.com/Files/SysinternalsSuite.zip"&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt; , &lt;BR&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:Courier New;"&gt;&lt;SPAN style="COLOR:purple;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $downloadFile&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;) &lt;BR&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:Courier New;"&gt;&lt;SPAN style="COLOR:cadetblue;"&gt;&lt;STRONG&gt;Write-Output&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR:maroon;"&gt;"Sysinternals suite downloaded to $downloadFile"&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt; &lt;BR&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:green;FONT-FAMILY:Courier New;"&gt;&lt;BR&gt;# I don't like to see all the output from 7z unless there's a problem so I'll &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:green;FONT-FAMILY:Courier New;"&gt;# redirect to a temporary file and if there's any problems, I'll show it. &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:Courier New;"&gt;&lt;SPAN style="COLOR:purple;"&gt;$temp7zOutput&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;=&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt; [&lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;System.IO.Path&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;]::&lt;/SPAN&gt;&lt;SPAN style="COLOR:saddlebrown;"&gt;GetTempFileName&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;()&amp;nbsp;&lt;BR&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:green;FONT-FAMILY:Courier New;"&gt;&lt;BR&gt;# Since the -o option to 7Z.EXE cannot have a space between it and the &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:green;FONT-FAMILY:Courier New;"&gt;# directory there's a bit of a problem. PowerShell does not expand the &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:green;FONT-FAMILY:Courier New;"&gt;# line -o$Extract if passed directly on the command line. &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:Courier New;"&gt;&lt;SPAN style="COLOR:purple;"&gt;$outputOption&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;=&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR:maroon;"&gt;"-o$Extract"&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt; &lt;BR&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:Courier New;"&gt;&lt;SPAN style="COLOR:cadetblue;"&gt;&lt;STRONG&gt;Write-Output&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR:maroon;"&gt;"Extracting files into $Extract"&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt; &lt;BR&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:Courier New;"&gt;&lt;SPAN style="COLOR:black;"&gt;&amp;amp;&lt;/SPAN&gt;&lt;SPAN style="COLOR:purple;"&gt;$sevenZPath&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt; x -y &lt;/SPAN&gt;&lt;SPAN style="COLOR:purple;"&gt;$outputOption&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR:purple;"&gt;$downloadFile&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt; &amp;gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR:purple;"&gt;$temp7zOutput&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt; &lt;BR&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:Courier New;"&gt;&lt;SPAN style="COLOR:blue;"&gt;if&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt; ( &lt;/SPAN&gt;&lt;SPAN style="COLOR:navy;"&gt;$LASTEXITCODE&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;-ne&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt; 0 ) &lt;BR&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:black;FONT-FAMILY:Courier New;"&gt;{&amp;nbsp;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:Courier New;"&gt;&lt;SPAN style="COLOR:green;"&gt;# There was a problem extracting.&amp;nbsp;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:Courier New;"&gt;&lt;SPAN style="COLOR:cadetblue;"&gt;&lt;STRONG&gt;Get-Content&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR:purple;"&gt;$temp7zOutput&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;&amp;nbsp;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:Courier New;"&gt;&lt;SPAN style="COLOR:green;"&gt;# Don't delete the download file.&amp;nbsp;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:Courier New;"&gt;&lt;SPAN style="COLOR:purple;"&gt;$deleteZipFile&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;=&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;$FALSE&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;&amp;nbsp;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:Courier New;"&gt;&lt;SPAN style="COLOR:cadetblue;"&gt;&lt;STRONG&gt;Write-Error&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR:maroon;"&gt;"Error extracting the .ZIP file"&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;&amp;nbsp;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:Courier New;"&gt;&lt;SPAN style="COLOR:cadetblue;"&gt;&lt;STRONG&gt;Write-Error&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR:maroon;"&gt;"The downloaded .ZIP file is at $downloadFile and will not be deleted."&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt; &lt;BR&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:black;FONT-FAMILY:Courier New;"&gt;} &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:green;FONT-FAMILY:Courier New;"&gt;# Delete the file that held the extraction output. &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:Courier New;"&gt;&lt;SPAN style="COLOR:cadetblue;"&gt;&lt;STRONG&gt;del&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR:purple;"&gt;$temp7zOutput&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt; &lt;BR&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:green;FONT-FAMILY:Courier New;"&gt;# Delete the downloaded .ZIP file if I'm supposed to. &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:Courier New;"&gt;&lt;SPAN style="COLOR:blue;"&gt;if&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt; ( &lt;/SPAN&gt;&lt;SPAN style="COLOR:purple;"&gt;$deleteZipFile&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;-eq&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;$TRUE&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt; ) &lt;BR&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:black;FONT-FAMILY:Courier New;"&gt;{ &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:Courier New;"&gt;&lt;SPAN style="COLOR:cadetblue;"&gt;&lt;STRONG&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Remove-Item&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR:purple;"&gt;$downloadFile&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt; &lt;BR&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:black;FONT-FAMILY:Courier New;"&gt;} &lt;/SPAN&gt;&lt;/P&gt;&lt;img src="http://www.wintellect.com/cs/aggbug.aspx?PostID=5980" width="1" height="1"&gt;</description></item><item><title>Paraffin 1.03 – Couple of Bug Fixes</title><link>http://www.wintellect.com/cs/blogs/jrobbins/archive/2008/04/19/paraffin-1-03-couple-of-bug-fixes.aspx</link><pubDate>Sat, 19 Apr 2008 23:19:08 GMT</pubDate><guid isPermaLink="false">c9b5046a-91b6-4822-a57a-d848b8cb6435:5971</guid><dc:creator>jrobbins</dc:creator><slash:comments>5</slash:comments><comments>http://www.wintellect.com/cs/blogs/jrobbins/comments/5971.aspx</comments><wfw:commentRss>http://www.wintellect.com/cs/blogs/jrobbins/commentrss.aspx?PostID=5971</wfw:commentRss><description>&lt;p&gt;Last year I released a tool to help make maintaining WiX 2.0-based installations easier called &lt;a href="http://www.wintellect.com/cs/blogs/jrobbins/archive/2007/10/21/wix-a-better-tallow-paraffin.aspx"&gt;Paraffin&lt;/a&gt;. I've fixed the following two issues:
&lt;/p&gt;&lt;ol&gt;&lt;li&gt;I was relying on the short name of the file when generating an updated .PARAFFIN file. Sadly, it looks like the short file names are essentially random. I now only rely on the File element, Source attribute when looking for existing files.
&lt;/li&gt;&lt;li&gt;I had swapped INSTALLDIR and TARGETDIR when generating the fragment.
&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;Hope you find it useful! Get the latest source code &lt;a href="http://www.wintellect.com/cs/files/folders/4332/download.aspx"&gt;here&lt;/a&gt;.&lt;/p&gt;&lt;img src="http://www.wintellect.com/cs/aggbug.aspx?PostID=5971" width="1" height="1"&gt;</description></item><item><title>Finding an Object’s GC Generation in the Visual Studio Debugger</title><link>http://www.wintellect.com/cs/blogs/jrobbins/archive/2008/04/18/finding-an-object-s-gc-generation-in-the-visual-studio-debugger.aspx</link><pubDate>Fri, 18 Apr 2008 19:05:16 GMT</pubDate><guid isPermaLink="false">c9b5046a-91b6-4822-a57a-d848b8cb6435:5967</guid><dc:creator>jrobbins</dc:creator><slash:comments>1</slash:comments><comments>http://www.wintellect.com/cs/blogs/jrobbins/comments/5967.aspx</comments><wfw:commentRss>http://www.wintellect.com/cs/blogs/jrobbins/commentrss.aspx?PostID=5967</wfw:commentRss><description>&lt;p&gt;As a .NET developer, your top three concerns are 1) Memory, 2) Memory, and the last one is the toughest, 3) Memory. While .NET takes away the pain of manual memory management if you aren't constantly worrying about what's in your Gen 2 heap, you're going to suffer with bad performance or worse, unexplained OutOfMemoryExceptions. The garbage collection system in .NET is fantastic, but when you trigger a garbage collection, &lt;em&gt;none of your code is executing&lt;/em&gt;. That's why it's so important to have that feel for which of your objects are sitting in which generation.
&lt;/p&gt;&lt;p&gt;While you can use &lt;a href="http://www.microsoft.com/whdc/DevTools/Debugging/default.mspx"&gt;WinDBG&lt;/a&gt; and Steve Johnson's excellent &lt;a href="http://www.wintellect.com/cs/blogs/jrobbins/archive/2007/06/18/great-sosex-a-phenomenal-net-debugging-extension-to-see-the-hard-stuff-steve-johnson-is-my-hero.aspx"&gt;SOSEX&lt;/a&gt; extension to look up your objects, it's a bit painful. My ultimate dream would be that the CLR team would expose a heap walking functionality in the debugging API so this was a natural part of the Visual Studio debugger. While that may happen in a future version, I wanted to show you a way you can get this today. While I'll show this with Visual Studio 2008, everything should work exactly the same in Visual Studio 2005.
&lt;/p&gt;&lt;p&gt;Finding an object's generation in your code is easy with the &lt;a href="http://msdn2.microsoft.com/en-us/library/h28z0ez9.aspx"&gt;GC.GetGeneration&lt;/a&gt; function. Just pass the object as a parameter and the return value will be 0, 1, or 2. Since the debugger has supported calling functions from the debugger Watch window forever, there's nothing stopping you from calling GC.GetGeneration on your own. In fact, the debugger &lt;em&gt;wants&lt;/em&gt; you call functions from the Watch window so they provide Intellisense and tool tip support to make it easy.
&lt;/p&gt;&lt;p&gt;&lt;img src="http://www.wintellect.com/cs/blogs/jrobbins/041808_1908_FindinganOb1.png" alt="" /&gt;
	&lt;/p&gt;&lt;p&gt;If I wanted to find out what generation the sb variable is in, just pass it as the parameter.
&lt;/p&gt;&lt;p&gt;&lt;img src="http://www.wintellect.com/cs/blogs/jrobbins/041808_1908_FindinganOb2.png" alt="" /&gt;
	&lt;/p&gt;&lt;p&gt;If the object you want to look at is in scope, calling GC.GetGeneration on it works great. The bigger question is how can you look at those objects that are not in scope? That's probably the case that you're most interested in seeing. Fortunately, there's a barely &lt;a href="http://msdn2.microsoft.com/en-us/library/ms164903.aspx"&gt;mentioned&lt;/a&gt; technique you can use to observe your interesting objects: Make Object ID.
&lt;/p&gt;&lt;p&gt;In any debugger window where the expression evaluator is used, such as the Watch, Me/This, Locals, Quick Watch, and Data Tips, you can right click on the variable to bring up the context menu where you can access the Make Object ID command.
&lt;/p&gt;&lt;p&gt;&lt;img src="http://www.wintellect.com/cs/blogs/jrobbins/041808_1908_FindinganOb3.png" alt="" /&gt;
	&lt;/p&gt;&lt;p&gt;After selecting Make Object ID, you'll see that in the Value column or Data Tip display, there will be a decimal integer followed by the number (#) sign. That's the ID applied to that object. Note that Make Object ID will not add a reference to the object inside the debuggee. Think of Make Object ID as watching the object, but not referencing it.
&lt;/p&gt;&lt;p&gt;In the screen shot below, I created an Object ID for the XmlDocument variable doc. That added the &lt;span style="font-family:Courier New;"&gt;{1#}&lt;/span&gt; in the value column after the type. What's nice is that the Object ID can be viewed directly. In the second row, I typed in &lt;span style="font-family:Courier New;"&gt;1#&lt;/span&gt; so I could continue to observe that XmlDocument no matter where I stop later in the debugger. The important point of Make Object ID is that you can observe objects even when they are not in scope!
&lt;/p&gt;&lt;p&gt;&lt;img src="http://www.wintellect.com/cs/blogs/jrobbins/041808_1908_FindinganOb4.png" alt="" /&gt;
	&lt;/p&gt;&lt;p&gt;You might be wondering what happens if you add an Object ID to a second object in your program. What happens is that the second Object ID will be 2#, the third 3# and so on. If you want to observe thirty or forty objects, you'll need to put everything down in a table so you can keep them straight. I would love to see the ability to provide your own names to Object IDs in a future version of the debugger.
&lt;/p&gt;&lt;p&gt;What I especially like about making an Object ID is that if the object you're watching is garbage collected, you'll see the that when you stop in the debugger. You may need to click the green recycle icon on the right hand side of the Value column if the line is grayed out when you stop.
&lt;/p&gt;&lt;p&gt;&lt;img src="http://www.wintellect.com/cs/blogs/jrobbins/041808_1908_FindinganOb5.png" alt="" /&gt;
	&lt;/p&gt;&lt;p&gt;While Make Object ID lets you observe objects outside of the current scope and see if its garbage collected, how does that help with determining the generation? The good news is that it helps tremendously as the expression evaluator in Visual Studio seems to know about the Object ID values and can parse them. 
&lt;/p&gt;&lt;p&gt;The documentation does not explicitly state that using the Object ID in different types of expressions is supported but in the discussion of Make Object ID, it says that you can use Make Object ID to set per instance breakpoints. Unlike native code, you don't have any object addresses while debugging in .NET. In native code, you'd set a per instance breakpoint with a condition of &lt;span style="font-family:Courier New;"&gt;this == 0x1234567&lt;/span&gt;, where 0x1234567 is the address of the instance pointer. For .NET, add an Object ID to the this/Me of the object you want to stop on. In the breakpoint condition, you, if the Object ID is 5#, you'd enter &lt;span style="font-family:Courier New;"&gt;this == 5# &lt;/span&gt;or &lt;span style="font-family:Courier New;"&gt;Me = 5#&lt;/span&gt; for C# or VB, respectively.
&lt;/p&gt;&lt;p&gt;I figured it could not hurt to try passing the Object ID to GC.GetGeneration to see what would happen.
&lt;/p&gt;&lt;p&gt;&lt;img src="http://www.wintellect.com/cs/blogs/jrobbins/041808_1908_FindinganOb6.png" alt="" /&gt;
	&lt;/p&gt;&lt;p&gt;Excellent! The expression evaluator does the correct parsing and you now have a way to watch what generation an object while using Visual Studio even if it's not in scope. While it's still a manual process, it might let you stay in Visual Studio a bit longer before you have to do the deep spelunking with SOSEX. Hopefully future versions of Visual Studio will make it easy to determine our object's generation, but at least you have a tip that works with today's debugger.&lt;/p&gt;&lt;img src="http://www.wintellect.com/cs/aggbug.aspx?PostID=5967" width="1" height="1"&gt;</description></item><item><title>Installing Windows Server 2003 R2 x64 on a Mac Pro</title><link>http://www.wintellect.com/cs/blogs/jrobbins/archive/2008/03/18/installing-windows-server-2003-r2-x64-on-a-mac-pro.aspx</link><pubDate>Tue, 18 Mar 2008 23:15:00 GMT</pubDate><guid isPermaLink="false">c9b5046a-91b6-4822-a57a-d848b8cb6435:5677</guid><dc:creator>jrobbins</dc:creator><slash:comments>4</slash:comments><comments>http://www.wintellect.com/cs/blogs/jrobbins/comments/5677.aspx</comments><wfw:commentRss>http://www.wintellect.com/cs/blogs/jrobbins/commentrss.aspx?PostID=5677</wfw:commentRss><description>&lt;p&gt;Recently, the computer I was using as my server started having some overheating problems. The good news is that the machine shut down before harming components, but with that machine running my domain controller I needed it running in order to get work done and to waste time surfing the Internet. The server was in a largish closet so I moved it to my office in the hopes that it would limp along. That kept it running, but the noise was atrocious! Its one thing to have a little white noise from a computer but it this was like sitting next to a jet engine with afterburners screaming. 
&lt;/p&gt;&lt;p&gt;My initial thought was to purchase another generic server box and stuff it into the closet. However, with summer coming up, I wasn't so sure I could completely eliminate the heat dissipation problems in the closet. Installing a dedicated air conditioner inside my condo was definitely not going to happen. Gazing at my nearly silent main desktop machine, my lovely &lt;a href="http://www.wintellect.com/cs/blogs/jrobbins/archive/2007/02/15/vista-x64-on-a-mac-pro-totally-awesome-dude.aspx"&gt;Mac Pro&lt;/a&gt; running Vista x64, I wondered if it would run Server 2003 R2 x64? Andreas Olsson &lt;a href="http://www.wintellect.com/cs/blogs/jrobbins/archive/2007/02/15/vista-x64-on-a-mac-pro-totally-awesome-dude.aspx"&gt;reported&lt;/a&gt; in my post about getting Vista x64 running on the Mac Pro that he successfully installed, but without a wired connection, and ran it so I knew it would probably work. Scouring around the net, my wife managed to find a killer deal on an "open box" Mac Pro 2.66 Ghz machine with an NVidia card so I pounced. (She hated the noise even worse than I did!)
&lt;/p&gt;&lt;p&gt;It was barely more complicated to install Server 2003 x64 on the Mac Pro than Vista x64. Here are the steps I took and links you'll need in case you want to live the Server Vida Loca. I should note that I added the following additional hardware to the machine, 5GB RAM, and an additional two 500 MB hard disks.
&lt;/p&gt;&lt;ol&gt;&lt;li&gt;Install OS X 10.5.2 Leopard and initialized all drives in the system. Also, I set OS X to get it's time from time.apple.com.
&lt;/li&gt;&lt;li&gt;Start the Boot Camp Assistant and partition the first drive into a 20 GB OS X partition with the rest as the Windows drive.
&lt;/li&gt;&lt;li&gt;Started the install with the Boot Camp Assistant with the Server x64 CD in the DVD drive.
&lt;/li&gt;&lt;li&gt;At boot, held down the Option key to select the Server CD as the boot device.
&lt;/li&gt;&lt;li&gt;The Server install saw all the drives in the machine. The BOOTCAMP partition is listed as the C: drive so started the installation to it.
&lt;/li&gt;&lt;li&gt;Server 2003 x64 installed just fine and recognized the NVidia graphics card. However, the Ethernet drivers are not part of the Server installation. Apple uses Intel PRO/1000 NICs in all the Mac Pros I've ever seen so it's simply a matter of visiting &lt;a href="http://www.intel.com/support/network/sb/cs-006120.htm"&gt;http://www.intel.com/support/network/sb/cs-006120.htm&lt;/a&gt; for the drivers. The direct link to the Server 2003 x64 drivers is &lt;a href="http://downloadcenter.intel.com/scripts-df-external/Detail_Desc.aspx?agr=Y&amp;amp;DwnldID=8719"&gt;http://downloadcenter.intel.com/scripts-df-external/Detail_Desc.aspx?agr=Y&amp;amp;DwnldID=8719&lt;/a&gt;.
&lt;/li&gt;&lt;li&gt;Device Manager reported five or six unknown devices with the SM Bus Driver being the one I was most interested in fixing. Again, Apple uses Intel chipsets so off to &lt;a href="http://www.intel.com/support/chipsets/inf/"&gt;http://www.intel.com/support/chipsets/inf/&lt;/a&gt; to grab the Server x64 chipset drivers. After installing them, I noticed that now I had five Intel 5000 Series Chipset PCI Express entries under System devices reporting that they didn't have device drivers. A quick search turned up &lt;a href="http://docs.info.apple.com/article.html?artnum=307163"&gt;this&lt;/a&gt; knowledge base article from Apple saying they could be ignored. There were two Other Device items I didn't worry about. The first is an Unknown ACPI device and the second was the sound driver. The machine ran great and all the tests I ran passed so I haven't bothered tracking down the ACPI device.
&lt;/li&gt;&lt;li&gt;Booting back into OS X and in Boot Camp Assistant, I initialized the two extra disks as Windows disks. Since I had set OS X to set it's time OS X picked up the right time.
&lt;/li&gt;&lt;li&gt;When I booted back to Server 2003, the correct time was picked up as I had joined the machine to my domain. If you're not sure why I talked about times getting set, Apple and Microsoft use different time formats so booting between the two operating systems means the system time gets off.
&lt;/li&gt;&lt;li&gt;In Disk Manager I formatted the two additional disks and assigned drive letters to them.
&lt;/li&gt;&lt;li&gt;After a test reboot, the drive letters were lost which was weird. Once I reset them, I rebooted and they have survived numerous reboots.
&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;Now I have a super quiet and cool running server that I can actually use in my office. In fact, my wife thought something was wrong when she first walked by because there was no more noise coming out of my office. That rates very high on the WAF (Wife Acceptance Factor)!&lt;/p&gt;&lt;img src="http://www.wintellect.com/cs/aggbug.aspx?PostID=5677" width="1" height="1"&gt;</description></item><item><title>The Travel Day from Hell</title><link>http://www.wintellect.com/cs/blogs/jrobbins/archive/2008/02/25/the-travel-day-from-hell.aspx</link><pubDate>Mon, 25 Feb 2008 13:14:40 GMT</pubDate><guid isPermaLink="false">c9b5046a-91b6-4822-a57a-d848b8cb6435:5345</guid><dc:creator>jrobbins</dc:creator><slash:comments>26</slash:comments><comments>http://www.wintellect.com/cs/blogs/jrobbins/comments/5345.aspx</comments><wfw:commentRss>http://www.wintellect.com/cs/blogs/jrobbins/commentrss.aspx?PostID=5345</wfw:commentRss><description>&lt;p&gt;Sometimes traveling for business can be fun. As part of my job, I've been able to travel all over this wonderful planet. On my business trips I've gotten to see great sites like the &lt;a href="http://en.wikipedia.org/wiki/Great_Wall_of_China"&gt;Great Wall&lt;/a&gt; of China, &lt;a href="http://www.webindia123.com/monuments/forts/golconda.htm"&gt;Golconda Fort&lt;/a&gt; in Hyderabad, India, &lt;a href="http://www.history.com/classroom/unesco/jerusalem/main.html"&gt;Old Jerusalem&lt;/a&gt; in Israel, &lt;a href="http://www.brown.edu/Departments/Anthropology/Petra/"&gt;Petra&lt;/a&gt; in Jordan, the &lt;a href="http://en.wikipedia.org/wiki/Swiss_Alps"&gt;Alps&lt;/a&gt; in Switzerland, and the &lt;a href="http://www.bootsnall.com/articles/06-11/travelers-club-international-restaurant-tuba-museum-okemos-michigan-usa.html"&gt;Traveler's Club International Restaurant and Tuba Museum&lt;/a&gt; in Okemos, Michigan (and many, many more). In addition, I get to eat all that wonderful local food. As my waistline proves, I've definitely had more than my fair share. The best part, though, is getting to meet people and learn about their culture. The biggest thing I've learned is that people love to laugh no matter where they are from. I've tried my best to be a good ambassador from my country and make as many people laugh as possible.
&lt;/p&gt;&lt;p&gt;Occasionally, business travel can be miserable. While I've had my share of screaming kids next to me on planes, flight delays, and bad hotels, on Sunday I had, short of a plane crash, the worst travel day I've ever had. 
&lt;/p&gt;&lt;p&gt;This story takes place in China. However, it's certainly not unique to China, and I absolutely do not want you to construe my story as a complaint about China or the Chinese people. I love visiting China and always look forward to my trips. Especially for the food! Real Chinese food is simply amazing and I can't even eat Chinese food in America anymore because I've been completely spoiled. The best food is in the restaurants where the locals eat. While I speak no Mandarin, my trick is to walk in to a local restaurant and walk around with the waiter. I point to whatever others are eating that looks good. I've had truly excellent meals this way, but I'll never be able to recreate one again since I have no idea what I'm eating. I also enjoy the Chinese people. I've had many impromptu conversations in parks and museums where someone wants to practice their English and I've appreciated every one of them. I also love the clients we work with in China. The engineering teams are great and they challenge me to work extremely hard to keep up with them.
&lt;/p&gt;&lt;p&gt;I'm working in China for a couple of weeks and on Sunday I had to fly from Shanghai to Beijing. My flight left at 7:45am so I wanted to leave the hotel in plenty of time to catch my flight. Fortunately, there was a taxi outside the hotel at 5:30 when I was ready to leave. I hopped in the cab and my neck immediately snapped back as I happened to choose the one driver in Shanghai who was practicing to be a Formula 1 racecar driver. I don't mind riding fast, but this guy was passing on the shoulders and squealing tires all the way. We got to the airport and I pried my knuckles off the door handles as the driver hopped out to get my bag out of the trunk. The meter was for 60 RMB and all I had was a 100 RMB bill. He wanted me to hand him the money outside the cab. However, having traveled the world, I know the taxi driver's trick where he will get back in the cab once you're outside and take off with the change. I stayed in the cab and signaled that I wanted the receipt and the change. He got back in and gave me the receipt and two bills. I got out and realized that he handed me two 10's instead of two 20's about the instant his tires smoked as he pulled away. Great, a taxi driver ripped me off first thing in the morning. However, my day was about to get worse.
&lt;/p&gt;&lt;p&gt;In the airport, I got in line to check in. When I got up to the agent, he typed and typed on his terminal. He asked if I could hand him my paper tickets. Huh? I booked my flights through a well-known US travel site and they told me my tickets were all electronic. I told the agent I didn't have any paper tickets and he said that he couldn't put me on the plane without them. He took me over to the ticketing department and the fun began. The China Air ticketing agent worked and worked to see if he could get the tickets changed, but since they were purchased through an Air Canada, there wasn't much he could do. 
&lt;/p&gt;&lt;p&gt;With time ticking away, I realized I was going to have to call the US travel company. The one thing that's really painful about using your cell phone outside the US is that you instantly become the profit center for all the cellular telecommunication companies that route your call. (I carry my phone just for emergencies.) However, I really didn't have much choice. After explaining my predicament, the travel agent said she would call China Air and get it straightened out. She put me on hold and all I could think about was being at the gas pump and watching the money counter go around and around as I seemed to be on hold forever. More than thirty minutes go buy and I'm getting desperate as my phone charges must be approaching the cost of a &lt;a href="http://www.rolls-roycemotorcars.com/"&gt;Rolls Royce&lt;/a&gt;. She finally gets back on the line and says, "We've got it worked out. Just go to the Air Canada desk and they will issue you the paper tickets."
&lt;/p&gt;&lt;p&gt;My day was going downhill and now it was picking up speed. There was a small problem. I was standing in Shanghai's &lt;a href="http://www.shanghaihighlights.com/shanghai-transportation/shanghai-hongqiao-international-airport.html"&gt;Hongqiao&lt;/a&gt; Airport, where all the domestic Chinese flights are. Air Canada only services the Shanghai &lt;a href="http://www.shanghaihighlights.com/shanghai-transportation/shanghai-pudong-international-airport.html"&gt;Pudong&lt;/a&gt; Airport. I asked the travel agent if she thought I could I could make the 140 mile round trip between the airports in the time to catch my flight, which was taking off in 25 minutes. Her response: "Oh." I asked if her company would reimburse me for the new ticket I now had to buy. She said she had to talk to a supervisor and put me on hold again. After waiting another five to seven minutes, with the phone bill now approaching the cost of a &lt;a href="http://www.gulfstream.com/g550/"&gt;Gulfstream G550&lt;/a&gt;, I finally hung up when the China Air agent said if I didn't buy the ticket now, I was going to miss the flight. I made it through security and got to the gate with 10 minutes to spare, but will now have to fight the travel site to reimburse me for the ticket and the phone charges.
&lt;/p&gt;&lt;p&gt;The flight was the best kind, uneventful. One thing I did find neat is that China Air has a camera pointed at the ground so you can see what's underneath the plane on the in-flight entertainment. We landed in Beijing and that's when my day started to get truly bad.
&lt;/p&gt;&lt;p&gt;After getting out of the airport, I fought my way through the unofficial drivers that want to drive you to the city for exorbitant rates to get in the official taxi line. The security guard points me to the next taxi in line and saw there was a driver and a passenger. I thought the guy in the passenger seat was probably a new driver learning the trade. I throw my bag in the trunk and hold onto my computer bag. As we drive off, the passenger is telling me that it's a really, really long way to the hotel. I told him that it was my eighth or ninth time to Beijing and it's not that bad. The passenger is talking on and on, but I can't really understand him. 
&lt;/p&gt;&lt;p&gt;We are riding around the loop to the toll road that leaves the airport and I realize that the driver has not turned on the meter. I tell him that I'm only going to pay the meter rate and he better turn it on if he wants to get paid. The passenger tells me that there's no need for the meter because it's a fixed rate. I raise my voice and tell them that I've been to China before and if he doesn't turn on the meter I will refuse to pay for the ride. The driver finally flips the meter on. The passenger pulls out a laminated card and tries to tell me that the rate to Beijing is 600 RMB. Having always used the same hotel in Beijing for those eight or nine trips, I know it's only like 150 RMB. I start telling him forcefully that there's no way I'm going to pay that and I'm only going to pay 150 RMB. The passenger says the tolls are very expensive and I must pay 600 RMB.
&lt;/p&gt;&lt;p&gt;We are getting near the tolls so I roll down my window and tell them that I'll pay the tolls myself (I believe they are only 10 to 20 RMB). I also figured I could start shouting at the toll collector for help. The driver goes through the toll quickly, drives on about a quarter mile past the tolls, and pulls over to the side of the road and flips the meter off.
&lt;/p&gt;&lt;p&gt;The passenger screams at me that if I don't pay, they will leave me on the side of the road. I scream back that that's fine but he has to get my bag out of the trunk first. The driver pops the trunk and the passenger gets out and orders me out of the car. I keep screaming that I won't get out unless he gets my bag out. Of course, I knew the instant I got out of that car they were going to drive off with my bag. I just sat there screaming for my bag. There are enough police cars near the airport that I figured if we sat there long enough one would have to stop. Our screaming match continued for about five minutes with the passenger outside the car and me on the inside. He gets out a piece of paper and writes down 450 RMB as the price. I grab the paper and write down 150 RMB. He screams some more and I refuse to budge. I finally write down 250 RMB and he realizes I won't do any more. The driver is yelling at the passenger and I can guess it's something about they have to get moving as he's gesturing to the road.
&lt;/p&gt;&lt;p&gt;The passenger gets back in the car and I throw the 250 RMB at him to show him that was all he was getting. We finally start driving and the two guys are obviously not pleased based on the yelling and gesturing at me they are doing. I'm thinking that now my day has now officially moved into horrible category.
&lt;/p&gt;&lt;p&gt;Based on the sounds from up front, I figure I need to start thinking seriously about protecting myself. The only thing I have that's possibly a weapon is a writing pen. I grab it out of my bag as I figure it's better than nothing. What the driver and passenger didn't know was that as a former &lt;a href="http://www.goarmy.com/JobDetail.do?id=30"&gt;Green Beret&lt;/a&gt;, there was no way I was to go down without a serious fight. After a few minutes of silence, the passenger turns to me and of all things offers me a piece of gum! He was offended when I turned him down.
&lt;/p&gt;&lt;p&gt;I pulled out a piece of paper and started writing down all the identifying numbers I could in the car. The passenger asked what I was doing and I said nothing. Now the driver and passenger really started yelling to each other. This is when my day moved to truly and completely sucking.
&lt;/p&gt;&lt;p&gt;The passenger also continued to yell at me that he needed more money for the trip. I continued to yell that he got all he was going to get, keep driving on the main road, and take me to my hotel. Based on the gesturing going on between the driver and passenger, I could guess that something was about to happen. They were yelling about something and the passenger pointed at an exit. We were far short of the main roads in Beijing when the driver started to pull off on that tiny exit on the edge of the city. Since every other time I've gone from the airport to the hotel, I have stayed on main roads the whole way, this was definitely not looking good. The only thing I could do was lunge up between the seats, push the passenger away, and grab the steering wheel. Having the element of surprise, I got a good hold on the wheel and tried to ram the taxi into any other car on the road. There was no way I was going to let these two jerks take me down some alley filled with their friends. The driver and I fought for control as we veered back and forth over three lanes of traffic. We got past the exit and the passenger managed to push me into the back seat. Amazingly, even though the road was crowded, all those other cars got out of the way, which disappointed me greatly.
&lt;/p&gt;&lt;p&gt;All three of us were screaming at each other. I was screaming at them to stay on the main road until the 3&lt;sup&gt;rd&lt;/sup&gt; Ring Road. Looking at the driver, I could see that he was scared and not too happy how this was working out. The passenger was extremely upset and screaming like crazy. I could barely make out something that he claimed that they were taking that exit to avoid traffic. Being so far outside the city, I knew it was a lie. I kept screaming to stay on the main roads and take me to my hotel. That's all I wanted.
&lt;/p&gt;&lt;p&gt;Continuing to scream "Take me to the hotel" over and over, the passenger and driver were talking to each other, and I could guess that they were trying to figure out how to get this crazy guy out of their car. I started laughing like crazy and moving my hands between the seats like I was going to grab the steering wheel again. I figured that would keep them off balance.
&lt;/p&gt;&lt;p&gt;I finally started to recognize some buildings we were driving around and was wondering how this was going to play out. At least we were on a main road and it was in stop and go traffic so there were people around. The passenger was screaming at me that they were just trying to avoid this traffic jam with the exit. I told him I didn't believe him.
&lt;/p&gt;&lt;p&gt;When we got closer to the hotel, I started recognizing more of the area and thought I really might make it to the hotel. The driver had been really quiet since turning off the airport road to what I recognized as the 3&lt;sup&gt;rd&lt;/sup&gt; Ring Road. As soon as the hotel was off in the distance the passenger started pointing and telling me "see we are taking you to the hotel." I told them to drop me off at the front door of the hotel.
&lt;/p&gt;&lt;p&gt;We turned on the road to the hotel, which is a busy thoroughfare and they pulled off the side of the road, not into the hotel entrance and told me to get out. I screamed that I paid for a ride to the hotel and they had to drop me off at the front door. My plan was to stay in the car as the bellhops came up, have them get my bag from the trunk, and only then would I get out of the car. At the hotel I stay at the bellhops all speak very good English so I was going to tell them what was going on and try to get the police down there.
&lt;/p&gt;&lt;p&gt;The passenger was out of the car screaming at me to get out and I was screaming that I needed my bag before I got out. He opened my door and I moved away from him while continuing to scream for my bag. He got it out of the trunk and set it on the ground in front of the door. I moved as though I was getting out of the car and lunged for my bag. He went for the bag as well, but I was stronger, more motivated, and had a better grip to get it pulled into the car. I yelled that they had to take me to the front door of the hotel, as that's what I paid for.
&lt;/p&gt;&lt;p&gt;The driver was sweating hard at this point and yelled at the passenger to get in. He started driving around the block to take me into the hotel. The passenger was really upset by this and was screaming at the driver. I tried to force them to go down the side street that's a one way to the hotel by grabbing the wheel again, so they could not get away from the entrance. They were more prepared for me that time and got me pushed back quickly. The driver pulled over on the same spot in the street again and refused to go into the hotel. The passenger was screaming at me to get out.
&lt;/p&gt;&lt;p&gt;The passenger jumped out, yanked my door open, and tried to pull me out. I moved into a position where I could kick him away. There were many pedestrians on the street so I started screaming "Help! Help! The taxi driver is ripping me off! Help!" I kept kicking the passenger who was still trying to pull me out of the car.
&lt;/p&gt;&lt;p&gt;About 10 people gathered as I was screaming for all I was worth. The driver was screaming at the passenger about something. In fact, it was the loudest I had heard him scream the entire time. The passenger finally said "I'll pay you to get out of the car." I screamed as loud as I could that it would be 250 RMB to get me out of the car. I continued screaming that I wanted 250 RMB when the passenger threw 150 RMB at me and told me to get out of the car. I figured I should try to get all my money back for this hellacious ride so I kept screaming for the other 100 RMB. I also didn't want to have to get out of the car with my two bags and the passenger standing in front of me. Now there were 20 people around the car wondering what was going on. The passenger slammed my door and jumped in as the driver started to drive off. Seeing my chance, I kicked open the door and got out as fast as I could. Fortunately, the driver slowed down so I was able to hop out with my bags and not take a tumble.
&lt;/p&gt;&lt;p&gt;I grabbed my paper out of my pocket and wrote down the license plate: BH 2383. (I suggest you avoid that taxi if you're in Beijing.) The crowd of people stood there completely perplexed. One gentleman spoke some English and I tried to describe what was going on. I think he got it because he saw the passenger throwing the money at me and he said: "After that they paid you to get out of the cab?!" He thought that was extremely funny. I walked off as he was telling the others what they witnessed.
&lt;/p&gt;&lt;p&gt;In the hotel, I explained what happened to one of the bellhops and a manager. We discussed calling the police, but in the end, I figured it was going to be a lot of hassle and I will be busy with the client the rest of the time I'm here. The manager said I should look on the bright side: I got a 1/3&lt;sup&gt;rd&lt;/sup&gt; off taxi ride to the hotel. While I'd like to agree with him, I don't think the trouble was really worth the 50 RMB. If any good comes of my experience, I hope the driver and passenger think twice about trying to rip off a westerner at the airport again.
&lt;/p&gt;&lt;p&gt;While my voice hurts from screaming for 40 minutes, I'm safe in a great hotel. My belly is full and I'm comfortable. In the big scheme of things, my horrible day isn't that bad, but it's the worst travel day I've had. What's your worst travel day?
&lt;/p&gt;&lt;img src="http://www.wintellect.com/cs/aggbug.aspx?PostID=5345" width="1" height="1"&gt;</description></item><item><title>Eight Weeks of PowerShell</title><link>http://www.wintellect.com/cs/blogs/jrobbins/archive/2008/02/17/eight-weeks-of-powershell.aspx</link><pubDate>Sun, 17 Feb 2008 05:30:37 GMT</pubDate><guid isPermaLink="false">c9b5046a-91b6-4822-a57a-d848b8cb6435:5294</guid><dc:creator>jrobbins</dc:creator><slash:comments>6</slash:comments><comments>http://www.wintellect.com/cs/blogs/jrobbins/comments/5294.aspx</comments><wfw:commentRss>http://www.wintellect.com/cs/blogs/jrobbins/commentrss.aspx?PostID=5294</wfw:commentRss><description>&lt;p&gt;As I &lt;a href="http://www.wintellect.com/cs/blogs/jrobbins/archive/2008/01/05/new-year-s-resolution-powershell.aspx"&gt;wrote&lt;/a&gt; a little bit ago my New Year's resolution was to see if I could make PowerShell my full time command shell. The good news is that after eight weeks, I'm still using PowerShell and enjoying it. As I still have fifteen years of CMD/4NT barnacles to scrape off, I still get tripped up every once in a while, but I'm slowly getting into the PowerShell mindset. I figure that after eight weeks I'm committed and that's definitely not a problem.
&lt;/p&gt;&lt;p&gt;When I talked about my initial PowerShell usage, I mainly talked about things that tripped me up so this time I want to talk about some things that have helped solve some of those issues and have made life better for me. As several comments to my last PowerShell post mentioned, I needed to start using the &lt;a href="http://www.codeplex.com/PowerShellCX"&gt;PowerShell Community Extensions&lt;/a&gt;. I have and I definitely like. In all, it's added many of the features I wanted so I can see why it's so highly recommended.
&lt;/p&gt;&lt;p&gt;I did have a few problems installing the PowerShell Community Extensions (PSCX) on Vista x64 so wanted to share how I got things working in case others ran into problems. The PSCX installer runs a custom action to call INSTALLUTIL.EXE to register the PSCX.DLL snap in. The problem is that on x64, the installer runs as a 32-bit application so it's registering with the 32-bit PowerShell, not the x64 version. After installing PSCX, run the following command to get everything registered:
&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;"&gt;C:\WINDOWS\Microsoft.NET\Framework64\v2.0.50727\InstallUtil.exe &lt;br /&gt;                              "C:\Program Files (x86)\PowerShell Community Extensions\pscx.dll"
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;Also on x64, the PSCX install doesn't register the cool "Open PowerShell Here" right click option for directories in Explorer. To fix that navigate to HKEY_CLASSES_ROOT\Directory\shell\ and add a PowerShell key with a default value of "Open PowerShell Here". Add a key named command under the PowerShell key and add the following as the default value (one line):
&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;"&gt;"C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" -NoExit &lt;br /&gt;   -Command [Environment]::CurrentDirectory=(Set-Location &lt;br /&gt;   -LiteralPath:'%L' -PassThru).ProviderPath"
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;After running the PCX installation, I didn't see any of the cool PCX commands in my tab completion. As I'm using the wonderful &lt;a href="http://thepowershellguy.com/blogs/posh/archive/tags/TabExpansion/default.aspx"&gt;PowerTab&lt;/a&gt; from Marc  van Orsouw, I simply ran the new-tabexpansiondatabase command and life was better.
&lt;/p&gt;&lt;p&gt;One small script that's done more than anything to help me learn the way of PowerShell is Jeff Hillman's excellent &lt;a href="http://powershellcentral.com/scripts/144"&gt;Compile-Help.ps1&lt;/a&gt;. While it's great that PowerShell has a help system built into it from the beginning, sometimes you just need a better way of reading the help. Compile-Help enumerates through all the PowerShell Cmdlets, PSProviders, and "about" topics and compiles their output into a .CHM file. I ran Compile-Help after installing PSCX to ensure I had everything in the .CHM file. Continuing with my theme of having issues on x64, Jeff's original script didn't work on x64 so I fixed that.
&lt;/p&gt;&lt;p&gt;On the editing front, both &lt;a href="http://www.powershell.com/plus/"&gt;PowerShell Plus&lt;/a&gt; and &lt;a href="http://powergui.org/"&gt;Power GUI&lt;/a&gt; are gaining features and functionality at an amazing rate. I keep swapping back and forth between them because I like both of them. It's like both teams are working to outdo each other and we all benefit.
&lt;/p&gt;&lt;p&gt;Finally, there's been one mystery I haven't been able to figure out that's related to PowerShell: is Jeffrey Snover a real person? Everywhere I look on blogs, news groups, and forums about PowerShell, there's a comment or post from Jeffrey answering the question. There's no way a single human being can be that active and still get a normal job done. "Jeffrey Snover" has to be a web crawling, artificial intelligence system cooked up by Microsoft Research. I'm kidding about Jeffrey not existing but you do have to wonder.
&lt;/p&gt;&lt;p&gt;Seriously, one of the big reasons I got serious about using PowerShell is how active Jeffrey (and the rest of the team!) are about helping on blogs, news groups, and blog comments. When you have that much support for something new, it really makes a statement. The enthusiasm and evangelism for PowerShell by Jeffrey and the team should be a lesson to all of us.&lt;/p&gt;&lt;img src="http://www.wintellect.com/cs/aggbug.aspx?PostID=5294" width="1" height="1"&gt;</description></item><item><title>SOSEX 1.1 Released</title><link>http://www.wintellect.com/cs/blogs/jrobbins/archive/2008/02/17/sosex-1-1-released.aspx</link><pubDate>Sun, 17 Feb 2008 03:54:16 GMT</pubDate><guid isPermaLink="false">c9b5046a-91b6-4822-a57a-d848b8cb6435:5290</guid><dc:creator>jrobbins</dc:creator><slash:comments>1</slash:comments><comments>http://www.wintellect.com/cs/blogs/jrobbins/comments/5290.aspx</comments><wfw:commentRss>http://www.wintellect.com/cs/blogs/jrobbins/commentrss.aspx?PostID=5290</wfw:commentRss><description>&lt;p&gt;Steve Johnson has updated his must have &lt;a href="http://www.stevestechspot.com/SOSEXUpdatedV11Available.aspx"&gt;SOSEX&lt;/a&gt; extensions for WinDBG. The big change is that the !vars command can now dump the locals and parameters for a specific frame all the stack frames on a thread. For example, in the following snippet from a session, I wanted to see the data from the 9&lt;sup&gt;th&lt;/sup&gt; frame on the stack:
&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;"&gt;0:000&amp;gt; !vars 9&lt;br /&gt;Frame 9 (AssertTest.Program.Main()):&lt;br /&gt;Arguments:&lt;br /&gt;NONE&lt;br /&gt;Locals:&lt;br /&gt;[0]:dw:0x14ecd18 (AssertTest.DoesSomeWork)&lt;br /&gt;[1]:dw2:0x14ecd24 (AssertTest.DoesSomeWork)&lt;br /&gt;[2]:t:0x14ecd50 (System.Threading.Thread)&lt;br /&gt;[3]:t2:0x14ece48 (System.Threading.Thread)
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;To see all the locals and variables, pass –w as the option to !vars.
&lt;/p&gt;&lt;p&gt;Another nice improvement is any SOSEX command that shows values calls out value types better by showing the MT and the address. As it takes those two items for the SOS !dumpvc command to work, it's a big time saver. The following shows how you see this with the updated SOSEX:
&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;"&gt;[2]:currDate:VALTYPE (MT=7910d474, ADDR=0036d38a) (System.DateTime)
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;If you don't know about SOSEX, you can read my original &lt;a href="http://www.wintellect.com/cs/blogs/jrobbins/archive/2007/06/18/great-sosex-a-phenomenal-net-debugging-extension-to-see-the-hard-stuff-steve-johnson-is-my-hero.aspx"&gt;discussion&lt;/a&gt;. We all owe Steve a huge thanks for making SOSEX available to all of us.&lt;/p&gt;&lt;img src="http://www.wintellect.com/cs/aggbug.aspx?PostID=5290" width="1" height="1"&gt;</description></item><item><title>.NET Mass Downloader 1.2 Released</title><link>http://www.wintellect.com/cs/blogs/jrobbins/archive/2008/02/14/net-mass-downloader-1-2-released.aspx</link><pubDate>Thu, 14 Feb 2008 18:42:00 GMT</pubDate><guid isPermaLink="false">c9b5046a-91b6-4822-a57a-d848b8cb6435:5267</guid><dc:creator>jrobbins</dc:creator><slash:comments>6</slash:comments><comments>http://www.wintellect.com/cs/blogs/jrobbins/comments/5267.aspx</comments><wfw:commentRss>http://www.wintellect.com/cs/blogs/jrobbins/commentrss.aspx?PostID=5267</wfw:commentRss><description>&lt;P&gt;Kerem Kusmezer has been busy! If you've had problems with &lt;A href="http://www.codeplex.com/NetMassDownloader"&gt;.NET Mass Downloader&lt;/A&gt; working behind a proxy server, version 1.2 adds the –proxy command line switch if you need to specify server, username, password, and domain. &lt;/P&gt;
&lt;P&gt;The –proxy switch uses the following form: &lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:Courier New;"&gt;server|username|password|domainname&lt;/SPAN&gt;. &lt;/P&gt;
&lt;P&gt;Also, .NET Mass Downloader works just fine with the Visual Studio Express versions. See Kerem's article on &lt;A class="" href="http://www.codeproject.com/KB/dotnet/netmassdownloader.aspx"&gt;CodePlex&lt;/A&gt; on how to get the .NET Reference Source with Visual Studio Express.&lt;/P&gt;
&lt;P&gt;Please let us know if you are still having proxy problems, or any other problems with .NET Mass Downloader.&lt;/P&gt;&lt;img src="http://www.wintellect.com/cs/aggbug.aspx?PostID=5267" width="1" height="1"&gt;</description></item><item><title>.NET Mass Downloader 1.1 Released</title><link>http://www.wintellect.com/cs/blogs/jrobbins/archive/2008/02/07/net-mass-downloader-1-1-released.aspx</link><pubDate>Fri, 08 Feb 2008 00:04:51 GMT</pubDate><guid isPermaLink="false">c9b5046a-91b6-4822-a57a-d848b8cb6435:5227</guid><dc:creator>jrobbins</dc:creator><slash:comments>14</slash:comments><comments>http://www.wintellect.com/cs/blogs/jrobbins/comments/5227.aspx</comments><wfw:commentRss>http://www.wintellect.com/cs/blogs/jrobbins/commentrss.aspx?PostID=5227</wfw:commentRss><description>&lt;p&gt;The &lt;a href="http://www.wintellect.com/cs/blogs/jrobbins/archive/2008/02/06/download-all-the-net-reference-source-code-at-once-with-net-mass-downloader.aspx"&gt;feedback&lt;/a&gt; and downloads for &lt;a href="http://www.codeplex.com/NetMassDownloader"&gt;.Net Mass Downloader&lt;/a&gt; have been quite pleasing! Kerem and I just went through and fixed all the reported bugs so the 1.1 release is better than ever. The big fixes were that we now properly handle paths with spaces in them (see what happens when you have two old DOS guys doing a project!), and if you had trouble behind a proxy server, you shouldn't any more. As always, let us know if you find any problems or have feature requests.
&lt;/p&gt;&lt;p&gt;Just as a reminder, to download all the parts of the .NET Reference Source Code that Microsoft has released thus far, use the following command line (one line) on 32-bit:
&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10pt;"&gt;NetMassDownloader.exe -d "C:\Windows\Microsoft.Net\Framework\v2.0.50727" &lt;br /&gt;   -d "C:\Program Files\Reference Assemblies\Microsoft\Framework\v3.5" 
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;The following command line is for 64-bit:
&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10pt;"&gt;NetMassDownloader.exe -d "C:\Windows\Microsoft.Net\Framework\v2.0.50727" &lt;br /&gt;   -d "C:\Windows\Microsoft.Net\Framework64\v2.0.50727"&lt;br /&gt;   -d "C:\Program Files\Reference Assemblies\Microsoft\Framework\v3.5"&lt;br /&gt;   -d "C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\v3.5"
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;In the 64-bit example, Net Mass Downloader will do the right thing and only download the PDB files once if the same binaries are in different directories.
&lt;/p&gt;&lt;p&gt;Of course, with both command lines, if you want to use the source with Visual Studio 2005 or even &lt;a href="http://blog.marcocantu.com/blog/debugging_dotnet_source_radstudio.html"&gt;CodeGear's RAD Studio&lt;/a&gt; for you Delphi .NET fans, specify the –output option for the output directory. Follow the directions in the announcement &lt;a href="http://blog.marcocantu.com/blog/debugging_dotnet_source_radstudio.html"&gt;post&lt;/a&gt;.
&lt;/p&gt;&lt;p&gt;Just so you're not surprised, because we bumped up the version number of Net Mass Downloader, you will see the EULA prompt again.&lt;/p&gt;&lt;img src="http://www.wintellect.com/cs/aggbug.aspx?PostID=5227" width="1" height="1"&gt;</description></item><item><title>Download All the .NET Reference Source Code at Once with Net Mass Downloader</title><link>http://www.wintellect.com/cs/blogs/jrobbins/archive/2008/02/06/download-all-the-net-reference-source-code-at-once-with-net-mass-downloader.aspx</link><pubDate>Wed, 06 Feb 2008 02:55:00 GMT</pubDate><guid isPermaLink="false">c9b5046a-91b6-4822-a57a-d848b8cb6435:5193</guid><dc:creator>jrobbins</dc:creator><slash:comments>49</slash:comments><comments>http://www.wintellect.com/cs/blogs/jrobbins/comments/5193.aspx</comments><wfw:commentRss>http://www.wintellect.com/cs/blogs/jrobbins/commentrss.aspx?PostID=5193</wfw:commentRss><description>&lt;P&gt;Microsoft has really helped out the development community by making the .NET Reference Source Code available to the community. Being able to step in the &lt;A href="http://blogs.msdn.com/sburke/archive/2008/01/16/configuring-visual-studio-to-debug-net-framework-source-code.aspx"&gt;debugger&lt;/A&gt; from your code to the Framework code truly helps with you understanding and use of all parts of .NET. The only drawback I've seen with what Microsoft is offering is that the source code can only be downloaded while you're debugging. This means that unless you write a sample program that calls literally every class and method in the .NET Framework, you won't get all the source. As Scott Hanselman has so excellently &lt;A href="http://www.hanselman.com/blog/CategoryView.aspx?category=Source+Code"&gt;pointed&lt;/A&gt; out, reading code is as important, if not more, than writing it. What I really wanted was a way to download all the .NET Reference Source so I could just start reading everything. Additionally, I wanted to fill my download cache with all the source so I had it all even when I didn't have a network connection. &lt;/P&gt;
&lt;P&gt;It turns out I wasn't the only one who had the same wishes. &lt;A href="http://www.kodyaz.com/blogs/unknown_tales_from_kerem/default.aspx"&gt;Kerem Kusmezer&lt;/A&gt; contacted me and said that he'd been hacking around with &lt;A href="http://www.fiddlertool.com/fiddler/"&gt;Fiddler&lt;/A&gt; and figured out how to download the PDBs and code from Microsoft. He asked if I I'd be interested in helping him develop the utility and I don't think I ever wrote a response faster in my life! Kerem had already started a discussion with &lt;A href="http://blogs.msdn.com/sburke/default.aspx"&gt;Shawn Burke&lt;/A&gt; about the legality of producing a source downloader and once we got back a very encouraging "go for it" we got to work. All the credit for the tool belongs to Kerem. He did all the really hard work of figuring out the HTTP downloads ,the PE file processing, and PDB Stream Extraction. I did the console driver, a lot of testing, and sat around amazed at how much work Kerem could accomplish in very short periods of time. I really appreciate that Kerem let me work on the project with him and being his code monkey. &lt;/P&gt;
&lt;P&gt;The tool is called Net Mass Downloader and we made the source code available at CodePlex at &lt;A href="http://www.codeplex.com/NetMassDownloader"&gt;http://www.codeplex.com/NetMassDownloader&lt;/A&gt; so you can see how it works. It's a command line tool and running the tool without parameters produces the following output: &lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:Courier New;"&gt;.Net Mass Downloader 1.0.0.0 - (c) 2008 by Kerem Kusmezer, John Robbins&lt;BR&gt;&lt;BR&gt;Batch download the Microsoft .NET Reference Source code.&lt;BR&gt;&lt;BR&gt;Usage: NetMassDownloader [-file &amp;lt;file&amp;gt;]&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [-directory &amp;lt;directory]&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [-output &amp;lt;directory&amp;gt;]&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [-vsver &amp;lt;version&amp;gt;]&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [-force] [-nologo] [-verbose] [-?]&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; -file&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; - Download an individual file's PDB and source code. You can&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; specify multiple file parameters. (Short -f).&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; -directory - Download all the found PDB and source code for all files in&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; the specified directory. You can specify multiple&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; directory parameters (Short -d).&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-output &amp;nbsp;&amp;nbsp; - The output directory for PDB and source files. The default&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; directory is the cache directory set in Visual Studio 2008.&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; By using the cache directory, you'll have the PDB and source&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; files available to Visual Studio 2008. However, to use the&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .NET Reference Source Code with VS 2005, use the -output&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; switch and in the Options dialog, Debugging, Symbols property&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; page, add the specified output directory to the "Symbol file&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (.pdb) locations." Also, add the directory to the Solution&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Properties, Common Properties, Debug Source Files, Directories&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; containing source code location. The Visual Studio 2005&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; debugger will automatically load the source code. (Short -o)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-vsver &amp;nbsp;&amp;nbsp;&amp;nbsp; - The Visual Studio version number to use for finding the cache&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; directory. The default is Visual Studio 2008,&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; but if you want to use the cache directory for Visual Studio&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2005, you would pass '-vsver 8.0' (without quotes) (Short -vs)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-force &amp;nbsp;&amp;nbsp;&amp;nbsp; - If specified, forces the downloading the PDB files into the&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; symbol server. When downloading to a symbol server if the PDB&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; exists, it's not downloaded. Using the -output switch will&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; always download and process the PDB. (Short -fo)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-nologo&amp;nbsp;&amp;nbsp; &amp;nbsp;- Don't show the logo information. (Short -n)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-verbose&amp;nbsp;&amp;nbsp; - Do verbose output. May be worth turning on as the downloading&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; source code can take a long time. (Short -v)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-?&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; - This help message.. &lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;The only required arguments are &lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:Courier New;"&gt;–file&lt;/SPAN&gt; or&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:Courier New;"&gt; –directory&lt;/SPAN&gt;, both of which can be specified as many times as you'd like. When you specify a directory, only the .DLL and .EXE files from that directory will be processed. If you wanted to download all the source code from binaries in the .NET 2.0 32-bit and 64-bit directories, the command line you'd pass is: &lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:Courier New;"&gt;-d C:\Windows\Microsoft.NET\Framework\v2.0.50727 –d C:\Windows\Microsoft.NET\Framework64\v2.0.50727&lt;/SPAN&gt;. &lt;/P&gt;
&lt;P&gt;The main purpose of Net Mass Downloader is to populate the source code download cache for debugging, the default download location is the cache you specified to Visual Studio 2008. We put in the &lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:Courier New;"&gt;–vsver&lt;/SPAN&gt; switch to account for future Visual Studio versions so Mass Downloader could work with future CTPs and versions. &lt;/P&gt;
&lt;P&gt;While it's great to see the .NET Reference Source Code in Visual Studio 2008, there are a lot of developers out there who can't upgrade yet. Initially, Kerem and I went down the path of seeing if we could patch the PDB files so Visual Studio 2005 users could have access to the .NET Reference Source Code. After a lot of hassle, we realized that there was a much easier way. If you specify the &lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:Courier New;"&gt;–output&lt;/SPAN&gt; switch, we will put the PDB and the source code into that directory using the build paths instead of the source server paths. Thus, if your command line to NetMassDownloader.exe is &lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:Courier New;"&gt;–d&lt;/SPAN&gt; &lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:Courier New;"&gt;C:\Windows\Microsoft.NET\Framework\v2.0.50727 –output c:\ReferenceSource&lt;/SPAN&gt;, the PDB files are put in C:\ReferenceSource as well as the source files. &lt;/P&gt;
&lt;P&gt;To use the .NET Reference Source with Visual Studio 2005, you would need to do the following three additional steps. The first is in the Options dialog for Visual Studio, Debugging, Symbols property page. In the "Symbol file (.pdb) locations" list box, you would add "c:\ReferenceSource" like the following. &lt;/P&gt;
&lt;P&gt;&lt;IMG alt="" src="http://www.wintellect.com/cs/blogs/jrobbins/020608_0256_DownloadAll1.png"&gt; &lt;/P&gt;
&lt;P&gt;The second setting is in Options dialog, Debugging, General property page, uncheck Require source files to exactly match the original version. &lt;/P&gt;
&lt;P&gt;&lt;IMG alt="" src="http://www.wintellect.com/cs/blogs/jrobbins/020608_0256_DownloadAll2.png"&gt; &lt;/P&gt;
&lt;P&gt;The final step you'll have to do in each solution where you want to access the downloaded .NET Reference Source Code, you'll go into the solution property pages, Common Properties, Debugging Source Files, and add C:\ReferenceSources to the top of the "Directories containing source code" list box as follows: &lt;/P&gt;
&lt;P&gt;&lt;IMG alt="" src="http://www.wintellect.com/cs/blogs/jrobbins/020608_0256_DownloadAll3.png"&gt; &lt;/P&gt;
&lt;P&gt;Visual Studio 2005 will automatically do the right thing and replace the first directory of every source file it finds in a PDB file with c:\ReferenceSource. With the automation model in Visual Studio 2005, I'm sure you could wipe up a macro to automatically set that path in the solution. &lt;/P&gt;
&lt;P&gt;When you first run Net Mass Downloader, you will be prompted with the current EULA for accessing the source code. If you don't agree with the Microsoft EULA, clicking the Decline button will not download the source code. While you might be tempted to remove the EULA check, I would strongly recommend that you not do so as Microsoft has said that they may change the EULA at any time. The last thing you want to do is get caught with a license change that could impact your life. &lt;/P&gt;
&lt;P&gt;One group we need to thank is the Developer Division at Microsoft. First they released the .NET Reference Source Code, and second for allowing a couple of developers to have some fun and provide a utility for the community. &lt;/P&gt;
&lt;P&gt;As always let us know on CodePlex if you encounter any bugs or have feature requests.&lt;/P&gt;&lt;img src="http://www.wintellect.com/cs/aggbug.aspx?PostID=5193" width="1" height="1"&gt;</description></item><item><title>Debugging VBA Macros and Managed Components at the Same Time</title><link>http://www.wintellect.com/cs/blogs/jrobbins/archive/2008/02/02/debugging-vba-macros-and-managed-components-at-the-same-time.aspx</link><pubDate>Sun, 03 Feb 2008 01:44:51 GMT</pubDate><guid isPermaLink="false">c9b5046a-91b6-4822-a57a-d848b8cb6435:5182</guid><dc:creator>jrobbins</dc:creator><slash:comments>2</slash:comments><comments>http://www.wintellect.com/cs/blogs/jrobbins/comments/5182.aspx</comments><wfw:commentRss>http://www.wintellect.com/cs/blogs/jrobbins/commentrss.aspx?PostID=5182</wfw:commentRss><description>&lt;p&gt;This week I got the following question in email: &lt;em&gt;I'm writing a COM component in C# that is used in Excel VBA macros. I really need to debug the VBA macro and the C# component at the same time. Is that possible?&lt;/em&gt; Absolutely! Here's the steps:
&lt;/p&gt;&lt;ol&gt;&lt;li&gt;Start Visual Studio with no projects open.
&lt;/li&gt;&lt;li&gt;Select the File menu, Open, Project/Solution to get to the Open Project dialog.
&lt;/li&gt;&lt;li&gt;Navigate to the directory where EXCEL.EXE is located. For Office 2007, that's C:\Program Files\Microsoft Office\Office12. On x64, it's in the C:\Program Files (x86)\Microsoft Office\Office12 directory. Double click on EXCEL.EXE. If you're using Visual Studio 2008, you'll be prompted about elevation, but you can click the Ignore button. Solution Explore will look like the following:&lt;br /&gt;&lt;img src="http://www.wintellect.com/cs/blogs/jrobbins/020308_0145_DebuggingVB1.png" alt="" /&gt;
		&lt;/li&gt;&lt;li&gt;Right click on EXCEL.EXE in Solution Explorer and select Properties to get to the Property Pages.
&lt;/li&gt;&lt;li&gt;The only property page available is Debugging. In the Debugger Type field, select Managed Only and click the OK button. This sets the Visual Studio debugger to only do managed debugging.&lt;br /&gt;&lt;img src="http://www.wintellect.com/cs/blogs/jrobbins/020308_0145_DebuggingVB2.png" alt="" /&gt;
		&lt;/li&gt;&lt;li&gt;You may want to save the solution at this point so from now on so you don't have to go through these steps each time you need to debug.
&lt;/li&gt;&lt;li&gt;Open up a source file from your manage project in Visual Studio and set a breakpoint on a line.
&lt;/li&gt;&lt;li&gt;Start debugging in Visual Studio by pressing F5.
&lt;/li&gt;&lt;li&gt;In Excel, open up your worksheet and start debugging your VBA code using Excel's debugger.
&lt;/li&gt;&lt;li&gt;When the managed code gets executed where you set the breakpoint, you'll stop in Visual Studio. 
&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;Now you can debug both the VBA and managed side of your project relatively easily. If you need to debug a native COM component in the same scenario, the only difference with the steps above is not setting the Debugger Type to managed. The default is Auto, which looks at the binary you're about to debug and if it's native, it will do native debugging.&lt;/p&gt;&lt;img src="http://www.wintellect.com/cs/aggbug.aspx?PostID=5182" width="1" height="1"&gt;</description></item><item><title>PowerShell Script for Setting Symbol Paths</title><link>http://www.wintellect.com/cs/blogs/jrobbins/archive/2008/01/22/powershell-script-for-setting-symbol-paths.aspx</link><pubDate>Tue, 22 Jan 2008 22:21:00 GMT</pubDate><guid isPermaLink="false">c9b5046a-91b6-4822-a57a-d848b8cb6435:4989</guid><dc:creator>jrobbins</dc:creator><slash:comments>1</slash:comments><comments>http://www.wintellect.com/cs/blogs/jrobbins/comments/4989.aspx</comments><wfw:commentRss>http://www.wintellect.com/cs/blogs/jrobbins/commentrss.aspx?PostID=4989</wfw:commentRss><description>&lt;P&gt;In my continued &lt;A href="http://www.wintellect.com/cs/blogs/jrobbins/archive/2008/01/05/new-year-s-resolution-powershell.aspx"&gt;resolution&lt;/A&gt; to make PowerShell my full time command line interface, I've been porting over some of my batch and JavaScript files as a learning exercise. Since the only way to really learn a technology is to do something real with it, this has been some helpful practice to "become one with the PowerShell." I'll blog later about some of the tips and tricks I've learned writing PowerShell scripts and using it day to day. The good news for the PowerShell team is that I'm still sticking with my New Year's resolution long past the point where most people quit. &lt;/P&gt;
&lt;P&gt;Speaking of New Year's resolutions, nearly everyone makes the resolution to get into shape or lose weight. I was talking with an owner of several gyms about how many people stick with their fitness resolutions and the statistics are that somewhere like 90% of the people that join a gym in January stop going within three weeks. It turns out that fitness industry has a name for these people: pure profit. &lt;/P&gt;
&lt;P&gt;The first thing I do on any computer I touch is set the &lt;A href="http://msdn.microsoft.com/msdnmag/issues/02/06/Bugslayer/"&gt;_NT_SYMBOL_PATH&lt;/A&gt; environment variable. No matter if you're doing .NET or the most hard core native C++, you need to have the environment variable set to have the &lt;A href="http://www.microsoft.com/whdc/DevTools/Debugging/default.mspx"&gt;debuggers&lt;/A&gt; and tools like &lt;A href="http://www.microsoft.com/technet/sysinternals/SystemInformation/ProcessExplorer.mspx"&gt;Process Explorer&lt;/A&gt; getting the symbols for your builds and the Microsoft public symbols. It's all about getting good call stacks when debugging. If you don't have good call stacks, you're debugging challenges grow exponentially. While I personally think that _NT_SYMBOL_PATH should be automatically set by the operating system, I won't hold my breath waiting for that to happen. &lt;/P&gt;
&lt;P&gt;While the Visual Studio debuggers can use _NT_SYMBOL_PATH, there are advantages to specifically tweaking the Visual Studio registry keys. The main one is that by setting the Visual Studio Options dialog, Debugging, Symbols property page to point to your symbol servers the settings apply for both symbols and binaries from your minidumps. Secondly, with the new and completely outstanding &lt;A href="http://blogs.msdn.com/sburke/archive/2008/01/16/configuring-visual-studio-to-debug-net-framework-source-code.aspx"&gt;.NET Reference Source&lt;/A&gt; project, having Visual Studio set to step all through Console.WriteLine is beyond cool. (What!? Microsoft also released the source code to things like System.Web.DLL and Windows.Forms.DLL? Why would anyone chose a complicated interface like those versus &lt;A href="http://www.craigslist.org/about/best/nyc/485967082.html"&gt;complete text nirvana&lt;/A&gt;?) &lt;/P&gt;
&lt;P&gt;For many years, I've been copying a JavaScript file off my USB key that would set _NT_SYMBOL_PATH and Visual Studio symbol paths on any machine I touched. Now that I'm installing PowerShell on everything before I do anything else, I rewrote the script in PowerShell and called it Set-SymbolServer. You can see the script at the end of this blog entry. I wrote Set-SymbolServer as a script file because I wasn't doing anything with the pipeline. In my quest for PowerShell black belt ninja status, I guess this script means I'm possibly at a pink belt level. Also, as Set-SymbolServer is one of my first scripts, it's probably not that smart in the way of PowerShell so please slam away in the comments for ways I can make it better. &lt;/P&gt;
&lt;P&gt;When running Set-SymbolServer it assumes you are setting up Visual Studio 2008. If you are still using Visual Studio 2005, use the –Vs2005 switch. The only require parameters are either –public or –internal. Those dictate if you're setting up the machine for using the Microsoft public symbol servers or an internal company symbol server respectively. With –public, the download cache will be set to C:\SYMBOLS\OSYMBOLS and the _NT_SYMBOL_PATH environment variable will be set to use both http://referencesource.microsoft.com/symbols and http://msdl.microsoft.com/download/symbols. If Visual Studio 2008 is installed, its registry keys will be set to use the two Microsoft symbol servers. Additionally, the appropriate Visual Studio 2008 registry keys will be set to use the Source Server (needed for the Reference .NET Source), and Just My Code is turned off. If you specified –Vs2005, the symbol server is set to http://msdl.microsoft.com/download/symbols and no other registry settings are set. &lt;/P&gt;
&lt;P&gt;Specifying –internal will set the _NT_SYMBOL_PATH and Visual Studio to use a cache of c:\Symbols\InternalSymbols and a symbol server of \\Symbols\Symbols. That flag will not touch any other Visual Studio settings. These same settings apply if you specify –Vs2005. &lt;/P&gt;
&lt;P&gt;If you want a different cache directory, specify it with the –CacheDirectory parameter. If you have additional symbol servers you want add, specify them as an array to the –SymbolServers parameter. If you get confused as to the options, pass -? and you'll get the usage test to remind you. &lt;/P&gt;
&lt;P&gt;There are some additional command line options to Set-SymbolServer; –WhatIf, –Confirm, and –Verbose. A totally phenomenal feature of PowerShell is seeing what a particular command or cmdlet will affect. It's been hugely instructive as a learning aid so I wanted all my scripts to support the default convention. Fortunately, Jeffrey Snover, the one man blog comment factory, &lt;A href="http://blogs.msdn.com/powershell/archive/2007/02/25/supporting-whatif-confirm-verbose-in-scripts.aspx"&gt;posted&lt;/A&gt; a great example of how to implement those key parameters in a script. I slightly modified Jeffrey's function in my script to access the script parameters directly instead of requiring them to be passed in to each call. &lt;/P&gt;
&lt;P&gt;I hope you find the script useful and please do let me know where parts could be implemented better. &lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:Courier New;"&gt;&lt;SPAN style="COLOR:green;"&gt;&lt;STRONG&gt;###############################################################################&lt;BR&gt;# Set-SymbolServer - Sets up the current user account to use a symbol server.&lt;BR&gt;#&lt;BR&gt;# Copyright (c) 2008 - John Robbins (john@wintellect.com) &lt;BR&gt;#&lt;BR&gt;# Version 1.0 - Jan 22, 2008 &lt;BR&gt;###############################################################################&lt;BR&gt;&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;param&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt; ( [&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;switch&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;] &lt;/SPAN&gt;&lt;SPAN style="COLOR:purple;"&gt;$Internal&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt; ,&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;switch&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;] &lt;/SPAN&gt;&lt;SPAN style="COLOR:purple;"&gt;$Public&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt; ,&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;switch&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;] &lt;/SPAN&gt;&lt;SPAN style="COLOR:purple;"&gt;$Vs2005&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt; ,&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;string&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;] &lt;/SPAN&gt;&lt;SPAN style="COLOR:purple;"&gt;$CacheDirectory&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt; ,&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;string&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;[]] &lt;/SPAN&gt;&lt;SPAN style="COLOR:purple;"&gt;$SymbolServers&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt; ,&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;switch&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;] &lt;/SPAN&gt;&lt;SPAN style="COLOR:purple;"&gt;$Verbose&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt; ,&amp;nbsp;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;switch&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;] &lt;/SPAN&gt;&lt;SPAN style="COLOR:purple;"&gt;$Confirm&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt; ,&amp;nbsp;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;switch&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;] &lt;/SPAN&gt;&lt;SPAN style="COLOR:purple;"&gt;$Whatif&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt; )&lt;BR&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;STRONG&gt;&lt;SPAN style="COLOR:green;"&gt;# Always make sure all variables are defined.&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:cadetblue;"&gt;Set-PSDebug&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN style="COLOR:black;"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR:cadetblue;"&gt;-Strict&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt; &lt;BR&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:green;"&gt;&lt;STRONG&gt;# The reference variable used to determine if the user pressed Y/A.&lt;BR&gt;&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:purple;"&gt;$script:AllAnswer&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;&lt;STRONG&gt;=&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR:purple;"&gt;$null&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;&lt;BR&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;function&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;Usage&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt; &lt;BR&gt;{&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:maroon;"&gt;&lt;FONT color=#000000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;&lt;STRONG&gt;""&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:maroon;"&gt;&lt;FONT color=#000000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;&lt;STRONG&gt;"Usage: Set-SymbolServer [-Internal] [-Public] [-Vs2005]"&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:maroon;"&gt;&lt;FONT color=#000000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;&lt;STRONG&gt;" [[-CacheDirectory] &amp;lt;string&amp;gt;]"&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;&amp;nbsp;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:maroon;"&gt;&lt;FONT color=#000000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;&lt;STRONG&gt;" [[-SymbolServers] &amp;lt;string array&amp;gt;]"&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;&amp;nbsp;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:maroon;"&gt;&lt;FONT color=#000000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;&lt;STRONG&gt;" [-Verbose] [-Confirm] [-WhatIf]"&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:maroon;"&gt;&lt;FONT color=#000000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;&lt;STRONG&gt;""&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:maroon;"&gt;&lt;FONT color=#000000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;&lt;STRONG&gt;"Parameters:"&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:maroon;"&gt;&lt;FONT color=#000000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;&lt;STRONG&gt;" -Internal&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : Set up for using an internal symbol server"&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:maroon;"&gt;&lt;FONT color=#000000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;&lt;STRONG&gt;"&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (&lt;A&gt;file://symbols/symbols&lt;/A&gt;)"&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:maroon;"&gt;&lt;FONT color=#000000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;&lt;STRONG&gt;" -Public&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : Use the public Microsoft symbol servers."&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:maroon;"&gt;&lt;FONT color=#000000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;&lt;STRONG&gt;" -Vs2005&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : Set the symbol server settings for Visual Studio 2005"&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:maroon;"&gt;&lt;FONT color=#000000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;&lt;STRONG&gt;"&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; instead of the default Visual Studio 2008."&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:maroon;"&gt;&lt;FONT color=#000000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;&lt;STRONG&gt;" -CacheDirectory : Use the specified download cache directory instead of the"&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:maroon;"&gt;&lt;STRONG&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; "&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; default (internal: c:\symbols\internalsymbols,"&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:maroon;"&gt;&lt;STRONG&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; "&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public: c:\symbols\ossymbols)."&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:maroon;"&gt;&lt;FONT color=#000000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;&lt;STRONG&gt;" -SymbolServers&amp;nbsp; :&amp;nbsp;Additional symbol servers to add to the defaults."&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:maroon;"&gt;&lt;STRONG&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; " -?&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : Display this usage information"&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:maroon;"&gt;&lt;FONT color=#000000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;&lt;STRONG&gt;""&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:maroon;"&gt;&lt;FONT color=#000000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;&lt;STRONG&gt;" Note that either -Public or -Internal must be specified"&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:maroon;"&gt;&lt;FONT color=#000000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;&lt;STRONG&gt;""&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;&lt;FONT color=#000000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;exit&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;&lt;BR&gt;}&lt;BR&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:green;"&gt;&lt;STRONG&gt;# A modified version of Jeffrey Snover's Should-Process script.&lt;BR&gt;# &lt;A href="http://blogs.msdn.com/powershell/archive/2007/02/25/supporting-whatif-confirm-verbose-in-scripts.aspx"&gt;http://blogs.msdn.com/powershell/archive/2007/02/25/supporting-whatif-confirm-verbose-in-scripts.aspx&lt;/A&gt;&lt;BR&gt;&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;function&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR:cadetblue;"&gt;&lt;STRONG&gt;Should-Process&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt; ( &lt;/SPAN&gt;&lt;SPAN style="COLOR:purple;"&gt;$Operation&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt; ,&amp;nbsp;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:purple;"&gt;&lt;FONT color=#000000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;$Target&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt; ,&lt;BR&gt;&lt;SPAN style="COLOR:purple;"&gt;&lt;FONT color=#000000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;&lt;/SPAN&gt;[&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;REF&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;]&lt;/SPAN&gt;&lt;SPAN style="COLOR:purple;"&gt;$AllAnswer&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt; ,&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:purple;"&gt;&lt;SPAN style="COLOR:purple;"&gt;&lt;FONT color=#000000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;&lt;/SPAN&gt;$Warning&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;&lt;STRONG&gt;=&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR:maroon;"&gt;&lt;STRONG&gt;""&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt; )&lt;BR&gt;{&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt; (&lt;/SPAN&gt;&lt;SPAN style="COLOR:purple;"&gt;$AllAnswer&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;.&lt;/SPAN&gt;&lt;SPAN style="COLOR:saddlebrown;"&gt;&lt;STRONG&gt;Value&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;-eq&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;$FALSE&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;)&lt;BR&gt;&lt;SPAN style="COLOR:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;{&amp;nbsp;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;&lt;SPAN style="COLOR:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;return&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;$FALSE&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;&lt;BR&gt;&lt;SPAN style="COLOR:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;}&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;&lt;SPAN style="COLOR:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;elseif&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt; (&lt;/SPAN&gt;&lt;SPAN style="COLOR:purple;"&gt;$AllAnswer&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;.&lt;/SPAN&gt;&lt;SPAN style="COLOR:saddlebrown;"&gt;&lt;STRONG&gt;Value&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;-eq&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;$TRUE&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;)&lt;BR&gt;&lt;SPAN style="COLOR:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;{&amp;nbsp;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;&lt;SPAN style="COLOR:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;return&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;$TRUE&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;&lt;BR&gt;&lt;SPAN style="COLOR:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;}&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;&lt;SPAN style="COLOR:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;if&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt; (&lt;/SPAN&gt;&lt;SPAN style="COLOR:purple;"&gt;$Whatif&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;)&lt;BR&gt;&lt;SPAN style="COLOR:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;{&amp;nbsp;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:cadetblue;"&gt;&lt;SPAN style="COLOR:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;STRONG&gt;Write-Host&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR:maroon;"&gt;&lt;STRONG&gt;"What if: Performing operation `"&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:purple;"&gt;$Operation&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;`&lt;/SPAN&gt;&lt;SPAN style="COLOR:maroon;"&gt;&lt;STRONG&gt;" on Target `"&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:purple;"&gt;$Target&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;`&lt;/SPAN&gt;&lt;SPAN style="COLOR:maroon;"&gt;&lt;STRONG&gt;""&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;&lt;SPAN style="COLOR:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;return&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;$FALSE&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;&lt;BR&gt;&lt;SPAN style="COLOR:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;}&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;&lt;SPAN style="COLOR:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;if&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt; (&lt;/SPAN&gt;&lt;SPAN style="COLOR:purple;"&gt;$Confirm&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;)&lt;BR&gt;&lt;SPAN style="COLOR:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;{&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:purple;"&gt;&lt;SPAN style="COLOR:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;$ConfirmText&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;&lt;STRONG&gt;=&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;@"&lt;/SPAN&gt;&lt;SPAN style="COLOR:maroon;"&gt;&lt;STRONG&gt;&lt;BR&gt;Confirm Are you sure you want to perform this action?&lt;BR&gt;Performing operation "$Operation" on Target "$Target". $Warning&lt;BR&gt;&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;"@&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:cadetblue;"&gt;&lt;SPAN style="COLOR:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;STRONG&gt;Write-Host&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR:purple;"&gt;$ConfirmText&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;&lt;SPAN style="COLOR:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;while&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt; (&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;$TRUE&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;)&lt;BR&gt;&lt;SPAN style="COLOR:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;{&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:purple;"&gt;&lt;SPAN style="COLOR:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;$answer&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;&lt;STRONG&gt;=&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR:cadetblue;"&gt;&lt;STRONG&gt;Read-Host&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;@"&lt;/SPAN&gt;&lt;SPAN style="COLOR:maroon;"&gt;&lt;STRONG&gt;&lt;BR&gt;[Y] Yes [A] Yes to All [N] No [L] No to all [S] Suspend [?] Help (default is "Y")&lt;BR&gt;&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;"@&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;&lt;SPAN style="COLOR:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;switch&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt; (&lt;/SPAN&gt;&lt;SPAN style="COLOR:purple;"&gt;$Answer&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;)&lt;BR&gt;&lt;SPAN style="COLOR:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;{&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:maroon;"&gt;&lt;SPAN style="COLOR:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;STRONG&gt;"Y"&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt; { &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;return&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;$TRUE&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;}&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:maroon;"&gt;&lt;SPAN style="COLOR:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;STRONG&gt;""&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt; { &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;return&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;$TRUE&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;}&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:maroon;"&gt;&lt;SPAN style="COLOR:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;STRONG&gt;"A"&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt; { &lt;/SPAN&gt;&lt;SPAN style="COLOR:purple;"&gt;$AllAnswer&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;.&lt;/SPAN&gt;&lt;SPAN style="COLOR:saddlebrown;"&gt;&lt;STRONG&gt;Value&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;&lt;STRONG&gt;=&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;$TRUE;&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;return&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;$TRUE&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt; }&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:maroon;"&gt;&lt;SPAN style="COLOR:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;STRONG&gt;"N"&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt; { &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;ret