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

<channel>
	<title>TechProsaic &#187; Tutorials</title>
	<atom:link href="http://halr9000.com/article/category/tutorials/feed" rel="self" type="application/rss+xml" />
	<link>http://halr9000.com</link>
	<description>(powershell &#38; other stuff)</description>
	<lastBuildDate>Wed, 02 May 2012 20:13:09 +0000</lastBuildDate>
	<language>en-us</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>Security Authorization in vSphere</title>
		<link>http://halr9000.com/article/894</link>
		<comments>http://halr9000.com/article/894#comments</comments>
		<pubDate>Thu, 24 Jun 2010 02:14:18 +0000</pubDate>
		<dc:creator>halr9000</dc:creator>
				<category><![CDATA[Powershell]]></category>
		<category><![CDATA[Screencast]]></category>
		<category><![CDATA[VMware]]></category>
		<category><![CDATA[powercli]]></category>
		<category><![CDATA[security]]></category>
		<category><![CDATA[train signal]]></category>
		<category><![CDATA[vsphere]]></category>

		<guid isPermaLink="false">http://halr9000.com/article/894</guid>
		<description><![CDATA[I thought I’d share another slide with you tonight. This is also from my upcoming Train Signal vSphere Pro video. Before tackling a set of PowerCLI cmdlets, I like to give you a good base understanding of the concepts.]]></description>
			<content:encoded><![CDATA[<a href="http://halr9000.com/article/category/programming/scripting/powershell" title="Powershell"><img src="/wp-content/icons/topic_powershell.png" align="right" width="70" height="53" alt="Powershell" /></a>
<!-- no icon for 'Screencast' --><!-- no icon for 'VMware' --><p>I thought I’d share another slide with you tonight. This is also from my upcoming <a href="http://trainsignal.com">Train Signal</a> vSphere Pro video. Before tackling a set of <a href="http://vmware.com/go/powercli">PowerCLI</a> cmdlets, I like to give you a good base understanding of the concepts.</p>
<p><a href="http://halr9000.com/wp-content/uploads/2010/06/image1.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://halr9000.com/wp-content/uploads/2010/06/image_thumb1.png" width="644" height="484" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://halr9000.com/article/894/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The Get-Stat cmdlet is a bit hard to work with</title>
		<link>http://halr9000.com/article/890</link>
		<comments>http://halr9000.com/article/890#comments</comments>
		<pubDate>Sat, 19 Jun 2010 19:32:53 +0000</pubDate>
		<dc:creator>halr9000</dc:creator>
				<category><![CDATA[Powershell]]></category>
		<category><![CDATA[Screencast]]></category>
		<category><![CDATA[VMware]]></category>

		<guid isPermaLink="false">http://halr9000.com/article/890</guid>
		<description><![CDATA[As evidenced by the slide I’m working on at the moment for the upcoming TrainSignal vSphere Pro Series lesson titled “Performance with PowerCLI”. I really wanted to use stars for the difficulty level and make them vibrate like they do in the game, but I was spending too much time on this slide as it [...]]]></description>
			<content:encoded><![CDATA[<a href="http://halr9000.com/article/category/programming/scripting/powershell" title="Powershell"><img src="/wp-content/icons/topic_powershell.png" align="right" width="70" height="53" alt="Powershell" /></a>
<!-- no icon for 'Screencast' --><!-- no icon for 'VMware' --><p>As evidenced by the slide I’m working on at the moment for the upcoming <a href="http://www.trainsignal.com/VMware-vSphere-Pro-Series-Training-Vol-1-P91.aspx">TrainSignal vSphere Pro Series</a> lesson titled “Performance with PowerCLI”.</p>
<p>I really wanted to use stars for the difficulty level and make them vibrate like they do in the game, but I was spending too much time on this slide as it was. <img src='http://halr9000.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><a href="http://halr9000.com/wp-content/uploads/2010/06/image.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://halr9000.com/wp-content/uploads/2010/06/image_thumb.png" width="644" height="484" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://halr9000.com/article/890/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Random Letters</title>
		<link>http://halr9000.com/article/859</link>
		<comments>http://halr9000.com/article/859#comments</comments>
		<pubDate>Sun, 24 Jan 2010 05:47:42 +0000</pubDate>
		<dc:creator>halr9000</dc:creator>
				<category><![CDATA[Powershell]]></category>
		<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[Basics]]></category>
		<category><![CDATA[Get-Random]]></category>

		<guid isPermaLink="false">http://halr9000.com/article/859</guid>
		<description><![CDATA[I needed some source text to test a regular expression pattern, so my goal tonight was to generate some. The regex pattern in question finds email addresses, so I needed to be sure to embed real-looking email addresses inside of gibberish. Step number one: I need some random letters. PowerShell v2’s Get-Random cmdlet comes to [...]]]></description>
			<content:encoded><![CDATA[<a href="http://halr9000.com/article/category/programming/scripting/powershell" title="Powershell"><img src="/wp-content/icons/topic_powershell.png" align="right" width="70" height="53" alt="Powershell" /></a>
<!-- no icon for 'Tutorials' --><p>I needed some source text to test a regular expression pattern, so my goal tonight was to generate some. The regex pattern in question finds email addresses, so I needed to be sure to embed real-looking email addresses inside of gibberish. Step number one: I need some random letters. PowerShell v2’s Get-Random cmdlet comes to the rescue!</p>
<p>Get-Random has two modes. The first mode allows you to return random numbers, and you can specify a min and max range. The second mode will return random items from a list, and as an added bonus, you can specify the number of items to return. I plan on using both modes in this exercise.</p>
<p>In order to build gibberish words or email addresses, I need to start with a list of allowable characters. Let’s keep it simple and restrict things to lowercase letters, although adding in numbers would be simple.</p>
<p>You all remember ASCII, right? This is a conversion table that has been used to represent numeric values for letters (and every other character on you keyboard, plus others) for a long, LONG time. You are slowly seeing ASCII encoding supplanted by Unicode as that table has a much larger address space and can handle non-Latin alphabets, but ASCII suits me just fine. We are going to use ASCII values and PowerShell’s range operator (..) to generate the list of allowable characters.</p>
<p>If you have worked with Vbscript, then you might know how to to ASCII conversions with the Chr() function. You give that function a number, and it spits out the ASCII value. The reverse is done with the Asc() function. In PowerShell, it’s not done the same way at all, so just forget that. Instead, what we are going to do is to convert back and forth between a “char” (character) .NET type. Chars are really sort of an in-between data type. They look like strings (i.e., it’s a letter), but they are very easily converted into integers.</p>
<p>So let’s take that knowledge and combine it with a technique called “casting”. To cast in PowerShell means to state that you want a particular value to be a certain data type. For example, if I have a number, and I want to make sure it is treated like a string in my script, I can cast it as a string like so:</p>
<div id="codeSnippetWrapper">
<pre id="codeSnippet" style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;">[string]12</pre>
</div>
<p>If you pipe that to Get-Member, you’ll see that the result is a string object, with all of the properties and methods which that type has, as opposed to the much more basic [int] type.</p>
<p>Moving on, let’s take the letter “a”, and the letter “z”, and turn it into a range containing all of the letters in between. PowerShell’s range operator can be used here, but it only works with integers. I could ask a search engine for an ASCII chart to get the numbers I need, but there’s no need, I’ll just convert from the letters directly.</p>
<p>Here’s how to convert a single letter into its ASCII number representation:</p>
<div id="codeSnippetWrapper">
<pre id="codeSnippet" style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;">PS &gt; [int][char]<span style="color: #006080">'a'</span></pre>
<pre id="codeSnippet" style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;">97</pre>
</div>
<p>What I am doing here is casting twice. Anything surrounded by single or double quotes is a string. I can convert any single letter (or symbol, or whatever) to a char data type by casting it as you can see. Then I take that char and cast it immediately to an integer, and as I said before, that’s an easy conversion for PowerShell to do because that’s the way chars types are wired.</p>
<p>Now we have our first integer. Just replace the ‘a’ with a ‘z’ and we have the second.</p>
<div id="codeSnippetWrapper">
<pre id="codeSnippet" style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;">PS &gt; [int][char]<span style="color: #006080">'z'</span></pre>
<pre id="codeSnippet" style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;">122</pre>
</div>
<p>These integers are going to be perfect as input to the Get-Random cmdlet. Here’s how to return random letters using Get-Random’s first mode:</p>
<div id="codeSnippetWrapper">
<pre id="codeSnippet" style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;">PS &gt; $min = [int][char]<span style="color: #006080">'a'</span></pre>
<pre id="codeSnippet" style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;">PS &gt; $max = [int][char]<span style="color: #006080">'z'</span></pre>
<pre id="codeSnippet" style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;">PS &gt; Get-Random -Minimum $min -Maximum $max</pre>
<pre id="codeSnippet" style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;">104</pre>
<pre id="codeSnippet" style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;">PS &gt; [char](Get-Random -Minimum $min -Maximum $max)</pre>
<pre id="codeSnippet" style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;">l</pre>
<pre id="codeSnippet" style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;">PS &gt; [char](Get-Random -Minimum $min -Maximum $max)</pre>
<pre id="codeSnippet" style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;">q</pre>
<pre id="codeSnippet" style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;">PS &gt; [char](Get-Random -Minimum $min -Maximum $max)</pre>
<pre id="codeSnippet" style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;">r</pre>
</div>
<p>As you can see, turning an integer back into a letter is pretty simple, you just cast it to a [char]. (The parentheses are necessary.) And you can also see a new random letter popping up at each execution of Get-Random. Great! So how do we make random words? Well, in the context of this blog post, a word consists of an array of characters. That makes sense, right? There are a few ways to go from here to create the requisite [char] array. I could create a for loop, and run the above command inside the loop.</p>
<p>However, there is an easier way. Let’s go back a step and have a look at Get-Random’s second mode. Here is a table showing the two parameter sets (output created with <a href="http://halr9000.com/article/507">my Get-Parameter script</a>):</p>
<pre class="csharpcode">   ParameterSet: RandomNumberParameterSet

Name    Type       IsMandatory Pipeline
----    ----       ----------- --------
SetSeed Nullable`1       False    False
Maximum Object           False    False
Minimum Object           False    False

   ParameterSet: RandomListItemParameterSet

Name        Type       IsMandatory Pipeline
----        ----       ----------- --------
SetSeed     Nullable`1       False    False
InputObject Object[]          True     True
Count       Int32            False    False</pre>
<p><!--.csharpcode, .csharpcode pre { 	font-size: small; 	color: black; 	font-family: consolas, "Courier New", courier, monospace; 	background-color: #ffffff; 	/*white-space: pre;*/ } .csharpcode pre { margin: 0em; } .csharpcode .rem { color: #008000; } .csharpcode .kwrd { color: #0000ff; } .csharpcode .str { color: #006080; } .csharpcode .op { color: #0000c0; } .csharpcode .preproc { color: #cc6633; } .csharpcode .asp { background-color: #ffff00; } .csharpcode .html { color: #800000; } .csharpcode .attr { color: #ff0000; } .csharpcode .alt  { 	background-color: #f4f4f4; 	width: 100%; 	margin: 0em; } .csharpcode .lnum { color: #606060; } --></p>
<p>We used Minimum and Maximum in the first mode. Now we are going to use InputObject and Count. This mode is really handy because you can supply an array of items (letters in this case) as input, and tell it how many random items to return as output! That means no loop, so the code is going to be much simpler.</p>
<p>First, let’s build an array of all lowercase letters. We already know the numeric values to use in the range, so let’s use those. I’m going to use a little trick to take the integer range and cast it in one step to an array of characters, which is exactly what we want:</p>
<div id="codeSnippetWrapper">
<pre id="codeSnippet" style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;">PS &gt; $alpha = [char[]]($min..$max)</pre>
<pre id="codeSnippet" style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;">PS &gt; $alpha | Select-Object -First 3</pre>
<pre id="codeSnippet" style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;">a</pre>
<pre id="codeSnippet" style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;">b</pre>
<pre id="codeSnippet" style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;">c</pre>
</div>
<p>We build the range with “$min..$max” and put that in parentheses. Then we cast it, but not as a single [char], but as an array of [char]’s by adding an empty set of brackets []. Now, the variable $alpha contains our input to Get-Random. The next step is easy, just pass this variable to the cmdlet and give it a count:</p>
<div id="codeSnippetWrapper">
<pre id="codeSnippet" style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;">PS &gt; $alpha | Get-Random -Count 5</pre>
<pre id="codeSnippet" style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;">t</pre>
<pre id="codeSnippet" style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;">f</pre>
<pre id="codeSnippet" style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;">a</pre>
<pre id="codeSnippet" style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;">b</pre>
<pre id="codeSnippet" style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;">c</pre>
</div>
<p>Presto! A five-letter word! Well…sorta. What we have is a series of characters, one per line. To turn this into adjacent characters we can cast the whole thing as a string.</p>
<div id="codeSnippetWrapper">
<pre id="codeSnippet" style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;">PS &gt; [string]( $alpha | Get-Random -Count 5 )</pre>
<pre id="codeSnippet" style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;">i h s p z</pre>
</div>
<p>Almost there, we just have to get rid of those extra spaces. The spaces are generated because of something called the “output format separator”, otherwise known as $OFS. This is a variable predefined by PowerShell to be a single space, but you can change it to whatever you want. Here’s that final step:</p>
<div id="codeSnippetWrapper">
<pre id="codeSnippet" style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;">PS &gt; $ofs = <span style="color: #006080">''</span></pre>
<pre id="codeSnippet" style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;">PS &gt; [string]( $alpha | Get-Random -Count 5 )</pre>
<pre id="codeSnippet" style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;">qfzwg</pre>
<pre id="codeSnippet" style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;">PS &gt; [string]( $alpha | Get-Random -Count 5 )</pre>
<pre id="codeSnippet" style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;">dnhbq</pre>
</div>
<p>Now I am just a hop, skip, and a jump from generating random email addresses, but that’s enough for tonight.</p>
]]></content:encoded>
			<wfw:commentRss>http://halr9000.com/article/859/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Southeast Management User Group Nov 14th meeting schedule and registration link</title>
		<link>http://halr9000.com/article/631</link>
		<comments>http://halr9000.com/article/631#comments</comments>
		<pubDate>Wed, 22 Oct 2008 15:55:42 +0000</pubDate>
		<dc:creator>halr9000</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Powershell]]></category>
		<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[VMware]]></category>

		<guid isPermaLink="false">http://halr9000.com/article/631</guid>
		<description><![CDATA[From the SMUG blog: The Southeast Management User Group invites you to attend the next SMUG meeting scheduled for November 14th, 2008 for a day of great presentations, discussions, and networking, at the Alpharetta Microsoft Campus. REGISTRATION LINK http://msevents.microsoft.com/CUI/InviteOnly.aspx?EventID=5B-11-D1-1D-08-92-D8-84-78-E1-CD-6A-5C-13-92-AA&#38;Culture=en-US DATE &#38; TIME November 14th, 2008 9:00 AM – 4:00 PM I’ll be there with bells [...]]]></description>
			<content:encoded><![CDATA[<!-- no icon for 'General' --><a href="http://halr9000.com/article/category/programming/scripting/powershell" title="Powershell"><img src="/wp-content/icons/topic_powershell.png" align="right" width="70" height="53" alt="Powershell" /></a>
<!-- no icon for 'Tutorials' --><!-- no icon for 'VMware' --><p>From the <a href="http://www.systemcenterusergroup.org/blogs/smug/default.aspx">SMUG</a> blog:</p>
<blockquote><p>The Southeast Management User Group invites you to attend the next SMUG meeting scheduled for November 14<sup>th</sup>, 2008 for a day of great presentations, discussions, and networking, at the <a href="http://maps.google.com/maps?hl=en&amp;safe=on&amp;um=1&amp;ie=UTF-8&amp;q=1125+Sanctuary+Pky+Alpharetta,+GA+30004&amp;fb=1&amp;geocode=6344390989878328255,34.047385,-84.311524&amp;oi=manybox&amp;ct=14&amp;cd=1&amp;resnum=1">Alpharetta Microsoft Campus.</a></p>
<h4>REGISTRATION LINK</h4>
<p><a href="http://msevents.microsoft.com/CUI/InviteOnly.aspx?EventID=5B-11-D1-1D-08-92-D8-84-78-E1-CD-6A-5C-13-92-AA&amp;Culture=en-US">http://msevents.microsoft.com/CUI/InviteOnly.aspx?EventID=5B-11-D1-1D-08-92-D8-84-78-E1-CD-6A-5C-13-92-AA&amp;Culture=en-US</a></p>
<h4>DATE &amp; TIME</h4>
<p>November 14<sup>th</sup>, 2008      <br />9:00 AM – 4:00 PM</p>
</blockquote>
<p>I’ll be there with bells on.&#160; Or something.</p>
]]></content:encoded>
			<wfw:commentRss>http://halr9000.com/article/631/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Solving Problems with PowerShell: Parsing Text for IP Addresses</title>
		<link>http://halr9000.com/article/526</link>
		<comments>http://halr9000.com/article/526#comments</comments>
		<pubDate>Fri, 18 Jul 2008 16:18:21 +0000</pubDate>
		<dc:creator>halr9000</dc:creator>
				<category><![CDATA[Powershell]]></category>
		<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[Series]]></category>
		<category><![CDATA[Solving Problems]]></category>

		<guid isPermaLink="false">http://halr9000.com/article/526</guid>
		<description><![CDATA[(This post is the second in my Solving Problems with PowerShell series.) Problem: Extract list of IP addresses and ping them So I had a bunch of text in a webpage form which looked like this: [172.16.16.139] (2.0.39) [172.16.16.31] (2.0.40) [172.16.16.189] (2.0.40) [172.16.16.156] (2.0.45) [172.16.15.89] (2.0.46) [172.16.16.81] (2.0.46) [172.16.16.73] (2.0.47) [172.16.16.31] (2.0.48) [172.16.15.106] (2.0.49) [172.16.16.238] [...]]]></description>
			<content:encoded><![CDATA[<a href="http://halr9000.com/article/category/programming/scripting/powershell" title="Powershell"><img src="/wp-content/icons/topic_powershell.png" align="right" width="70" height="53" alt="Powershell" /></a>
<!-- no icon for 'Tutorials' --><p>(This post is the second in my <a href="http://halr9000.com/article/tag/solving-problems">Solving Problems with PowerShell series</a>.)</p>
<h3>Problem: Extract list of IP addresses and ping them</h3>
<p>So I had a bunch of text in a webpage form which looked like this:</p>
<div>
<pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; font-size: 8pt; width: 100%; color: black; line-height: 12pt; font-family: consolas,'Courier New',courier,monospace; background-color: #f4f4f4;">[172.16.16.139] (2.0.39)
[172.16.16.31] (2.0.40)
[172.16.16.189] (2.0.40)
[172.16.16.156] (2.0.45)
[172.16.15.89] (2.0.46)
[172.16.16.81] (2.0.46)
[172.16.16.73] (2.0.47)
[172.16.16.31] (2.0.48)
[172.16.15.106] (2.0.49)
[172.16.16.238] (2.0.49)
[172.16.15.14] (2.0.54)
[172.16.15.79] (2.0.54)</pre>
</div>
<p>My goal was to ping each host to see if they were alive.  Here’s how I went about that process.</p>
<h3>Step One – Get the data into PowerShell</h3>
<p>After copying the above into the clipboard, I used PowerShell’s “here-string” feature to quickly get the list into a variable.  I just typed this into a console window:</p>
<div>
<pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; font-size: 8pt; width: 100%; color: black; line-height: 12pt; font-family: consolas,'Courier New',courier,monospace; background-color: #f4f4f4;">$a = @"</pre>
</div>
<p>Then I hit enter, then ctrl-V, followed by another enter (so that its on a line by itself) and this:</p>
<div>
<pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; font-size: 8pt; width: 100%; color: black; line-height: 12pt; font-family: consolas,'Courier New',courier,monospace; background-color: #f4f4f4;">"@</pre>
</div>
<p>Now, $a contains the string I want to match against.</p>
<h3>Step Two – Parse the text</h3>
<p>This one was easier than you may think because I had done some prep some months ago for just such an occasion.  There’s this really cool tool <a title="Expresso Regular Expression Development Tool" href="http://www.ultrapico.com/Expresso.htm">Expresso</a> (website appears down, uh oh!  google <a title="Rad Software Regular Expression Designer is a free download that helps programmers learn, develop and test Regular Expressions. It is an interactive Windows application that is designed to be simple and easy to use." href="http://www.radsoftware.com.au/regexdesigner/">similar results</a> to the rescue!) which helps you to graphically create a regular expression which can then be used to for parsing text.  That tool came with a library of commonly used regular expressions, one of which was made to match IP addresses.  To save time for when I might need to use it, I have this in my profile which loads when <a title="Microsoft Windows PowerShell command line shell and scripting language" href="http://www.microsoft.com/windowsserver2003/technologies/management/powershell/default.mspx" target="_blank">PowerShell</a> is started:</p>
<div style="border: 1px solid gray; margin: 20px 0px 10px; padding: 4px; overflow: auto; font-size: 8pt; width: 97.5%; cursor: text; max-height: 200px; line-height: 12pt; font-family: consolas,'Courier New',courier,monospace; background-color: #f4f4f4;">
<pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; font-size: 8pt; width: 100%; color: black; line-height: 12pt; font-family: consolas,'Courier New',courier,monospace; background-color: #f4f4f4;">New-Variable -Name RegexIP -Force `
    -Description <span style="color: #006080;">"A regular expression object which matches and validates IP addresses."</span> `
    -Value ([regex]<span style="color: #006080;">'(?&lt;First&gt;2[0-4]\d|25[0-5]|[01]?\d\d?)\.(?&lt;Second&gt;2[0-4]\d|25[0-5]|[01]?\d\d?)\.(?&lt;Third&gt;2[0-4]\d|25[0-5]|[01]?\d\d?)\.(?&lt;Fourth&gt;2[0-4]\d|25[0-5]|[01]?\d\d?)'</span>)</pre>
</div>
<p>With that in hand, here’s how I parsed the text which was now in the $a variable:</p>
<div>
<pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; font-size: 8pt; width: 100%; color: black; line-height: 12pt; font-family: consolas,'Courier New',courier,monospace; background-color: #f4f4f4;">97<span style="color: #008000;"># $regexip.Matches($a) | select value</span>

Value
-----
172.16.16.139
172.16.16.170
172.16.16.31
172.16.16.189
172.16.16.57
172.16.16.156
172.16.15.89
172.16.16.81
172.16.16.73
172.16.16.31
172.16.16.80
172.16.15.106
172.16.16.238
172.16.15.14
172.16.15.79</pre>
</div>
<h3></h3>
<h3>Step Three – Ping the male progeny of female dogs!</h3>
<p>And lastly, pipe the mess to the Ping-Computer cmdlet which is available from SAPIEN’s <a href="http://www.primalscript.com/Free_Tools/index.asp">PowerShell Extensions (PshX-SAPIEN)</a>.</p>
<div style="border: 1px solid gray; margin: 20px 0px 10px; padding: 4px; overflow: auto; font-size: 8pt; width: 97.5%; cursor: text; max-height: 200px; line-height: 12pt; font-family: consolas,'Courier New',courier,monospace; background-color: #f4f4f4;">
<pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; font-size: 8pt; width: 100%; color: black; line-height: 12pt; font-family: consolas,'Courier New',courier,monospace; background-color: #f4f4f4;">PS &gt; $regexip.Matches($a) | select -ExpandProperty value | Ping-Computer

ComputerName                        StatusCode           ResponseTime ProtocolAddress
------------                        ----------           ------------ ---------------
172.16.16.139                                0                      0 172.16.16.139
172.16.16.170                                0                      0 172.16.16.170
172.16.16.31                                 0                      0 172.16.16.31
172.16.16.189                                0                      0 172.16.16.189
172.16.16.57                                 0                      1 172.16.16.57
172.16.16.156                                0                      0 172.16.16.156
172.16.15.89                                 0                      0 172.16.15.89
172.16.16.81                                 0                      0 172.16.16.81
172.16.16.73                                 0                      0 172.16.16.73
172.16.16.31                                 0                      0 172.16.16.31
172.16.16.80                                 0                      0 172.16.16.80
172.16.15.106                                0                      0 172.16.15.106
172.16.16.238                                0                      0 172.16.16.238
172.16.15.14                                 0                      0 172.16.15.14
172.16.15.79                                 0                      0 172.16.15.79</pre>
</div>
<p>Instead of using Select-Object –ExpandProperty, I could have used the Foreach-Object cmdlet in a loop like this:</p>
<div>
<pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; font-size: 8pt; width: 100%; color: black; line-height: 12pt; font-family: consolas,'Courier New',courier,monospace; background-color: #f4f4f4;">PS &gt; $regexip.Matches($a) | % { Ping-Computer $_.Value }</pre>
</div>
<p>Same end result, but I have been using select –exp a lot lately and have gotten used to that technique.  To each his own.</p>
<p>So that’s it!  I hope this walkthrough helps you out with a problem that you need to solve.</p>
]]></content:encoded>
			<wfw:commentRss>http://halr9000.com/article/526/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Powershell Screencast: Use Launchy to launch a Powershell Command&#8211;FAST!</title>
		<link>http://halr9000.com/article/511</link>
		<comments>http://halr9000.com/article/511#comments</comments>
		<pubDate>Thu, 10 Jul 2008 21:00:29 +0000</pubDate>
		<dc:creator>halr9000</dc:creator>
				<category><![CDATA[Powershell]]></category>
		<category><![CDATA[Screencast]]></category>
		<category><![CDATA[Series]]></category>
		<category><![CDATA[powershell screencast launchy productivity tips]]></category>

		<guid isPermaLink="false">http://halr9000.com/article/511</guid>
		<description><![CDATA[This is a screencast to show you how to use the excellent program launcher Launchy, to quickly execute PowerShell commands.]]></description>
			<content:encoded><![CDATA[<a href="http://halr9000.com/article/category/programming/scripting/powershell" title="Powershell"><img src="/wp-content/icons/topic_powershell.png" align="right" width="70" height="53" alt="Powershell" /></a>
<!-- no icon for 'Screencast' --><!-- no icon for 'Series' --><p>This is a screencast to show you how to use the excellent program launcher<br />
<a href="http://launchy.net">Launchy</a>, to quickly execute PowerShell commands.</p>
<p>
<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="607" height="436"><param name="movie" value="http://content.screencast.com/bootstrap.swf"></param><param name="quality" value="high"></param><param name="bgcolor" value="#FFFFFF"></param><param name="flashVars" value="thumb=http://content.screencast.com/media/89bdba87-bd7d-4135-bc73-de1b593e104a_c24a5a01-a708-48f7-bde5-d1e8a33de7bd_static_0_0_Thumbnail.gif&#038;content=http://content.screencast.com/media/f1f0ffc7-f811-4948-a532-606c9f703928_c24a5a01-a708-48f7-bde5-d1e8a33de7bd_static_0_0_2008-07-10_1049.swf&#038;width=607&#038;height=436"></param><param name="allowFullScreen" value="true"></param><param name="scale" value="showall"></param><param name="allowScriptAccess" value="always"></param>  <embed src="http://content.screencast.com/bootstrap.swf" quality="high" bgcolor="#FFFFFF" width="607" height="436" type="application/x-shockwave-flash" allowScriptAccess="always" flashVars="thumb=http://content.screencast.com/media/89bdba87-bd7d-4135-bc73-de1b593e104a_c24a5a01-a708-48f7-bde5-d1e8a33de7bd_static_0_0_Thumbnail.gif&#038;content=http://content.screencast.com/media/f1f0ffc7-f811-4948-a532-606c9f703928_c24a5a01-a708-48f7-bde5-d1e8a33de7bd_static_0_0_2008-07-10_1049.swf&#038;width=607&#038;height=436" allowFullScreen="true" scale="showall"></embed></object></p>
]]></content:encoded>
			<wfw:commentRss>http://halr9000.com/article/511/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Follow up on PowerShell Portable &#8211; video demo</title>
		<link>http://halr9000.com/article/501</link>
		<comments>http://halr9000.com/article/501#comments</comments>
		<pubDate>Wed, 18 Jun 2008 12:25:38 +0000</pubDate>
		<dc:creator>halr9000</dc:creator>
				<category><![CDATA[Powershell]]></category>
		<category><![CDATA[Screencast]]></category>

		<guid isPermaLink="false">http://halr9000.com/article/501</guid>
		<description><![CDATA[Karl says he&#8217;ll be blogging the steps required today sometime (it might be up by the time you see this). Portable PowerShell from karl prosser on Vimeo.]]></description>
			<content:encoded><![CDATA[<a href="http://halr9000.com/article/category/programming/scripting/powershell" title="Powershell"><img src="/wp-content/icons/topic_powershell.png" align="right" width="70" height="53" alt="Powershell" /></a>
<!-- no icon for 'Screencast' --><p><a href="http://karlprosser.com/coder">Karl </a>says he&#8217;ll be blogging the steps required today sometime (it might be up by the time you see this).</p>
<p><object width="400" height="302"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="movie" value="http://www.vimeo.com/moogaloop.swf?clip_id=1185791&amp;server=www.vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1" /><embed src="http://www.vimeo.com/moogaloop.swf?clip_id=1185791&amp;server=www.vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="400" height="302"></embed></object><br /><a href="http://www.vimeo.com/1185791?pg=embed&#038;sec=1185791">Portable PowerShell</a> from <a href="http://www.vimeo.com/klumsy?pg=embed&#038;sec=1185791">karl prosser</a> on <a href="http://vimeo.com?pg=embed&#038;sec=1185791">Vimeo</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://halr9000.com/article/501/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PowerShell Screencast: BGShell Features at a Glance</title>
		<link>http://halr9000.com/article/500</link>
		<comments>http://halr9000.com/article/500#comments</comments>
		<pubDate>Tue, 17 Jun 2008 16:32:18 +0000</pubDate>
		<dc:creator>halr9000</dc:creator>
				<category><![CDATA[Powershell]]></category>
		<category><![CDATA[Screencast]]></category>

		<guid isPermaLink="false">http://halr9000.com/article/500</guid>
		<description><![CDATA[Enjoy! You can find BGShell at Codeplex but be forewarned it has some bugs. Definitely a project to watch.]]></description>
			<content:encoded><![CDATA[<a href="http://halr9000.com/article/category/programming/scripting/powershell" title="Powershell"><img src="/wp-content/icons/topic_powershell.png" align="right" width="70" height="53" alt="Powershell" /></a>
<!-- no icon for 'Screencast' --><p>Enjoy!  You can find <a href="http://codeplex.com/bgshell">BGShell</a> at <a href="http://codeplex.com">Codeplex</a> but be forewarned it has some bugs.  Definitely a project to watch.</p>
<p><object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="603" height="444"><param name="movie" value="http://content.screencast.com/bootstrap.swf"></param><param name="quality" value="high"></param><param name="bgcolor" value="#FFFFFF"></param><param name="flashVars" value="thumb=http://content.screencast.com/media/1e0682a0-cfe9-4260-86cd-0135e48eea9e_c24a5a01-a708-48f7-bde5-d1e8a33de7bd_static_0_0_Thumbnail.gif&#038;content=http://content.screencast.com/media/f83c862a-3572-4915-a612-0586a8e1f2d0_c24a5a01-a708-48f7-bde5-d1e8a33de7bd_static_0_0_2008-06-17_1151.swf&#038;width=603&#038;height=444"></param><param name="allowFullScreen" value="true"></param><param name="scale" value="showall"></param><param name="allowScriptAccess" value="always"></param>  <embed src="http://content.screencast.com/bootstrap.swf" quality="high" bgcolor="#FFFFFF" width="603" height="444" type="application/x-shockwave-flash" allowScriptAccess="always" flashVars="thumb=http://content.screencast.com/media/1e0682a0-cfe9-4260-86cd-0135e48eea9e_c24a5a01-a708-48f7-bde5-d1e8a33de7bd_static_0_0_Thumbnail.gif&#038;content=http://content.screencast.com/media/f83c862a-3572-4915-a612-0586a8e1f2d0_c24a5a01-a708-48f7-bde5-d1e8a33de7bd_static_0_0_2008-06-17_1151.swf&#038;width=603&#038;height=444" allowFullScreen="true" scale="showall"></embed></object></p>
]]></content:encoded>
			<wfw:commentRss>http://halr9000.com/article/500/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>VI Toolkit demo screencast</title>
		<link>http://halr9000.com/article/488</link>
		<comments>http://halr9000.com/article/488#comments</comments>
		<pubDate>Mon, 02 Jun 2008 00:37:06 +0000</pubDate>
		<dc:creator>halr9000</dc:creator>
				<category><![CDATA[Powershell]]></category>
		<category><![CDATA[Screencast]]></category>
		<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[VMware]]></category>

		<guid isPermaLink="false">http://halr9000.com/article/488</guid>
		<description><![CDATA[Here&#8217;s a brief experiment using a very cool tool called Jing. The application in this video is PowerShell Plus. (If the video does not appear below, you can find it here.)]]></description>
			<content:encoded><![CDATA[<a href="http://halr9000.com/article/category/programming/scripting/powershell" title="Powershell"><img src="/wp-content/icons/topic_powershell.png" align="right" width="70" height="53" alt="Powershell" /></a>
<!-- no icon for 'Screencast' --><!-- no icon for 'Tutorials' --><!-- no icon for 'VMware' --><p>Here&#8217;s a brief experiment using a very cool tool called <a href="http://jingproject.com" title="Jing, a screenshot and screencast publishing tool">Jing</a>.  The application in this video is <a href="http://powershellplus.com/" title="An enhanced PowerShell console plus feature-filled editor.  Free for non-commercial use.">PowerShell Plus</a>.</p>
<p>(If the video does not appear below, you can find it <a href="http://screencast.com/t/x3i5kK0e">here</a>.)</p>
<p><object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="604" height="322"><param name="movie" value="http://content.screencast.com/bootstrap.swf"></param><param name="quality" value="high"></param><param name="bgcolor" value="#FFFFFF"></param><param name="flashVars" value="thumb=http://content.screencast.com/media/a13ee096-3637-4e1f-902b-90ae996e195b_c24a5a01-a708-48f7-bde5-d1e8a33de7bd_static_0_0_Thumbnail.gif&#038;content=http://content.screencast.com/media/c45e6f2f-7d54-468d-86ec-254b83e50a0a_c24a5a01-a708-48f7-bde5-d1e8a33de7bd_static_0_0_VI%20Toolkit%20Demo.swf&#038;width=604&#038;height=322"></param><param name="allowFullScreen" value="true"></param><param name="scale" value="showall"></param><param name="allowScriptAccess" value="always"></param>  <embed src="http://content.screencast.com/bootstrap.swf" quality="high" bgcolor="#FFFFFF" width="604" height="322" type="application/x-shockwave-flash" allowScriptAccess="always" flashVars="thumb=http://content.screencast.com/media/a13ee096-3637-4e1f-902b-90ae996e195b_c24a5a01-a708-48f7-bde5-d1e8a33de7bd_static_0_0_Thumbnail.gif&#038;content=http://content.screencast.com/media/c45e6f2f-7d54-468d-86ec-254b83e50a0a_c24a5a01-a708-48f7-bde5-d1e8a33de7bd_static_0_0_VI%20Toolkit%20Demo.swf&#038;width=604&#038;height=322" allowFullScreen="true" scale="showall"></embed></object></p>
]]></content:encoded>
			<wfw:commentRss>http://halr9000.com/article/488/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Planning home improvement projects with Google Sketchup, part 1</title>
		<link>http://halr9000.com/article/341</link>
		<comments>http://halr9000.com/article/341#comments</comments>
		<pubDate>Thu, 18 Jan 2007 03:11:42 +0000</pubDate>
		<dc:creator>halr9000</dc:creator>
				<category><![CDATA[Google Sketchup]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://halr9000.com/article/341</guid>
		<description><![CDATA[I&#8217;ve got lots of home improvement projects that I&#8217;m working on lately: * rear deck * additional kitchen cabinetry * (someday) wooden playground set Since I&#8217;m seriously left-brained, I often have trouble coming up with creative solutions to problems, or even getting started when the plan is somewhat clear. To really &#8220;get it&#8221;, I need [...]]]></description>
			<content:encoded><![CDATA[<!-- no icon for 'Google Sketchup' --><!-- no icon for 'Software' --><!-- no icon for 'Tutorials' --><a href="http://halr9000.com/article/category/software/windows" title="Windows"><img src="/wp-content/icons/topic_windows.gif" align="right" width="54" height="46" alt="Windows" /></a>
<p>I&#8217;ve got lots of home improvement projects that I&#8217;m working on lately:</p>
<p>* rear deck<br />
* additional kitchen cabinetry<br />
* (someday) wooden playground set</p>
<p>Since I&#8217;m seriously left-brained, I often have trouble coming up with creative solutions to problems, or even getting started when the plan is somewhat clear.  To really &#8220;get it&#8221;, I need a detailed plan.  I&#8217;m not much of a sketch artist either, so of course, I look to the computer to solve my problems.  <img src='http://halr9000.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><a href="http://halr9000.com/article/301">I&#8217;ve written</a> about Google Sketchup before.  It&#8217;s a 3D CAD program but&#8230;how to say this&#8230;you don&#8217;t need to know what a spline or a bump map is.  It&#8217;s really easy to get into and be productive right away.</p>
<p>My first drawing was a fantasy castle.  It wasn&#8217;t to scale and I had to really experiment to figure out how line up the objects and workaround some quirks of the program.  Next, I wanted to redesign the office.  I took measurements and made a room.  Then needed to think about the desk.  One of the cool features of Sketchup is the portal where Google hosts contributed 3D models.  I searched there for a particular Ikea desk and didn&#8217;t find it, although there was other Ikea furniture there.  </p>
<p>So, I went to Ikea and took measurements of the desk.  It has a funky shape that I really wanted to take into account, so I had to measure several points.  Then I set to work making a scale model of the desk.  I was pretty happy with the end result:</p>
<p><img id="image340" src="http://halr9000.com/wp-content/uploads/2007/01/ikea%20desk.jpg" alt="ikea desk.jpg" /></p>
<p>Here it is laid out in my office:</p>
<p><img id="image342" src="http://halr9000.com/wp-content/uploads/2007/01/office%20with%20ikea%20desk.jpg" alt="office with ikea desk.jpg" /></p>
<p>There&#8217;s a ton of benefits to taking the time to make these 3D models.  For me the biggest thing was the ability to see very clearly with no confusion exactly how a given piece of furniture would fit in a room.  Would I have enough space to walk around the desk and pull out the chair?  What if I wanted to have someone standing or sitting next to me looking at my monitor?  Having the option to play out these scenarios was extremely valuable.</p>
<p>Next post I&#8217;ll show how my wife and I worked on a kitchen remodeling plan and start getting into techniques you can use.  Then later I&#8217;ll get  into the deck and cabinet projects.  Let me know if you find this useful to you.</p>
]]></content:encoded>
			<wfw:commentRss>http://halr9000.com/article/341/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
	</channel>
</rss>

