<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://powershell.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>Dreaming in PowerShell : Select-Object</title><link>http://powershell.com/cs/blogs/tobias/archive/tags/Select-Object/default.aspx</link><description>Tags: Select-Object</description><dc:language>en</dc:language><generator>CommunityServer 2008.5 (Build: 30929.2835)</generator><item><title>Using Hash Tables and Select-Object</title><link>http://powershell.com/cs/blogs/tobias/archive/2012/06/11/using-hash-tables-and-select-object.aspx</link><pubDate>Mon, 11 Jun 2012 02:12:00 GMT</pubDate><guid isPermaLink="false">f421715f-7aba-45f0-8a8d-44de5318a3a7:16978</guid><dc:creator>Tobias</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://powershell.com/cs/blogs/tobias/rsscomments.aspx?PostID=16978</wfw:commentRss><comments>http://powershell.com/cs/blogs/tobias/archive/2012/06/11/using-hash-tables-and-select-object.aspx#comments</comments><description>&lt;p&gt;If you don&amp;#39;t like what PowerShell commands return to you, send it on to &lt;strong&gt;Select-Object&lt;/strong&gt;! Select-Object is one of the most important cmdlets because it allows you to pick the columns (properties) you want to see. Check out these lines:&lt;/p&gt;
&lt;p&gt;&lt;em&gt;PS&amp;gt; Dir $env:windir&lt;br /&gt;PS&amp;gt; Dir $env:windir | Select-Object -Property *&lt;br /&gt;PS&amp;gt; Dir $env:windir | Select-Object -Property FullName&lt;br /&gt;PS&amp;gt; Dir $env:windir | Select-Object -ExpandProperty FullName&lt;br /&gt;PS&amp;gt; Dir $env:windir | Select-Object -ExpandProperty VersionInfo -ea SilentlyContinue&lt;br /&gt;&lt;/em&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;As you will observe, one identical command (listing all files in your windows folder)&amp;nbsp;returns dramatically different information,&amp;nbsp;thanks to &lt;strong&gt;Select-Object&lt;/strong&gt;. This blog post is not really about &lt;strong&gt;Select-Object&lt;/strong&gt;, though. It is about hash tables that you can feed into &lt;strong&gt;Select-Object&lt;/strong&gt; to help you&amp;nbsp;tailor results even more&amp;nbsp;to your needs. Still, let&amp;#39;s start with a quick refresher!&lt;/p&gt;
&lt;h3&gt;Select-Object - your Matrix Red Pill&lt;/h3&gt;
&lt;p&gt;If you have ever watched the movie &amp;quot;The Matrix&amp;quot; then you know what can happen when you swallow the red pill and not the blue one. Actually, &lt;strong&gt;Select-Object&lt;/strong&gt; works like a red pill in the PowerShell ecosystem. Without it, you get back only partial results that look pretty much like classic console output. By sending results to &lt;strong&gt;Select-Object&lt;/strong&gt;, you can choose the object properties (columns) you want to see, and if you submit a wildcard (*), you get back all available properties.&lt;/p&gt;
&lt;p&gt;So what I tend to do is this: I send results to &lt;em&gt;Select-Object -property *&lt;/em&gt;, get a good overview of the results, then pick the ones I need to create the custom report I need:&lt;/p&gt;
&lt;p&gt;&lt;em&gt;PS&amp;gt; Dir $env:windir | Select-Object -Property *&lt;br /&gt;PS&amp;gt; Dir $env:windir | Select-Object -Property Mode, LastWriteTime, Name&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Select-Object&lt;/strong&gt; is pretty straight-forward to use and works with all object data returned by any cmdlet. However, there is one extra rule you should know to understand all the examples from above: when you pick only one object property, do not use the parameter &lt;strong&gt;-property&lt;/strong&gt;. Use the parameter &lt;strong&gt;-expandProperty&lt;/strong&gt; instead. &lt;strong&gt;-ExpandProperty&lt;/strong&gt; replaces the result with the content of the object property you picked. Take a look at the difference:&lt;/p&gt;
&lt;p&gt;&lt;em&gt;PS&amp;gt; Dir $env:windir | Select-Object -Property Length&lt;br /&gt;PS&amp;gt; Dir $env:windir | Select-Object -ExpandProperty Length&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;As you see, with&lt;strong&gt; -property&lt;/strong&gt; the numeric column Length is displayed at the far right edge, with &lt;strong&gt;-expandProperty&lt;/strong&gt; you just get back the numbers which is what you probably really wanted. If you only select one property, it simply does not make sense to have a single column header.&lt;/p&gt;
&lt;p&gt;And there&amp;#39;s more: when a column (property) contains another object or an array with multiple lines, the content is often discarded. With &lt;strong&gt;-ExpandProperty&lt;/strong&gt;, however, you get back the complete content, and if the content is an object, the result is a new table with the columns now representing the object:&lt;/p&gt;
&lt;p&gt;&lt;em&gt;PS&amp;gt; Dir $env:windir | Select-Object -Property VersionInfo &lt;br /&gt;PS&amp;gt; Dir $env:windir | Select-Object -ExpandProperty VersionInfo -ea 0&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;The only issue you can run into with &lt;strong&gt;-ExpandProperty&lt;/strong&gt; is: if the property you picked is empty, you get an error because then, &lt;strong&gt;Select-Object&lt;/strong&gt; does not know what to return. To work around this, you can add &lt;strong&gt;-ea 0&lt;/strong&gt; or &lt;strong&gt;-ErrorAction SilentlyContinue&lt;/strong&gt; to your call to suppress these errors.&lt;/p&gt;
&lt;p&gt;Now to the real thing I wanted to write about: &lt;strong&gt;Select-Object&lt;/strong&gt; allows you to pick the columns but what if the column content isn&amp;#39;t formatted the way you want, or what if the column header isn&amp;#39;t perfect for you and you&amp;#39;d like to rename it. This is where hash tables enter the stage. Test yourself: Can you understand this piece of code?&lt;/p&gt;
&lt;p&gt;&lt;em&gt;$column = @{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Name = &amp;#39;Length&amp;#39;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Expression = { &amp;#39;{0:0.0} MB&amp;#39; -f ($_.Length/1MB) }&lt;br /&gt;}&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Dir $env:windir | Select-Object Mode, LastWriteTime, $column, Name&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Essentialy, what it does is: it reformats the column &amp;quot;Length&amp;quot; to show file length in MB rather than in bytes. If you digested this piece of code like a snap, then you are done! You already know about hash tables and you can use them now to reformat any column by submitting the hash table to &lt;strong&gt;Select-Object&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;If you are rather confused, right on! Stick with me, so I can show you what the heck is going on here! The first thing we need to talk about are hash tables. What are they, and why would you need them?&lt;/p&gt;
&lt;h3&gt;Guerilla Session #1: Understanding Arrays&lt;/h3&gt;
&lt;p&gt;To understand &lt;strong&gt;hash tables&lt;/strong&gt;, let&amp;#39;s start with classic &lt;strong&gt;arrays&lt;/strong&gt;. They are used to store multiple things in a variable. &lt;/p&gt;
&lt;p&gt;Whenever you store something new in a classic array, your data is put into a &amp;quot;drawer&amp;quot; with a number, and to get back the data, you present that number in square brackets. &lt;/p&gt;
&lt;p&gt;It&amp;#39;s pretty straight forward:&lt;/p&gt;
&lt;p&gt;&lt;em&gt;PS&amp;gt; $ClassicArray = @()&amp;nbsp;&amp;nbsp;&amp;nbsp; # create a new empty array&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;PS&amp;gt; $ClassicArray += &amp;#39;my data&amp;#39;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;PS&amp;gt; $ClassicArray += &amp;#39;another piece of data&amp;#39;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;PS&amp;gt; $ClassicArray += 12&amp;nbsp;&amp;nbsp;&amp;nbsp; # numeric data works, too&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;PS&amp;gt; $ClassicArray&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;my data&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;another piece of data&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;12&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;PS&amp;gt; $ClassicArray[0]&amp;nbsp;&amp;nbsp;&amp;nbsp; # get first element&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;my data&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;PS&amp;gt; $ClassicArray[0,1]&amp;nbsp;&amp;nbsp;&amp;nbsp; # get first and second element&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;my data&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;another piece of data&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;PS&amp;gt; $ClassicArray[-1]&amp;nbsp;&amp;nbsp;&amp;nbsp; # get last element&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;12&lt;/em&gt;&lt;/p&gt;
&lt;h3&gt;Guerilla Session #2: Hash Tables&lt;/h3&gt;
&lt;p&gt;The ugly thing with arrays is that you need to know the exact position of the data you are after. All of the array &amp;quot;drawers&amp;quot; with their numbers aren&amp;#39;t really very descriptive. &lt;/p&gt;
&lt;p&gt;That&amp;#39;s why there are hash tables. They basically work like arrays, except that you can call the drawers that store your data anything you like. &lt;/p&gt;
&lt;p&gt;Let&amp;#39;s rewrite the initial example to work with hash tables:&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;em&gt;PS&amp;gt; $HashTable = @{}&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # create a new empty array&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;See? The close relationship between an array and a hash table is resembled by the way you create them. When you use parenthesis, you get an array. When you use braces, you get a hash table.&lt;/p&gt;
&lt;p&gt;Now let&amp;#39;s put some data into the brand new hash table. Since the &amp;quot;drawers&amp;quot; have no automatic dumb numbering system but instead can be labeled anything you like, you can pick a meaningful label (or &amp;quot;key&amp;quot;) to store your information:&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;PS&amp;gt; $HashTable[&amp;#39;FirstInfo&amp;#39;] = &amp;#39;my data&amp;#39;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # store data in the &amp;quot;drawer&amp;quot; FirstInfo&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;As it turns out, hash tables support both the array-like syntax (see above) and the object-property-syntax (see below):&lt;/p&gt;
&lt;p&gt;&lt;em&gt;PS&amp;gt; $HashTable.SecondInfo = &amp;#39;another piece of data&amp;#39;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;PS&amp;gt; $HashTable.ID = 12&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Whenever you add a new key and value pair, it is stored inside the hash table, and when you dump the hash table, you get a list of keys and values:&lt;/p&gt;
&lt;p&gt;&lt;em&gt;PS&amp;gt; $HashTable&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&amp;nbsp;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Name&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Value&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&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;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;FirstInfo&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; my data&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;ID&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 12&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;SecondInfo&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; another piece of data&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;Of course, you can access individual information, too. In contrast to arrays, the order in which you added information to the hash table does not matter, anymore. All you need to do is to specify the key name you used when you stored the data:&lt;/p&gt;
&lt;p&gt;&lt;em&gt;PS&amp;gt; $HashTable[&amp;#39;FirstInfo&amp;#39;]&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;my data&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;You can also retrieve more than one element at a time:&lt;/p&gt;
&lt;p&gt;&lt;em&gt;PS&amp;gt; $HashTable[&amp;#39;SecondInfo&amp;#39;, &amp;#39;ID&amp;#39;]&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;another piece of data&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;12&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;And you can again use the object-property-syntax to get back data from your hash table:&lt;/p&gt;
&lt;p&gt;&lt;em&gt;PS&amp;gt; $HashTable.ID&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;12&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;PS&amp;gt; $HashTable.FirstInfo&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Hello&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;So, hash tables are a great way of handing over information to someone else. If you and the recipient agree on the keys that you used to store the data, then the hash table can transport that data to the recipient. And that&amp;#39;s exactly how PowerShell lets you use hash tables to do more with less code.&lt;/p&gt;
&lt;h3&gt;Wrapping It Up: Select-Object loves Hash Tables&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Select-Object&lt;/strong&gt; is a cmdlet that accepts hash tables. Not just any hash tables. It looks for two keys: &lt;strong&gt;Name&lt;/strong&gt; and &lt;strong&gt;Expression&lt;/strong&gt;. The value assigned to the key &lt;strong&gt;Name&lt;/strong&gt; is then used for the column header. So this is what you&amp;nbsp;use to change a column header you don&amp;#39;t like.&amp;nbsp;The value assigned to the key &lt;strong&gt;Expression&lt;/strong&gt; must be some code (a script block in braces). It is executed for each element in a table and creates the column content. So here you can take the original object (which is represented by the variable &lt;strong&gt;$_&lt;/strong&gt;) and reformat it to whatever you like.&lt;/p&gt;
&lt;p&gt;Check your new PowerShell knowledge! Can you explain this code?&lt;/p&gt;
&lt;p&gt;&lt;em&gt;$column = @{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Name = &amp;#39;MyColumn&amp;#39;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Expression = { &amp;#39;Hello&amp;#39; }&lt;br /&gt;}&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Dir $env:windir | Select-Object Mode, LastWriteTime, $column, Name&lt;br /&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Right! This adds a new column called &amp;quot;MyColumn&amp;quot;, and its content is always &amp;quot;Hello&amp;quot;. Does not make too much sense yet, but as you can see, the code block assigned to the key Expression is really executed multiple times, once for each object that was sent to &lt;strong&gt;Select-Object&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Here is a more sophisticated example. Check this one out:&lt;/p&gt;
&lt;p&gt;&lt;em&gt;$column = @{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Name = &amp;#39;Length&amp;#39;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Expression = { &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if ($_.PSIsContainer) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;#39;(folder)&amp;#39;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } else {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;#39;{0:0.0} MB&amp;#39; -f ($_.Length/1MB)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;}&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Dir $env:windir | Select-Object Mode, LastWriteTime, $column, Name&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;This time, the code assigned to &lt;strong&gt;Expression&lt;/strong&gt; is smart enough to differentiate between files and folder. If it&amp;#39;s a folder, it has no Length property so some text is outputted.&lt;/p&gt;
&lt;p&gt;Likewise, you can now access any - even nested - object properties and make them surface as new column in your reports. Here&amp;#39;s another one:&lt;/p&gt;
&lt;p&gt;&lt;em&gt;$column = @{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Name = &amp;#39;Version&amp;#39;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Expression = { &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $_.VersionInfo.FileVersion&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;}&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Dir $env:windir | Select-Object Mode, LastWriteTime, $column, Name&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;This one will add the file version number (if available). Again, it is completely up to you to enhance the code. As you&amp;#39;ll see, some files have invalid version numbers, and this piece of code would return only correctly formatted version numbers that you can then use to sort or compare:&lt;/p&gt;
&lt;p&gt;&lt;em&gt;$column = @{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Name = &amp;#39;Version&amp;#39;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Expression = { &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [System.Version]$_.VersionInfo.FileVersion.Replace(&amp;#39;,&amp;#39;,&amp;#39;.&amp;#39;).Split(&amp;#39; _&amp;#39;)[0]&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;}&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Dir $env:windir | Select-Object Mode, LastWriteTime, $column, Name&lt;/em&gt;&lt;/p&gt;
&lt;h3&gt;What&amp;#39;s Next?&lt;/h3&gt;
&lt;p&gt;The great thing about PowerShell is that you always get &lt;strong&gt;great rewards&lt;/strong&gt; for investing some time and learning something new. Today, you learned what a hash table is and how you can feed it to &lt;strong&gt;Select-Object&lt;/strong&gt;&amp;nbsp;to tailor results to your needs. With this knowledge, you can do a lot more. Next time, I&amp;#39;ll show you a couple more areas where you can use hash tables to unleash PowerShell.&lt;/p&gt;
&lt;p&gt;See you soon!&lt;/p&gt;
&lt;p&gt;Tobias&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Microsoft MVP PowerShell Germany&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;P.S.&lt;br /&gt;If you live in Germany or other parts of Europe and your company would like to set up a truly great PowerShell training, just contact me! I regularly train mid- to large-size companies. Trainings are always a blast with tons of real-world-examples and solutions. Here&amp;#39;s how to get in touch with me: &lt;a href="mailto:tobias.weltner@scriptinternals.de"&gt;&lt;span style="color:#3366cc;"&gt;tobias.weltner@scriptinternals.de&lt;/span&gt;&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://powershell.com/cs/aggbug.aspx?PostID=16978" width="1" height="1"&gt;</description><category domain="http://powershell.com/cs/blogs/tobias/archive/tags/Select-Object/default.aspx">Select-Object</category><category domain="http://powershell.com/cs/blogs/tobias/archive/tags/Hash+Table/default.aspx">Hash Table</category></item><item><title>Automatically Surfacing Subproperties</title><link>http://powershell.com/cs/blogs/tobias/archive/2011/02/17/automatically-surfacing-subproperties.aspx</link><pubDate>Thu, 17 Feb 2011 00:22:00 GMT</pubDate><guid isPermaLink="false">f421715f-7aba-45f0-8a8d-44de5318a3a7:9384</guid><dc:creator>Tobias</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://powershell.com/cs/blogs/tobias/rsscomments.aspx?PostID=9384</wfw:commentRss><comments>http://powershell.com/cs/blogs/tobias/archive/2011/02/17/automatically-surfacing-subproperties.aspx#comments</comments><description>&lt;p&gt;Sometimes, the &lt;strong&gt;true information you are after is burried deep inside object models&lt;/strong&gt;. For example, when you manage virtual machines with the VMWare cmdlets, &lt;strong&gt;Get-VM&lt;/strong&gt; will get you only very sparse pieces of information. The real goodies are stored inside of subproperties (which was true&amp;nbsp;&lt;a target="_blank" href="http://powershell.com/cs/blogs/tobias/archive/2011/02/07/reading-and-writing-mpeg-tags-and-attributes-part-2.aspx"&gt;for the MPEG3 module I created last week&lt;/a&gt; as well).&amp;nbsp;Time to get a look at what is going on here (and how you can &amp;quot;move&amp;quot; hidden subproperties onto the stage and make them visible).&amp;nbsp; &lt;/p&gt;
&lt;p&gt;&lt;span style="text-decoration:line-through;"&gt;Just so you don&amp;#39;t think today I was discussing a really geeky topic: what you learn today has tremendous real-life-value. For example, you are getting to see two pieces of code that seem to do the exact same thing, yet the one approach (which is used by a lot of folks out there) &lt;strong&gt;takes 40x more time to execute than the other&lt;/strong&gt; (which is not so known).&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;[This kept spinning in my head: how come there can be such a huge performance difference? Turns out it was a caching effect. The true and real world speed benefit is about 2x, not 40x. Sorry if I got you excited &lt;img src="http://powershell.com/cs/emoticons/emotion-8.gif" alt="Indifferent" /&gt;. Fortunately, the performance gain was just an added benefit, the main story is about auto-adding script properties.]&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;To get a feeling for the problem, did you ever try and create a list of system DLLs and their versions? A plain &lt;strong&gt;dir&lt;/strong&gt; won&amp;#39;t get you far:&lt;/p&gt;
&lt;div class="pscode"&gt;PS &amp;gt; dir &lt;span class="var"&gt;&lt;span style="color:#800080;"&gt;$env:windir&lt;/span&gt;&lt;/span&gt;\system32\&lt;span class="op"&gt;&lt;span style="color:#ff0000;"&gt;*&lt;/span&gt;&lt;/span&gt;.&lt;span style="color:#8b4513;"&gt;&lt;span class="method"&gt;dll&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;Mode LastWriteTime Length Name&lt;br /&gt;&lt;span class="op"&gt;&lt;span style="color:#ff0000;"&gt;----&lt;/span&gt;&lt;/span&gt; &lt;span class="op"&gt;&lt;span style="color:#ff0000;"&gt;-------------&lt;/span&gt;&lt;/span&gt; &lt;span class="op"&gt;&lt;span style="color:#ff0000;"&gt;------&lt;/span&gt;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;&lt;span class="op"&gt;----&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="modifier"&gt;&lt;span style="color:#5f9ea0;"&gt;-a&lt;/span&gt;&lt;/span&gt;&lt;span class="op"&gt;&lt;span style="color:#ff0000;"&gt;---&lt;/span&gt;&lt;/span&gt; 14.07.2009 03:39 158208 &lt;span style="color:#8b4513;"&gt;&lt;span class="namespace"&gt;aaclient.dll&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="modifier"&gt;&lt;span style="color:#5f9ea0;"&gt;-a&lt;/span&gt;&lt;/span&gt;&lt;span class="op"&gt;&lt;span style="color:#ff0000;"&gt;---&lt;/span&gt;&lt;/span&gt; 14.07.2009 03:40 3745792 &lt;span style="color:#8b4513;"&gt;&lt;span class="namespace"&gt;accessibilitycpl.dll&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="modifier"&gt;&lt;span style="color:#5f9ea0;"&gt;-a&lt;/span&gt;&lt;/span&gt;&lt;span class="op"&gt;&lt;span style="color:#ff0000;"&gt;---&lt;/span&gt;&lt;/span&gt; 14.07.2009 03:24 39424 &lt;span style="color:#8b4513;"&gt;&lt;span class="namespace"&gt;ACCTRES.dll&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;(...)&lt;/div&gt;
&lt;p&gt;&lt;br /&gt;This line does, though:&lt;/p&gt;
&lt;div class="pscode"&gt;PS &amp;gt; dir &lt;span class="var"&gt;&lt;span style="color:#800080;"&gt;$env:windir&lt;/span&gt;&lt;/span&gt;\system32\&lt;span class="op"&gt;&lt;span style="color:#ff0000;"&gt;*&lt;/span&gt;&lt;/span&gt;.&lt;span class="method"&gt;&lt;span style="color:#8b4513;"&gt;dll&lt;/span&gt;&lt;/span&gt; | &lt;span class="verbnoun"&gt;&lt;span style="color:#5f9ea0;"&gt;Select-Object&lt;/span&gt;&lt;/span&gt; &lt;span class="modifier"&gt;&lt;span style="color:#5f9ea0;"&gt;-ExpandProperty&lt;/span&gt;&lt;/span&gt; VersionInfo&lt;br /&gt;&lt;br /&gt;ProductVersion FileVersion FileName&lt;br /&gt;&lt;span class="op"&gt;&lt;span style="color:#ff0000;"&gt;--------------&lt;/span&gt;&lt;/span&gt; &lt;span class="op"&gt;&lt;span style="color:#ff0000;"&gt;-----------&lt;/span&gt;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;&lt;span class="op"&gt;--------&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;6.1.7600.16385 6.1.7600.1638... C:\Windows\system32\&lt;span style="color:#8b4513;"&gt;&lt;span class="namespace"&gt;aaclient.dll&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;6.1.7600.16385 6.1.7600.1638... C:\Windows\system32\&lt;span style="color:#8b4513;"&gt;&lt;span class="namespace"&gt;accessibilitycpl.dll&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;6.1.7600.16385 6.1.7600.1638... C:\Windows\system32\&lt;span style="color:#8b4513;"&gt;&lt;span class="namespace"&gt;ACCTRES.dll&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;6.1.7600.16385 6.1.7600.1638... C:\Windows\system32\&lt;span style="color:#8b4513;"&gt;&lt;span class="namespace"&gt;acledit.dll&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;6.1.7600.16385 6.1.7600.1638... C:\Windows\system32\&lt;span style="color:#8b4513;"&gt;&lt;span class="namespace"&gt;aclui.dll&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;6.1.7600.16385 6.1.7600.1638... C:\Windows\system32\&lt;span style="color:#8b4513;"&gt;&lt;span class="namespace"&gt;acppage.dll&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;6.1.7600.16385 6.1.7600.1638... C:\Windows\system32\&lt;span style="color:#8b4513;"&gt;&lt;span class="namespace"&gt;acproxy.dll&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;(...)&lt;/div&gt;
&lt;p&gt;So what&amp;#39;s going on here? &lt;/p&gt;
&lt;h3&gt;Either - Or: Select-Object can not always help&lt;/h3&gt;
&lt;p&gt;It turns out that file objects have a subproperty called &lt;strong&gt;VersionInfo&lt;/strong&gt;. It contains the DLL versions we are after. To display that information, I used &lt;strong&gt;Select-Object&lt;/strong&gt; with its &lt;strong&gt;-expandProperty&lt;/strong&gt; parameter. This parameter tells PowerShell to &lt;strong&gt;replace the current object&lt;/strong&gt; with the content of the property you specify. Thus I &lt;strong&gt;lost my original FileInfo&lt;/strong&gt; object and in return got the VersionInfo object found in the property I specified. &lt;/p&gt;
&lt;p&gt;Sounds confusing? Now, what it means is that &lt;strong&gt;Select-Object&lt;/strong&gt; can only give you the content of &lt;strong&gt;one&lt;/strong&gt; subproperty, and you pay for it by loosing all the properties in your original object. It is a simple trade-off.&lt;/p&gt;
&lt;h3&gt;Getting Dirty: Using Ad-Hoc Script Properties&lt;/h3&gt;
&lt;p&gt;In the previous example, the trade-off was ok. It is not always ok, though. Let&amp;#39;s assume you need a &lt;strong&gt;report that includes filename, version, length and creationtime&lt;/strong&gt;. How can you do that? After all, the &lt;strong&gt;information needed now comes partially&lt;/strong&gt; from the FileInfo object and partially from the VersionInfo object stored inside of it.&lt;/p&gt;
&lt;p&gt;Well, if your hair is on fire and you haven&amp;#39;t got the time for a decent approach, use &lt;strong&gt;quick-and-dirty scripted properties&lt;/strong&gt;. Here is an example:&lt;/p&gt;
&lt;div class="pscode"&gt;PS &amp;gt; dir &lt;span class="var"&gt;&lt;span style="color:#800080;"&gt;$env:windir&lt;/span&gt;&lt;/span&gt;\system32\&lt;span class="op"&gt;&lt;span style="color:#ff0000;"&gt;*&lt;/span&gt;&lt;/span&gt;.&lt;span class="method"&gt;&lt;span style="color:#8b4513;"&gt;dll&lt;/span&gt;&lt;/span&gt; | &lt;br /&gt;&lt;span class="verbnoun"&gt;&lt;span style="color:#5f9ea0;"&gt;Select-Object&lt;/span&gt;&lt;/span&gt; Name, { &lt;span class="var"&gt;&lt;span style="color:#800080;"&gt;$_&lt;/span&gt;&lt;/span&gt;.&lt;span class="namespace"&gt;&lt;span style="color:#8b4513;"&gt;VersionInfo.FileVersion&lt;/span&gt;&lt;/span&gt; }, Length, CreationTime&lt;br /&gt;&lt;br /&gt;Name &lt;span class="var"&gt;&lt;span style="color:#800080;"&gt;$_&lt;/span&gt;&lt;/span&gt;.&lt;span class="namespace"&gt;&lt;span style="color:#8b4513;"&gt;VersionInfo.Fil&lt;/span&gt;&lt;/span&gt; Length CreationTime&lt;br /&gt;eVersion&lt;br /&gt;&lt;span class="op"&gt;&lt;span style="color:#ff0000;"&gt;----&lt;/span&gt;&lt;/span&gt; &lt;span class="op"&gt;&lt;span style="color:#ff0000;"&gt;-------------------&lt;/span&gt;&lt;/span&gt; &lt;span class="op"&gt;&lt;span style="color:#ff0000;"&gt;------&lt;/span&gt;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;&lt;span class="op"&gt;------------&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="namespace"&gt;&lt;span style="color:#8b4513;"&gt;aaclient.dll&lt;/span&gt;&lt;/span&gt; 6.1.7600.16385 (... 158208 14.07.2009 02:17:30&lt;br /&gt;accessibilitycpl... 6.1.7600.16385 (... 3745792 14.07.2009 02:34:00&lt;br /&gt;&lt;span class="namespace"&gt;&lt;span style="color:#8b4513;"&gt;ACCTRES.dll&lt;/span&gt;&lt;/span&gt; 6.1.7600.16385 (... 39424 14.07.2009 01:57:56&lt;br /&gt;&lt;span class="namespace"&gt;&lt;span style="color:#8b4513;"&gt;acledit.dll&lt;/span&gt;&lt;/span&gt; 6.1.7600.16385 (... 9216 14.07.2009 01:48:08&lt;br /&gt;&lt;span class="namespace"&gt;&lt;span style="color:#8b4513;"&gt;aclui.dll&lt;/span&gt;&lt;/span&gt; 6.1.7600.16385 (... 154112 14.07.2009 01:57:30&lt;/div&gt;
&lt;div class="pscode"&gt;(...)&lt;/div&gt;
&lt;p&gt;As you see, instead of specifying a column name (property name), you can also submit a script block and access the object subproperty you are after. That approach is ok, and you can even use a &lt;strong&gt;hash table&lt;/strong&gt; if you want to get rid of the ugly column header:&lt;/p&gt;
&lt;div class="pscode"&gt;PS &amp;gt; &lt;span class="var"&gt;&lt;span style="color:#800080;"&gt;$version&lt;/span&gt;&lt;/span&gt; &lt;span class="op"&gt;&lt;span style="color:#ff0000;"&gt;=&lt;/span&gt;&lt;/span&gt; @{name &lt;span class="op"&gt;&lt;span style="color:#ff0000;"&gt;=&lt;/span&gt;&lt;/span&gt; &lt;span class="string"&gt;&lt;span style="color:#800000;"&gt;&amp;#39;Version&amp;#39;&lt;/span&gt;&lt;/span&gt;; expression&lt;span class="op"&gt;&lt;span style="color:#ff0000;"&gt;=&lt;/span&gt;&lt;/span&gt;{ &lt;span class="var"&gt;&lt;span style="color:#800080;"&gt;$_&lt;/span&gt;&lt;/span&gt;.&lt;span class="namespace"&gt;&lt;span style="color:#8b4513;"&gt;VersionInfo.FileVersion&lt;/span&gt;&lt;/span&gt; } }&lt;br /&gt;PS &amp;gt; dir &lt;span class="var"&gt;&lt;span style="color:#800080;"&gt;$env:windir&lt;/span&gt;&lt;/span&gt;\system32\&lt;span class="op"&gt;&lt;span style="color:#ff0000;"&gt;*&lt;/span&gt;&lt;/span&gt;.&lt;span class="method"&gt;&lt;span style="color:#8b4513;"&gt;dll&lt;/span&gt;&lt;/span&gt; | &lt;span class="verbnoun"&gt;&lt;span style="color:#5f9ea0;"&gt;Select-Object&lt;/span&gt;&lt;/span&gt; Name, &lt;span class="var"&gt;&lt;span style="color:#800080;"&gt;$version&lt;/span&gt;&lt;/span&gt;, Length, Crea&lt;br /&gt;tionTime&lt;br /&gt;&lt;br /&gt;Name Version Length CreationTime&lt;br /&gt;&lt;span class="op"&gt;&lt;span style="color:#ff0000;"&gt;----&lt;/span&gt;&lt;/span&gt; &lt;span class="op"&gt;&lt;span style="color:#ff0000;"&gt;-------&lt;/span&gt;&lt;/span&gt; &lt;span class="op"&gt;&lt;span style="color:#ff0000;"&gt;------&lt;/span&gt;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;&lt;span class="op"&gt;------------&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="namespace"&gt;&lt;span style="color:#8b4513;"&gt;aaclient.dll&lt;/span&gt;&lt;/span&gt; 6.1.7600.16385 (... 158208 14.07.2009 02:17:30&lt;br /&gt;(...)&lt;/div&gt;
&lt;p&gt;&lt;em&gt;(Note that this only works when you define the hash table in one line. That&amp;#39;s a PowerShell bug)&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;However, it&amp;#39;s a lot of writing, especially with the hash tables. Even worse, &lt;strong&gt;Select-Object actually replaces&amp;nbsp;your object&lt;/strong&gt; and is creating &lt;strong&gt;a read-only copy&lt;/strong&gt;. For reports, that is ok. If you want to keep the object methods, though, you may never use &lt;strong&gt;Select-Object&lt;/strong&gt;. And if you want fast scripts, you should avoid &lt;strong&gt;Select-Object&lt;/strong&gt; as well. Let&amp;#39;s check out why and what to do about it next.&lt;/p&gt;
&lt;h3&gt;ScriptProperties&amp;nbsp;to the Rescue&lt;/h3&gt;
&lt;p&gt;Rather than using &lt;strong&gt;Select-Object&lt;/strong&gt; to add properties, you can&amp;nbsp;also add script properties to the original object. In fact, that is something PowerShell uses by default for a lot of objects. Take a look at process objects returned by &lt;strong&gt;Get-Process&lt;/strong&gt;:&lt;/p&gt;
&lt;div class="pscode"&gt;PS &amp;gt; &lt;span class="verbnoun"&gt;&lt;span style="color:#5f9ea0;"&gt;Get-Process&lt;/span&gt;&lt;/span&gt; | &lt;span class="verbnoun"&gt;&lt;span style="color:#5f9ea0;"&gt;Get-Member&lt;/span&gt;&lt;/span&gt; &lt;span class="modifier"&gt;&lt;span style="color:#5f9ea0;"&gt;-MemberType&lt;/span&gt;&lt;/span&gt; ScriptProperty&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;TypeName: &lt;span style="color:#8b4513;"&gt;&lt;span class="namespace"&gt;System.Diagnostics.Process&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;Name MemberType Definition&lt;br /&gt;&lt;span class="op"&gt;&lt;span style="color:#ff0000;"&gt;----&lt;/span&gt;&lt;/span&gt; &lt;span class="op"&gt;&lt;span style="color:#ff0000;"&gt;----------&lt;/span&gt;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;&lt;span class="op"&gt;----------&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;Company ScriptProperty &lt;span class="namespace"&gt;&lt;span style="color:#8b4513;"&gt;System.Object&lt;/span&gt;&lt;/span&gt; Company {get&lt;span class="op"&gt;&lt;span style="color:#ff0000;"&gt;=&lt;/span&gt;&lt;/span&gt;&lt;span class="var"&gt;&lt;span style="color:#800080;"&gt;$this&lt;/span&gt;&lt;/span&gt;.&lt;span class="namespace"&gt;&lt;span style="color:#8b4513;"&gt;Mainmodule.Fi&lt;/span&gt;&lt;/span&gt;...&lt;br /&gt;CPU ScriptProperty &lt;span class="namespace"&gt;&lt;span style="color:#8b4513;"&gt;System.Object&lt;/span&gt;&lt;/span&gt; CPU {get&lt;span class="op"&gt;&lt;span style="color:#ff0000;"&gt;=&lt;/span&gt;&lt;/span&gt;&lt;span class="var"&gt;&lt;span style="color:#800080;"&gt;$this&lt;/span&gt;&lt;/span&gt;.&lt;span class="method"&gt;&lt;span style="color:#8b4513;"&gt;TotalProcessorTim&lt;/span&gt;&lt;/span&gt;...&lt;br /&gt;Description ScriptProperty &lt;span class="namespace"&gt;&lt;span style="color:#8b4513;"&gt;System.Object&lt;/span&gt;&lt;/span&gt; Description {get&lt;span class="op"&gt;&lt;span style="color:#ff0000;"&gt;=&lt;/span&gt;&lt;/span&gt;&lt;span class="var"&gt;&lt;span style="color:#800080;"&gt;$this&lt;/span&gt;&lt;/span&gt;.&lt;span class="method"&gt;&lt;span style="color:#8b4513;"&gt;Mainmodul&lt;/span&gt;&lt;/span&gt;...&lt;br /&gt;FileVersion ScriptProperty &lt;span class="namespace"&gt;&lt;span style="color:#8b4513;"&gt;System.Object&lt;/span&gt;&lt;/span&gt; FileVersion {get&lt;span class="op"&gt;&lt;span style="color:#ff0000;"&gt;=&lt;/span&gt;&lt;/span&gt;&lt;span class="var"&gt;&lt;span style="color:#800080;"&gt;$this&lt;/span&gt;&lt;/span&gt;.&lt;span class="method"&gt;&lt;span style="color:#8b4513;"&gt;Mainmodul&lt;/span&gt;&lt;/span&gt;...&lt;br /&gt;Path ScriptProperty &lt;span class="namespace"&gt;&lt;span style="color:#8b4513;"&gt;System.Object&lt;/span&gt;&lt;/span&gt; Path {get&lt;span class="op"&gt;&lt;span style="color:#ff0000;"&gt;=&lt;/span&gt;&lt;/span&gt;&lt;span class="var"&gt;&lt;span style="color:#800080;"&gt;$this&lt;/span&gt;&lt;/span&gt;.&lt;span class="namespace"&gt;&lt;span style="color:#8b4513;"&gt;Mainmodule.FileN&lt;/span&gt;&lt;/span&gt;...&lt;br /&gt;Product ScriptProperty &lt;span class="namespace"&gt;&lt;span style="color:#8b4513;"&gt;System.Object&lt;/span&gt;&lt;/span&gt; Product {get&lt;span class="op"&gt;&lt;span style="color:#ff0000;"&gt;=&lt;/span&gt;&lt;/span&gt;&lt;span class="var"&gt;&lt;span style="color:#800080;"&gt;$this&lt;/span&gt;&lt;/span&gt;.&lt;span class="namespace"&gt;&lt;span style="color:#8b4513;"&gt;Mainmodule.Fi&lt;/span&gt;&lt;/span&gt;...&lt;br /&gt;ProductVersion ScriptProperty &lt;span class="namespace"&gt;&lt;span style="color:#8b4513;"&gt;System.Object&lt;/span&gt;&lt;/span&gt; ProductVersion {get&lt;span class="op"&gt;&lt;span style="color:#ff0000;"&gt;=&lt;/span&gt;&lt;/span&gt;&lt;span class="var"&gt;&lt;span style="color:#800080;"&gt;$this&lt;/span&gt;&lt;/span&gt;.&lt;span class="method"&gt;&lt;span style="color:#8b4513;"&gt;Mainmo&lt;/span&gt;&lt;/span&gt;...&lt;/div&gt;
&lt;p&gt;Here, PowerShell has made internal subproperties surface the top level by adding script properties. To see their actual code, try this:&lt;/p&gt;
&lt;div class="pscode"&gt;PS &amp;gt; &lt;span class="verbnoun"&gt;&lt;span style="color:#5f9ea0;"&gt;Get-Process&lt;/span&gt;&lt;/span&gt; | &lt;span class="verbnoun"&gt;&lt;span style="color:#5f9ea0;"&gt;Get-Member&lt;/span&gt;&lt;/span&gt; &lt;span class="modifier"&gt;&lt;span style="color:#5f9ea0;"&gt;-MemberType&lt;/span&gt;&lt;/span&gt; ScriptProperty | &lt;span class="verbnoun"&gt;&lt;span style="color:#5f9ea0;"&gt;Select-Object&lt;/span&gt;&lt;/span&gt; &lt;span class="modifier"&gt;&lt;span style="color:#5f9ea0;"&gt;-ExpandProperty&lt;/span&gt;&lt;/span&gt; Definition&lt;br /&gt;&lt;span class="namespace"&gt;&lt;span style="color:#8b4513;"&gt;System.Object&lt;/span&gt;&lt;/span&gt; Company {get&lt;span class="op"&gt;&lt;span style="color:#ff0000;"&gt;=&lt;/span&gt;&lt;/span&gt;&lt;span class="var"&gt;&lt;span style="color:#800080;"&gt;$this&lt;/span&gt;&lt;/span&gt;.&lt;span class="namespace"&gt;&lt;span style="color:#8b4513;"&gt;Mainmodule.FileVersionInfo.CompanyName&lt;/span&gt;&lt;/span&gt;;}&lt;br /&gt;&lt;span class="namespace"&gt;&lt;span style="color:#8b4513;"&gt;System.Object&lt;/span&gt;&lt;/span&gt; CPU {get&lt;span class="op"&gt;&lt;span style="color:#ff0000;"&gt;=&lt;/span&gt;&lt;/span&gt;&lt;span class="var"&gt;&lt;span style="color:#800080;"&gt;$this&lt;/span&gt;&lt;/span&gt;.&lt;span class="namespace"&gt;&lt;span style="color:#8b4513;"&gt;TotalProcessorTime.TotalSeconds&lt;/span&gt;&lt;/span&gt;;}&lt;br /&gt;&lt;span class="namespace"&gt;&lt;span style="color:#8b4513;"&gt;System.Object&lt;/span&gt;&lt;/span&gt; Description {get&lt;span class="op"&gt;&lt;span style="color:#ff0000;"&gt;=&lt;/span&gt;&lt;/span&gt;&lt;span class="var"&gt;&lt;span style="color:#800080;"&gt;$this&lt;/span&gt;&lt;/span&gt;.&lt;span class="namespace"&gt;&lt;span style="color:#8b4513;"&gt;Mainmodule.FileVersionInfo.FileDescription&lt;/span&gt;&lt;/span&gt;;}&lt;br /&gt;&lt;span class="namespace"&gt;&lt;span style="color:#8b4513;"&gt;System.Object&lt;/span&gt;&lt;/span&gt; FileVersion {get&lt;span class="op"&gt;&lt;span style="color:#ff0000;"&gt;=&lt;/span&gt;&lt;/span&gt;&lt;span class="var"&gt;&lt;span style="color:#800080;"&gt;$this&lt;/span&gt;&lt;/span&gt;.&lt;span class="namespace"&gt;&lt;span style="color:#8b4513;"&gt;Mainmodule.FileVersionInfo.FileVersion&lt;/span&gt;&lt;/span&gt;;}&lt;br /&gt;&lt;span class="namespace"&gt;&lt;span style="color:#8b4513;"&gt;System.Object&lt;/span&gt;&lt;/span&gt; Path {get&lt;span class="op"&gt;&lt;span style="color:#ff0000;"&gt;=&lt;/span&gt;&lt;/span&gt;&lt;span class="var"&gt;&lt;span style="color:#800080;"&gt;$this&lt;/span&gt;&lt;/span&gt;.&lt;span class="namespace"&gt;&lt;span style="color:#8b4513;"&gt;Mainmodule.FileName&lt;/span&gt;&lt;/span&gt;;}&lt;br /&gt;&lt;span class="namespace"&gt;&lt;span style="color:#8b4513;"&gt;System.Object&lt;/span&gt;&lt;/span&gt; Product {get&lt;span class="op"&gt;&lt;span style="color:#ff0000;"&gt;=&lt;/span&gt;&lt;/span&gt;&lt;span class="var"&gt;&lt;span style="color:#800080;"&gt;$this&lt;/span&gt;&lt;/span&gt;.&lt;span class="namespace"&gt;&lt;span style="color:#8b4513;"&gt;Mainmodule.FileVersionInfo.ProductName&lt;/span&gt;&lt;/span&gt;;}&lt;br /&gt;&lt;span class="namespace"&gt;&lt;span style="color:#8b4513;"&gt;System.Object&lt;/span&gt;&lt;/span&gt; ProductVersion {get&lt;span class="op"&gt;&lt;span style="color:#ff0000;"&gt;=&lt;/span&gt;&lt;/span&gt;&lt;span class="var"&gt;&lt;span style="color:#800080;"&gt;$this&lt;/span&gt;&lt;/span&gt;.&lt;span class="namespace"&gt;&lt;span style="color:#8b4513;"&gt;Mainmodule.FileVersionInfo.ProductVersion&lt;/span&gt;&lt;/span&gt;;}&lt;/div&gt;
&lt;p&gt;Note the use of &lt;strong&gt;-expandProperty&lt;/strong&gt; again? Whenever PowerShell &lt;strong&gt;truncates your output&lt;/strong&gt;, use it to pick the contents of the column you are interested in, and you get that information &lt;strong&gt;without truncation&lt;/strong&gt;. Using &lt;strong&gt;Select-Object&lt;/strong&gt; is not a bad thing, it is very useful in many scenarios. It is just not the best way to add new properties to objects as you&amp;#39;ll see in a sec.&lt;/p&gt;
&lt;h3&gt;Creating New ScriptProperties With Add-Member&lt;/h3&gt;
&lt;p&gt;To add version information to file objects without changing the objects, you can add this&amp;nbsp;property using &lt;strong&gt;Add-Member&lt;/strong&gt;. Try this:&lt;/p&gt;
&lt;div class="pscode"&gt;PS &amp;gt; dir &lt;span class="var"&gt;&lt;span style="color:#800080;"&gt;$env:windir&lt;/span&gt;&lt;/span&gt;\system32\&lt;span class="op"&gt;&lt;span style="color:#ff0000;"&gt;*&lt;/span&gt;&lt;/span&gt;.&lt;span class="method"&gt;&lt;span style="color:#8b4513;"&gt;dll&lt;/span&gt;&lt;/span&gt; | &lt;span class="verbnoun"&gt;&lt;span style="color:#5f9ea0;"&gt;Add-Member&lt;/span&gt;&lt;/span&gt; &lt;span class="modifier"&gt;&lt;span style="color:#5f9ea0;"&gt;-MemberType&lt;/span&gt;&lt;/span&gt; ScriptProperty &lt;span style="color:#5f9ea0;"&gt;&lt;span class="modifier"&gt;-Nam&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;e Version &lt;span class="modifier"&gt;&lt;span style="color:#5f9ea0;"&gt;-Value&lt;/span&gt;&lt;/span&gt; { &lt;span class="var"&gt;&lt;span style="color:#800080;"&gt;$this&lt;/span&gt;&lt;/span&gt;.&lt;span class="namespace"&gt;&lt;span style="color:#8b4513;"&gt;VersionInfo.FileVersion&lt;/span&gt;&lt;/span&gt; } &lt;span class="modifier"&gt;&lt;span style="color:#5f9ea0;"&gt;-PassThru&lt;/span&gt;&lt;/span&gt; | &lt;span class="verbnoun"&gt;&lt;span style="color:#5f9ea0;"&gt;Select-Object&lt;/span&gt;&lt;/span&gt; Nam&lt;br /&gt;e, Version, Length, CreationTime&lt;br /&gt;&lt;br /&gt;Name Version Length CreationTime&lt;br /&gt;&lt;span class="op"&gt;&lt;span style="color:#ff0000;"&gt;----&lt;/span&gt;&lt;/span&gt; &lt;span class="op"&gt;&lt;span style="color:#ff0000;"&gt;-------&lt;/span&gt;&lt;/span&gt; &lt;span class="op"&gt;&lt;span style="color:#ff0000;"&gt;------&lt;/span&gt;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;&lt;span class="op"&gt;------------&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="namespace"&gt;&lt;span style="color:#8b4513;"&gt;aaclient.dll&lt;/span&gt;&lt;/span&gt; 6.1.7600.16385 (... 158208 14.07.2009 02:17:30&lt;br /&gt;accessibilitycpl... 6.1.7600.16385 (... 3745792 14.07.2009 02:34:00&lt;br /&gt;&lt;span class="namespace"&gt;&lt;span style="color:#8b4513;"&gt;ACCTRES.dll&lt;/span&gt;&lt;/span&gt; 6.1.7600.16385 (... 39424 14.07.2009 01:57:56&lt;br /&gt;(...)&lt;/div&gt;
&lt;p&gt;Here&amp;nbsp;I used &lt;strong&gt;Add-Member&lt;/strong&gt; inside the pipeline to add the script property to the file objects returned by &lt;strong&gt;dir&lt;/strong&gt;. I used the very same script block that I&amp;nbsp;used with &lt;strong&gt;Select-Object&lt;/strong&gt; except for &lt;strong&gt;one major difference&lt;/strong&gt;: when you&amp;nbsp;work with scriptproperties, replace &lt;strong&gt;$_&lt;/strong&gt; by&lt;strong&gt; $this&lt;/strong&gt;.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;The result seems to be just the same, so what is the difference compared to using &lt;strong&gt;Select-Object&lt;/strong&gt; with hashtables and scripted properties? &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;span style="text-decoration:line-through;"&gt;Huge&lt;/span&gt; Performance Benefit:&lt;/strong&gt; It is &lt;span style="text-decoration:line-through;"&gt;much&lt;/span&gt; faster.&amp;nbsp;My approach&amp;nbsp;with Select-Object &lt;strong&gt;ran 41 seconds&lt;/strong&gt;.&lt;em&gt;[and the SECOND time I ran it, it ran 3 seconds, so there is a caching effect here]&lt;/em&gt;.&amp;nbsp;This approach with &lt;strong&gt;Add-Member&lt;/strong&gt; just &lt;strong&gt;takes 1 second&lt;/strong&gt;. Thats because &lt;strong&gt;Select-Object&lt;/strong&gt; always has to copy the entire object which is a &lt;span style="text-decoration:line-through;"&gt;very&lt;/span&gt; expensive and ressource-hungry task. &lt;strong&gt;Add-Member&lt;/strong&gt; just leaves the object as-is, and just attaches the new property to it.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Methods:&lt;/strong&gt; For the same reasons, you keep the original objects and all the methods contained in them. &lt;strong&gt;Select-Object&lt;/strong&gt; removes all methods and disconnects the copied object from the real object as well, so any changes to any properties will not&amp;nbsp;do anything to&amp;nbsp;the&amp;nbsp;underlying object anymore.&lt;br /&gt;&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Add-SubProps - Enjoy and Automate!&lt;/h3&gt;
&lt;p&gt;So you now know there can be tons of useful information in subproperties, and you should use &lt;strong&gt;Add-Member&lt;/strong&gt; to make these properties&amp;nbsp;visible. But... isn&amp;#39;t&amp;nbsp;that a bit too hard? Too much code, too much to remember? Right. That&amp;#39;s why I&amp;nbsp;created a function called &lt;strong&gt;Add-SubProps&lt;/strong&gt;. &lt;/p&gt;
&lt;p&gt;All you do is pipe your objects to it and specify the subproperty you would like to append. You can do that multiple times if you want and add&amp;nbsp;the properties of a number of subobjects.&amp;nbsp;It is all automated for you, and it is fast. It even creates read/write ScriptProperties for properties that are writeable. Here is what you can do&amp;nbsp;with this function:&lt;/p&gt;
&lt;div class="pscode"&gt;PS &amp;gt; dir &lt;span class="var"&gt;&lt;span style="color:#800080;"&gt;$env:windir&lt;/span&gt;&lt;/span&gt;\system32\&lt;span class="op"&gt;&lt;span style="color:#ff0000;"&gt;*&lt;/span&gt;&lt;/span&gt;.&lt;span class="method"&gt;&lt;span style="color:#8b4513;"&gt;dll&lt;/span&gt;&lt;/span&gt; | &lt;span class="verbnoun"&gt;&lt;span style="color:#5f9ea0;"&gt;Add-SubProps&lt;/span&gt;&lt;/span&gt; VersionInfo | &lt;span class="verbnoun"&gt;&lt;span style="color:#5f9ea0;"&gt;Select-Object&lt;/span&gt;&lt;/span&gt; Name, ProductVersion, OriginalFileName, FileDescription&lt;br /&gt;&lt;br /&gt;Name ProductVersion OriginalFilename FileDescription&lt;br /&gt;&lt;span class="op"&gt;&lt;span style="color:#ff0000;"&gt;----&lt;/span&gt;&lt;/span&gt; &lt;span class="op"&gt;&lt;span style="color:#ff0000;"&gt;--------------&lt;/span&gt;&lt;/span&gt; &lt;span class="op"&gt;&lt;span style="color:#ff0000;"&gt;----------------&lt;/span&gt;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;&lt;span class="op"&gt;---------------&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="namespace"&gt;&lt;span style="color:#8b4513;"&gt;aaclient.dll&lt;/span&gt;&lt;/span&gt; 6.1.7600.16385 &lt;span class="namespace"&gt;&lt;span style="color:#8b4513;"&gt;aaclient.dll.mui&lt;/span&gt;&lt;/span&gt; Client f&amp;uuml;r Zugri...&lt;br /&gt;accessibilitycpl... 6.1.7600.16385 AccessibilityCpl... Systemsteuerung ...&lt;br /&gt;&lt;span class="namespace"&gt;&lt;span style="color:#8b4513;"&gt;ACCTRES.dll&lt;/span&gt;&lt;/span&gt; 6.1.7600.16385 &lt;span class="namespace"&gt;&lt;span style="color:#8b4513;"&gt;ACCTRES.DLL.MUI&lt;/span&gt;&lt;/span&gt; Microsoft Intern...&lt;br /&gt;&lt;span class="namespace"&gt;&lt;span style="color:#8b4513;"&gt;acledit.dll&lt;/span&gt;&lt;/span&gt; 6.1.7600.16385 &lt;span class="namespace"&gt;&lt;span style="color:#8b4513;"&gt;acledit.dll.mui&lt;/span&gt;&lt;/span&gt; Zugriffssteuerun...&lt;br /&gt;&lt;span class="namespace"&gt;&lt;span style="color:#8b4513;"&gt;aclui.dll&lt;/span&gt;&lt;/span&gt; 6.1.7600.16385 &lt;span class="namespace"&gt;&lt;span style="color:#8b4513;"&gt;aclui.dll.mui&lt;/span&gt;&lt;/span&gt; Sicherheitsdeskr...&lt;br /&gt;&lt;span class="namespace"&gt;&lt;span style="color:#8b4513;"&gt;acppage.dll&lt;/span&gt;&lt;/span&gt; 6.1.7600.16385 &lt;span class="namespace"&gt;&lt;span style="color:#8b4513;"&gt;acppage.dll.mui&lt;/span&gt;&lt;/span&gt; Shellerweiterung...&lt;br /&gt;(...)&lt;/div&gt;
&lt;p&gt;Now isn&amp;#39;t that cool? Simply by piping file objects to Add-SubProps, I was able to access all the additional properties usually only found in the &lt;strong&gt;VersionInfo&lt;/strong&gt; property.&lt;/p&gt;
&lt;p&gt;Here is the &lt;strong&gt;Add-SubProps&lt;/strong&gt; function (&lt;a target="_blank" href="http://powershell.com/cs/media/p/9383.aspx"&gt;you can download it here&lt;/a&gt;):&lt;/p&gt;
&lt;div class="pscode"&gt;&lt;span class="keyword"&gt;&lt;span style="color:#0000ff;"&gt;function&lt;/span&gt;&lt;/span&gt; &lt;span class="verbnoun"&gt;&lt;span style="color:#5f9ea0;"&gt;Add-SubProps&lt;/span&gt;&lt;/span&gt; {&lt;br /&gt;&lt;span class="keyword"&gt;&lt;span style="color:#0000ff;"&gt;param&lt;/span&gt;&lt;/span&gt;(&lt;br /&gt;&lt;span class="var"&gt;&lt;span style="color:#800080;"&gt;$prefix&lt;/span&gt;&lt;/span&gt;,&lt;br /&gt;[Parameter(ValueFromPipeline&lt;span class="op"&gt;&lt;span style="color:#ff0000;"&gt;=&lt;/span&gt;&lt;/span&gt;&lt;span class="var"&gt;&lt;span style="color:#800080;"&gt;$true&lt;/span&gt;&lt;/span&gt;)]&lt;br /&gt;&lt;span style="color:#800080;"&gt;&lt;span class="var"&gt;$object&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;)&lt;br /&gt;&lt;br /&gt;process {&lt;br /&gt;&lt;span style="color:#008000;"&gt;&lt;span class="comment"&gt;# Add tag subobject properties:&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="var"&gt;&lt;span style="color:#800080;"&gt;$props&lt;/span&gt;&lt;/span&gt; &lt;span class="op"&gt;&lt;span style="color:#ff0000;"&gt;=&lt;/span&gt;&lt;/span&gt; &lt;span class="var"&gt;&lt;span style="color:#800080;"&gt;$object&lt;/span&gt;&lt;/span&gt;.&lt;span class="var"&gt;&lt;span style="color:#800080;"&gt;$prefix&lt;/span&gt;&lt;/span&gt; | &lt;span class="verbnoun"&gt;&lt;span style="color:#5f9ea0;"&gt;Get-Member&lt;/span&gt;&lt;/span&gt; &lt;span class="modifier"&gt;&lt;span style="color:#5f9ea0;"&gt;-MemberType&lt;/span&gt;&lt;/span&gt; Property&lt;br /&gt;&lt;span class="var"&gt;&lt;span style="color:#800080;"&gt;$props&lt;/span&gt;&lt;/span&gt; | &lt;span class="verbnoun"&gt;&lt;span style="color:#5f9ea0;"&gt;ForEach-Object&lt;/span&gt;&lt;/span&gt; {&lt;br /&gt;&lt;span class="var"&gt;&lt;span style="color:#800080;"&gt;$propname&lt;/span&gt;&lt;/span&gt; &lt;span class="op"&gt;&lt;span style="color:#ff0000;"&gt;=&lt;/span&gt;&lt;/span&gt; &lt;span class="var"&gt;&lt;span style="color:#800080;"&gt;$_&lt;/span&gt;&lt;/span&gt;.&lt;span style="color:#8b4513;"&gt;&lt;span class="method"&gt;name&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="var"&gt;&lt;span style="color:#800080;"&gt;$writeable&lt;/span&gt;&lt;/span&gt; &lt;span class="op"&gt;&lt;span style="color:#ff0000;"&gt;=&lt;/span&gt;&lt;/span&gt; &lt;span class="var"&gt;&lt;span style="color:#800080;"&gt;$_&lt;/span&gt;&lt;/span&gt;.&lt;span class="method"&gt;&lt;span style="color:#8b4513;"&gt;Definition&lt;/span&gt;&lt;/span&gt; &lt;span class="op"&gt;&lt;span style="color:#ff0000;"&gt;-like&lt;/span&gt;&lt;/span&gt; &lt;span style="color:#800000;"&gt;&lt;span class="string"&gt;&amp;#39;*{get;set;}*&amp;#39;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="var"&gt;&lt;span style="color:#800080;"&gt;$getter&lt;/span&gt;&lt;/span&gt; &lt;span class="op"&gt;&lt;span style="color:#ff0000;"&gt;=&lt;/span&gt;&lt;/span&gt; [&lt;span class="optional"&gt;&lt;span style="color:#0000ff;"&gt;ScriptBlock&lt;/span&gt;&lt;/span&gt;]::&lt;span class="method"&gt;&lt;span style="color:#8b4513;"&gt;Create&lt;/span&gt;&lt;/span&gt;((&lt;span class="string"&gt;&lt;span style="color:#800000;"&gt;&amp;#39;$this.{0}.{1}&amp;#39;&lt;/span&gt;&lt;/span&gt; &lt;span class="op"&gt;&lt;span style="color:#ff0000;"&gt;-f&lt;/span&gt;&lt;/span&gt; &lt;span class="var"&gt;&lt;span style="color:#800080;"&gt;$prefix&lt;/span&gt;&lt;/span&gt;,&lt;span class="var"&gt;&lt;span style="color:#800080;"&gt;$propname&lt;/span&gt;&lt;/span&gt;))&lt;br /&gt;&lt;span class="keyword"&gt;&lt;span style="color:#0000ff;"&gt;if&lt;/span&gt;&lt;/span&gt; (&lt;span class="var"&gt;&lt;span style="color:#800080;"&gt;$writeable&lt;/span&gt;&lt;/span&gt;) {&lt;br /&gt;&lt;span class="var"&gt;&lt;span style="color:#800080;"&gt;$setter&lt;/span&gt;&lt;/span&gt; &lt;span class="op"&gt;&lt;span style="color:#ff0000;"&gt;=&lt;/span&gt;&lt;/span&gt; [&lt;span class="optional"&gt;&lt;span style="color:#0000ff;"&gt;ScriptBlock&lt;/span&gt;&lt;/span&gt;]::&lt;span class="method"&gt;&lt;span style="color:#8b4513;"&gt;Create&lt;/span&gt;&lt;/span&gt;((&lt;span class="string"&gt;&lt;span style="color:#800000;"&gt;&amp;#39;param(${1}) $this.{0}.{1} = ${1}&amp;#39;&lt;/span&gt;&lt;/span&gt; &lt;span class="op"&gt;&lt;span style="color:#ff0000;"&gt;-f&lt;/span&gt;&lt;/span&gt; &lt;span class="var"&gt;&lt;span style="color:#800080;"&gt;$prefix&lt;/span&gt;&lt;/span&gt;,&lt;span class="var"&gt;&lt;span style="color:#800080;"&gt;$propname&lt;/span&gt;&lt;/span&gt;))&lt;br /&gt;try {&lt;br /&gt;&lt;span class="var"&gt;&lt;span style="color:#800080;"&gt;$object&lt;/span&gt;&lt;/span&gt; &lt;span class="op"&gt;&lt;span style="color:#ff0000;"&gt;=&lt;/span&gt;&lt;/span&gt; &lt;span class="var"&gt;&lt;span style="color:#800080;"&gt;$object&lt;/span&gt;&lt;/span&gt; | &lt;span class="verbnoun"&gt;&lt;span style="color:#5f9ea0;"&gt;Add-Member&lt;/span&gt;&lt;/span&gt; &lt;span class="modifier"&gt;&lt;span style="color:#5f9ea0;"&gt;-MemberType&lt;/span&gt;&lt;/span&gt; ScriptProperty &lt;span class="modifier"&gt;&lt;span style="color:#5f9ea0;"&gt;-Name&lt;/span&gt;&lt;/span&gt; &lt;span class="var"&gt;&lt;span style="color:#800080;"&gt;$propname&lt;/span&gt;&lt;/span&gt; &lt;span class="modifier"&gt;&lt;span style="color:#5f9ea0;"&gt;-Value&lt;/span&gt;&lt;/span&gt; &lt;span class="var"&gt;&lt;span style="color:#800080;"&gt;$getter&lt;/span&gt;&lt;/span&gt; &lt;span class="modifier"&gt;&lt;span style="color:#5f9ea0;"&gt;-SecondValue&lt;/span&gt;&lt;/span&gt; &lt;span class="var"&gt;&lt;span style="color:#800080;"&gt;$setter&lt;/span&gt;&lt;/span&gt; &lt;span class="modifier"&gt;&lt;span style="color:#5f9ea0;"&gt;-ea&lt;/span&gt;&lt;/span&gt; Stop &lt;span style="color:#5f9ea0;"&gt;&lt;span class="modifier"&gt;-passthru&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;} catch {}&lt;br /&gt;} &lt;span class="keyword"&gt;&lt;span style="color:#0000ff;"&gt;else&lt;/span&gt;&lt;/span&gt; {&lt;br /&gt;try {&lt;br /&gt;&lt;span class="var"&gt;&lt;span style="color:#800080;"&gt;$object&lt;/span&gt;&lt;/span&gt; &lt;span class="op"&gt;&lt;span style="color:#ff0000;"&gt;=&lt;/span&gt;&lt;/span&gt; &lt;span class="var"&gt;&lt;span style="color:#800080;"&gt;$object&lt;/span&gt;&lt;/span&gt; | &lt;span class="verbnoun"&gt;&lt;span style="color:#5f9ea0;"&gt;Add-Member&lt;/span&gt;&lt;/span&gt; &lt;span class="modifier"&gt;&lt;span style="color:#5f9ea0;"&gt;-MemberType&lt;/span&gt;&lt;/span&gt; ScriptProperty &lt;span class="modifier"&gt;&lt;span style="color:#5f9ea0;"&gt;-Name&lt;/span&gt;&lt;/span&gt; &lt;span class="var"&gt;&lt;span style="color:#800080;"&gt;$propname&lt;/span&gt;&lt;/span&gt; &lt;span class="modifier"&gt;&lt;span style="color:#5f9ea0;"&gt;-Value&lt;/span&gt;&lt;/span&gt; &lt;span class="var"&gt;&lt;span style="color:#800080;"&gt;$getter&lt;/span&gt;&lt;/span&gt; &lt;span class="modifier"&gt;&lt;span style="color:#5f9ea0;"&gt;-ea&lt;/span&gt;&lt;/span&gt; Stop &lt;span style="color:#5f9ea0;"&gt;&lt;span class="modifier"&gt;-passthru&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;} catch {}&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;span style="color:#800080;"&gt;&lt;span class="var"&gt;$object&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;}&amp;acute;&lt;br /&gt;}&lt;/div&gt;
&lt;p&gt;If you read my post about &lt;a target="_blank" href="http://powershell.com/cs/blogs/tobias/archive/2011/02/07/reading-and-writing-mpeg-tags-and-attributes-part-2.aspx"&gt;reading and writing MPEG3 tags&lt;/a&gt;, you now know how the module magic was done. The module loaded the DLL that made the functionality available, and then &lt;strong&gt;Add-SubProps&lt;/strong&gt; was used to compose the MPEG3 media objects with all their rich information. Since Add-SubProps leaves the original object untouched and adds read/write script properties, you were able to not just only read audio and video tags, but also change them and save them.&lt;/p&gt;
&lt;p&gt;Add-SubProps is extremely valuable as you will see. For example, when you manage virtual machines with VMWare, Get-VM gets you objects that keep the interesting parts of your virtual machines in objects found in subproperties. You can now easily make them visible. Hope you had fun, see you next week around...&lt;/p&gt;
&lt;p&gt;Tobias&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Microsoft MVP PowerShell Germany&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;P.S.&lt;br /&gt;If you live in Germany or other parts of Europe and your company would like to set up a truly great PowerShell training, just contact me! I regularly train mid- to large-size companies. Trainings are always a blast with tons of real-world-examples and solutions. Here&amp;#39;s how to get in touch with me: &lt;a href="mailto:tobias.weltner@scriptinternals.de"&gt;&lt;span style="color:#3366cc;"&gt;tobias.weltner@scriptinternals.de&lt;/span&gt;&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://powershell.com/cs/aggbug.aspx?PostID=9384" width="1" height="1"&gt;</description><category domain="http://powershell.com/cs/blogs/tobias/archive/tags/Select-Object/default.aspx">Select-Object</category><category domain="http://powershell.com/cs/blogs/tobias/archive/tags/performance/default.aspx">performance</category><category domain="http://powershell.com/cs/blogs/tobias/archive/tags/ScriptProperty/default.aspx">ScriptProperty</category><category domain="http://powershell.com/cs/blogs/tobias/archive/tags/Properties/default.aspx">Properties</category><category domain="http://powershell.com/cs/blogs/tobias/archive/tags/Add-Props/default.aspx">Add-Props</category><category domain="http://powershell.com/cs/blogs/tobias/archive/tags/Add-Member/default.aspx">Add-Member</category></item><item><title>XML Part 1: Playing with RSS Feeds and XML Content</title><link>http://powershell.com/cs/blogs/tobias/archive/2009/01/17/xml-part-1-playing-with-rss-feeds-and-xml-content.aspx</link><pubDate>Sat, 17 Jan 2009 09:37:00 GMT</pubDate><guid isPermaLink="false">f421715f-7aba-45f0-8a8d-44de5318a3a7:900</guid><dc:creator>Tobias Weltner</dc:creator><slash:comments>3</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://powershell.com/cs/blogs/tobias/rsscomments.aspx?PostID=900</wfw:commentRss><comments>http://powershell.com/cs/blogs/tobias/archive/2009/01/17/xml-part-1-playing-with-rss-feeds-and-xml-content.aspx#comments</comments><description>&lt;p&gt;A lot of data these days is wrapped as XML, and up until now, handling XML data wasn&amp;#39;t a piece of cake. PowerShell makes handling XML a lot easier. This is the first part of a little series about XML and PowerShell. We start with accessing XML documents and reading data.&lt;/p&gt;
&lt;h2&gt;Getting XML Data&lt;/h2&gt;
&lt;p&gt;Let&amp;#39;s first look how PowerShell can lay hands on XML data. One way is to create a new and empty XML document:&lt;/p&gt;
&lt;div class="listing"&gt;
&lt;pre&gt;&lt;span class="var"&gt;$xml&lt;/span&gt; &lt;span class="op"&gt;=&lt;/span&gt; &lt;span class="verbnoun"&gt;New-Object&lt;/span&gt; &lt;span class="datatype"&gt;XML&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;Next, you can use your new XML document to load XML data, either from a local file or from the Internet. Use the &lt;strong&gt;Load()&lt;/strong&gt; method. Let&amp;#39;s for example load the &lt;a target="_blank" href="http://www.powershell.com"&gt;www.powershell.com&lt;/a&gt; RSS ticker:&lt;/p&gt;
&lt;div style="font-family:&amp;#39;Courier New&amp;#39;;font-size:12;background:#012456;"&gt;&lt;span style="color:#eeedf0;background-color:#012456;"&gt;PS&amp;gt;&amp;nbsp;$a&amp;nbsp;=&amp;nbsp;New-Object&amp;nbsp;XML&lt;br /&gt;PS&amp;gt;&amp;nbsp;$a.Load(&amp;quot;http://powershell.com/cs/blogs/MainFeed.aspx&amp;quot;)&lt;br /&gt;PS&amp;gt;&amp;nbsp;$a&lt;br /&gt;&lt;br /&gt;xml&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;xml-stylesheet&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;rss&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;--------------&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;rss&lt;br /&gt;PS&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;p&gt;As long as you have access to the Internet, these lines will download the RSS news ticker into &lt;strong&gt;$a&lt;/strong&gt; as an XML document, and when you output &lt;strong&gt;$a&lt;/strong&gt;, you see a number of properties. &lt;/p&gt;
&lt;h2&gt;Browsing XML Data&lt;/h2&gt;
&lt;p&gt;What exactly is their meaning? To find out, let&amp;#39;s first save the downloaded RSS ticker to file using the built-in &lt;strong&gt;Save()&lt;/strong&gt; method. Next, we take a look at the first lines in that XML document by reading the xml file using &lt;strong&gt;Get-Content&lt;/strong&gt; and selecting only the first 3 lines using &lt;strong&gt;Select-Object -First&lt;/strong&gt;:&lt;/p&gt;
&lt;div style="font-family:&amp;#39;Courier New&amp;#39;;font-size:12;background:#012456;"&gt;&lt;span style="color:#eeedf0;background-color:#012456;"&gt;PS&amp;gt;&amp;nbsp;$a.save(&amp;quot;$home\rssticker.xml&amp;quot;)&lt;br /&gt;PS&amp;gt;&amp;nbsp;Get-Content&amp;nbsp;$home\rssticker.xml&amp;nbsp;|&amp;nbsp;Select-Object&amp;nbsp;-first&amp;nbsp;3&lt;br /&gt;&amp;lt;?&lt;/span&gt;&lt;span style="background-color:#012456;" class="style1"&gt;&lt;strong&gt;&lt;span style="color:#00ff00;"&gt;xml&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:#eeedf0;background-color:#012456;"&gt;&lt;span style="color:#00ff00;"&gt;&amp;nbsp;&lt;/span&gt;version=&amp;quot;1.0&amp;quot;&amp;nbsp;encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;&amp;lt;?&lt;/span&gt;&lt;span style="background-color:#012456;" class="style1"&gt;&lt;strong&gt;&lt;span style="color:#00ff00;"&gt;xml-stylesheet&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:#eeedf0;background-color:#012456;"&gt;&amp;nbsp;type=&amp;quot;text/xsl&amp;quot;&amp;nbsp;href=&amp;quot;http://powershell.com/cs/utility/FeedStylesheets/rss.xsl&amp;quot;&amp;nbsp;media=&amp;quot;screen&amp;quot;&lt;br /&gt;?&amp;gt;&lt;br /&gt;&amp;lt;&lt;/span&gt;&lt;span style="background-color:#012456;" class="style1"&gt;&lt;strong&gt;&lt;span style="color:#00ff00;"&gt;rss&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:#eeedf0;background-color:#012456;"&gt;&amp;nbsp;version=&amp;quot;2.0&amp;quot;&amp;nbsp;xmlns:dc=&amp;quot;http://purl.org/dc/elements/1.1/&amp;quot;&amp;nbsp;xmlns:slash=&amp;quot;http://purl.org/rss/1.0/modules/sla&lt;br /&gt;sh/&amp;quot;&amp;nbsp;xmlns:wfw=&amp;quot;http://wellformedweb.org/CommentAPI/&amp;quot;&amp;nbsp;xmlns:itunes=&amp;quot;http://www.itunes.com/dtds/podcast-1.0.dtd&amp;quot;&lt;br /&gt;&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;p&gt;As it turns out, the PowerShell xml document in $a returns the top XML nodes: &lt;strong&gt;xml&lt;/strong&gt;, &lt;strong&gt;xml-stylesheet&lt;/strong&gt; and &lt;strong&gt;rss&lt;/strong&gt;. Diving into nested information inside an XML document is very easy because it works in pretty much the same way as with objects. So if you&amp;#39;d like to see all the nodes below the root node &lt;strong&gt;rss&lt;/strong&gt;, you use the &lt;strong&gt;rss&lt;/strong&gt; property:&lt;/p&gt;
&lt;div style="font-family:&amp;#39;Courier New&amp;#39;;font-size:12;background:#012456;"&gt;&lt;span style="color:#eeedf0;background-color:#012456;"&gt;PS&amp;gt;&amp;nbsp;$a.rss&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;version&amp;nbsp;:&amp;nbsp;2.0&lt;br /&gt;dc&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;:&amp;nbsp;http://purl.org/dc/elements/1.1/&lt;br /&gt;slash&amp;nbsp;&amp;nbsp;&amp;nbsp;:&amp;nbsp;http://purl.org/rss/1.0/modules/slash/&lt;br /&gt;wfw&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;:&amp;nbsp;http://wellformedweb.org/CommentAPI/&lt;br /&gt;itunes&amp;nbsp;&amp;nbsp;:&amp;nbsp;http://www.itunes.com/dtds/podcast-1.0.dtd&lt;br /&gt;channel&amp;nbsp;:&amp;nbsp;channel&lt;br /&gt;&lt;br /&gt;PS&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;p&gt;Again, if you&amp;#39;d looked at the raw XML data, you would see that the RSS node has these children: &lt;strong&gt;version&lt;/strong&gt;, &lt;strong&gt;dc&lt;/strong&gt;, &lt;strong&gt;slash&lt;/strong&gt;, &lt;strong&gt;wfw&lt;/strong&gt;, &lt;strong&gt;itunes&lt;/strong&gt; and &lt;strong&gt;channel&lt;/strong&gt;. Most of these are attributes with pieces of information. &lt;strong&gt;Channel&lt;/strong&gt; however is another parent node and has a bunch of children. To look at the children, again use this property name:&lt;/p&gt;
&lt;div style="font-family:&amp;#39;Courier New&amp;#39;;font-size:12;background:#012456;"&gt;&lt;span style="color:#eeedf0;background-color:#012456;"&gt;PS&amp;gt;&amp;nbsp;$a.rss.channel&lt;br /&gt;&lt;/span&gt;&lt;span style="color:#ff0000;background-color:#012456;"&gt;format-default&amp;nbsp;:&amp;nbsp;The&amp;nbsp;member&amp;nbsp;&amp;quot;Item&amp;quot;&amp;nbsp;is&amp;nbsp;already&amp;nbsp;present.&lt;/span&gt;&lt;span style="color:#eeedf0;background-color:#012456;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;h2&gt;Property Name Conflict - And A Simple Workaround&lt;/h2&gt;
&lt;p&gt;&lt;em&gt;Bang!&lt;/em&gt; You get a red error message. You cannot list the children inside the channel parent node. This is a bug, or rather, a conceptional weakness in design. &lt;/p&gt;
&lt;p&gt;If you look at the raw XML data, you will see that the &lt;strong&gt;channel&lt;/strong&gt; node contains a bunch of &lt;strong&gt;item&lt;/strong&gt; nodes, and these &lt;strong&gt;item&lt;/strong&gt; nodes are the ones with the interesting stuff: the feed messages. Unfortunately, the XML document object already has its own &lt;strong&gt;item&lt;/strong&gt; property. The moment PowerShell tries to add the &lt;strong&gt;item&lt;/strong&gt; property for the &lt;strong&gt;item&lt;/strong&gt; children, you get the error message. An object cannot have two properties with the same name. &lt;/p&gt;
&lt;p&gt;And here is the workaround: work in &amp;quot;blind&amp;quot; mode and just assume the children elements are named &amp;quot;item&amp;quot; (or whatever the error message indicates):&lt;/p&gt;
&lt;div style="font-family:&amp;#39;Courier New&amp;#39;;font-size:12;background:#012456;"&gt;&lt;span style="color:#eeedf0;background-color:#012456;"&gt;PS&amp;gt;&amp;nbsp;$a.rss.channel.item&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;title&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;:&amp;nbsp;Group&amp;nbsp;Policy&amp;nbsp;Cmdlets&amp;nbsp;in&amp;nbsp;Windows&amp;nbsp;7&lt;br /&gt;link&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;:&amp;nbsp;http://powershell.com/cs/blogs/windows-powershell-team/archive/2009/01/16/group-policy-cmdlets-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;-windows-7.aspx&lt;br /&gt;pubDate&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;:&amp;nbsp;Sat,&amp;nbsp;17&amp;nbsp;Jan&amp;nbsp;2009&amp;nbsp;04:46:08&amp;nbsp;GMT&lt;br /&gt;guid&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;:&amp;nbsp;guid&lt;br /&gt;creator&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;:&amp;nbsp;Windows&amp;nbsp;PowerShell&amp;nbsp;Blog&lt;br /&gt;comments&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;:&amp;nbsp;0&lt;br /&gt;description&amp;nbsp;:&amp;nbsp;Lilia&amp;nbsp;Gutnik&amp;nbsp;has&amp;nbsp;posted&amp;nbsp;a&amp;nbsp;blog&amp;nbsp;entry&amp;nbsp;HERE&amp;nbsp;showing&amp;nbsp;an&amp;nbsp;example&amp;nbsp;of&amp;nbsp;the&amp;nbsp;Windows&amp;nbsp;7&amp;nbsp;Group&amp;nbsp;Policy&amp;nbsp;cmdlet&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;s.&amp;amp;#160;&amp;nbsp;Check&amp;nbsp;it&amp;nbsp;out.&amp;nbsp;&amp;amp;#160;&amp;nbsp;Experiment!&amp;amp;#160;&amp;nbsp;Enjoy!&amp;amp;#160;&amp;nbsp;Engage!&amp;nbsp;Jeffrey&amp;nbsp;Snover&amp;nbsp;[MSFT]&amp;nbsp;Window&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;s&amp;nbsp;Management&amp;nbsp;Partner&amp;nbsp;Architect&amp;nbsp;Visit&amp;nbsp;the&amp;nbsp;Windows&amp;nbsp;PowerShell&amp;nbsp;Team&amp;nbsp;blog&amp;nbsp;at:&amp;amp;#160;&amp;amp;#160;&amp;amp;#160;&amp;nbsp;http:&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;//blogs.msdn.com/PowerShell&amp;nbsp;Visit&amp;nbsp;the&amp;nbsp;Windows&amp;nbsp;PowerShell&amp;nbsp;ScriptCenter&amp;nbsp;at:&amp;amp;#160;&amp;nbsp;http://www.micros&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;oft.com/technet&amp;nbsp;Read&amp;nbsp;More......(&amp;lt;a&amp;nbsp;href=&amp;quot;http://powershell.com/cs/blogs/windows-powershell-team/a&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;rchive/2009/01/16/group-policy-cmdlets-in-windows-7.aspx&amp;quot;&amp;gt;read&amp;nbsp;more&amp;lt;/a&amp;gt;)&amp;lt;img&amp;nbsp;src=&amp;quot;http://powershe&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;ll.com/cs/aggbug.aspx?PostID=899&amp;quot;&amp;nbsp;width=&amp;quot;1&amp;quot;&amp;nbsp;height=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;&lt;br /&gt;title&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;:&amp;nbsp;Jeffrey&amp;nbsp;Snover&amp;nbsp;and&amp;nbsp;Bruce&amp;nbsp;Payette&amp;nbsp;on&amp;nbsp;the&amp;nbsp;PowerScripting&amp;nbsp;Podcast&lt;br /&gt;link&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;:&amp;nbsp;http://powershell.com/cs/blogs/under-the-stairs/archive/2009/01/16/jeffrey-snover-and-bruce-payet&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;te-on-the-powerscripting-podcast.aspx&lt;br /&gt;pubDate&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;:&amp;nbsp;Fri,&amp;nbsp;16&amp;nbsp;Jan&amp;nbsp;2009&amp;nbsp;14:35:00&amp;nbsp;GMT&lt;br /&gt;guid&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;:&amp;nbsp;guid&lt;br /&gt;creator&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;:&amp;nbsp;Under&amp;nbsp;The&amp;nbsp;Stairs&lt;br /&gt;comments&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;:&amp;nbsp;0&lt;br /&gt;description&amp;nbsp;:&amp;nbsp;I&amp;nbsp;love&amp;nbsp;downloading&amp;nbsp;podcasts&amp;nbsp;to&amp;nbsp;my&amp;nbsp;Zune&amp;nbsp;and&amp;nbsp;listening&amp;nbsp;to&amp;nbsp;them&amp;nbsp;as&amp;nbsp;I&amp;nbsp;travel.&amp;nbsp;I ve&amp;nbsp;got&amp;nbsp;a&amp;nbsp;bit&amp;nbsp;of&amp;nbsp;a&amp;nbsp;bac&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;klog,&amp;nbsp;but&amp;nbsp;one&amp;nbsp;I ve&amp;nbsp;just&amp;nbsp;downloaded&amp;nbsp;and&amp;nbsp;will&amp;nbsp;be&amp;nbsp;listening&amp;nbsp;to&amp;nbsp;shortly&amp;nbsp;(possibly&amp;nbsp;tomorrow&amp;nbsp;as&amp;nbsp;I&amp;nbsp;head&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;from&amp;nbsp;Milan&amp;nbsp;back&amp;nbsp;to&amp;nbsp;London)&amp;nbsp;is&amp;nbsp;the&amp;nbsp;PowerScripting&amp;nbsp;Podcast&amp;nbsp;Read&amp;nbsp;More......(&amp;lt;a&amp;nbsp;href=&amp;quot;http://powershe&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;ll.com/cs/blogs/under-the-stairs/archive/2009/01/16/jeffrey-snover-and-bruce-payette-on-the-power&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;scripting-podcast.aspx&amp;quot;&amp;gt;read&amp;nbsp;more&amp;lt;/a&amp;gt;)&amp;lt;img&amp;nbsp;src=&amp;quot;http://powershell.com/cs/aggbug.aspx?PostID=898&amp;quot;&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;width=&amp;quot;1&amp;quot;&amp;nbsp;height=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;category&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;:&amp;nbsp;{category,&amp;nbsp;category}&lt;br /&gt;&lt;br /&gt;title&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;:&amp;nbsp;How&amp;nbsp;To&amp;nbsp;Make&amp;nbsp;Your&amp;nbsp;Own&amp;nbsp;Module&amp;nbsp;Repository&lt;br /&gt;link&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;:&amp;nbsp;http://powershell.com/cs/blogs/windows-powershell-team/archive/2009/01/16/how-to-make-your-own-mo&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;dule-repository.aspx&lt;br /&gt;pubDate&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;:&amp;nbsp;Fri,&amp;nbsp;16&amp;nbsp;Jan&amp;nbsp;2009&amp;nbsp;08:52:13&amp;nbsp;GMT&lt;br /&gt;guid&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;:&amp;nbsp;guid&lt;br /&gt;creator&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;:&amp;nbsp;Windows&amp;nbsp;PowerShell&amp;nbsp;Blog&lt;br /&gt;comments&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;:&amp;nbsp;0&lt;br /&gt;description&amp;nbsp;:&amp;nbsp;Andy&amp;nbsp;Schneider&amp;nbsp;(from&amp;nbsp;Get-PowerShell.com&amp;nbsp;)&amp;nbsp;recently&amp;nbsp;asked&amp;nbsp;me&amp;nbsp;how&amp;nbsp;he&amp;nbsp;could&amp;nbsp;make&amp;nbsp;sure&amp;nbsp;that&amp;nbsp;everyone&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;at&amp;nbsp;Avanade&amp;nbsp;could&amp;nbsp;get&amp;nbsp;a&amp;nbsp;consistent&amp;nbsp;set&amp;nbsp;of&amp;nbsp;modules.&amp;nbsp;I&amp;nbsp;run&amp;nbsp;into&amp;nbsp;a&amp;nbsp;somewhat&amp;nbsp;similar&amp;nbsp;problem&amp;nbsp;here&amp;nbsp;at&amp;nbsp;M&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;icrosoft,&amp;nbsp;where&amp;nbsp;I&amp;nbsp;want&amp;nbsp;to&amp;nbsp;take&amp;nbsp;scripts&amp;nbsp;I&amp;amp;#39;ve&amp;nbsp;built&amp;nbsp;to&amp;nbsp;work&amp;nbsp;with&amp;nbsp;internal&amp;nbsp;applications&amp;nbsp;and&amp;nbsp;make&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;them&amp;nbsp;easy&amp;nbsp;for&amp;nbsp;people&amp;nbsp;to&amp;nbsp;use,&amp;nbsp;even&amp;nbsp;if&amp;nbsp;they&amp;amp;#39;re&amp;nbsp;not&amp;nbsp;already&amp;nbsp;using&amp;nbsp;PowerShell.&amp;nbsp;I&amp;nbsp;don&amp;amp;#39;t&amp;nbsp;want&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;the&amp;nbsp;scripts&amp;nbsp;to&amp;nbsp;Read&amp;nbsp;More......(&amp;lt;a&amp;nbsp;href=&amp;quot;http://powershell.com/cs/blogs/windows-powershell-team/ar&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;chive/2009/01/16/how-to-make-your-own-module-repository.aspx&amp;quot;&amp;gt;read&amp;nbsp;more&amp;lt;/a&amp;gt;)&amp;lt;img&amp;nbsp;src=&amp;quot;http://powe&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;rshell.com/cs/aggbug.aspx?PostID=895&amp;quot;&amp;nbsp;width=&amp;quot;1&amp;quot;&amp;nbsp;height=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;category&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;:&amp;nbsp;{category,&amp;nbsp;category}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;(...)&lt;/span&gt;&lt;/div&gt;
&lt;p&gt;Now you get to the good stuff! These are the headlines you&amp;#39;re after. &lt;/p&gt;
&lt;h1&gt;Using The PowerShell Pipeline&lt;/h1&gt;
&lt;p&gt;You just learned that you can access any RSS feed in the world by loading it into a new and empty XML document. &lt;/p&gt;
&lt;p&gt;Since RSS feeds are XML documents and adhere to a defined format, you can always list all RSS messages by looking at the &lt;strong&gt;RSS.Channel.Item property&lt;/strong&gt;. This returns all raw data contained in the individual RSS items. From here, simply use PowerShell Pipeline tricks to filter what you are looking for.&lt;/p&gt;
&lt;p&gt;First, I&amp;#39;d like to filter the information. I only want to see the blog entry title and the link. Easy: use &lt;strong&gt;Format-Table&lt;/strong&gt;:&lt;/p&gt;
&lt;div style="font-family:&amp;#39;Courier New&amp;#39;;font-size:12;background:#012456;"&gt;&lt;span style="color:#eeedf0;background-color:#012456;"&gt;PS&amp;gt;&amp;nbsp;$a&amp;nbsp;=&amp;nbsp;New-Object&amp;nbsp;XML&lt;br /&gt;PS&amp;gt;&amp;nbsp;$a.Load(&amp;quot;http://powershell.com/cs/blogs/MainFeed.aspx&amp;quot;)&lt;br /&gt;PS&amp;gt;&amp;nbsp;$a.rss.channel.item&amp;nbsp;|&amp;nbsp;Format-Table&amp;nbsp;Title,&amp;nbsp;Link&lt;br /&gt;&lt;br /&gt;title&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;link&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;br /&gt;Group&amp;nbsp;Policy&amp;nbsp;Cmdlets&amp;nbsp;in&amp;nbsp;Windows&amp;nbsp;7&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;http://powershell.com/cs/blogs/windows-powershell-te...&lt;br /&gt;Jeffrey&amp;nbsp;Snover&amp;nbsp;and&amp;nbsp;Bruce&amp;nbsp;Payette&amp;nbsp;on&amp;nbsp;the&amp;nbsp;PowerScripti...&amp;nbsp;http://powershell.com/cs/blogs/under-the-stairs/arch...&lt;br /&gt;How&amp;nbsp;To&amp;nbsp;Make&amp;nbsp;Your&amp;nbsp;Own&amp;nbsp;Module&amp;nbsp;Repository&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;http://powershell.com/cs/blogs/windows-powershell-te...&lt;br /&gt;Please&amp;nbsp;Join&amp;nbsp;Me&amp;nbsp;for&amp;nbsp;a&amp;nbsp;Power&amp;nbsp;Scripting&amp;nbsp;Podcast&amp;nbsp;Tonight...&amp;nbsp;http://powershell.com/cs/blogs/windows-powershell-te...&lt;br /&gt;Running&amp;nbsp;PowerShell&amp;nbsp;Scripts&amp;nbsp;via&amp;nbsp;Email&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;http://powershell.com/cs/blogs/under-the-stairs/arch...&lt;br /&gt;Date&amp;nbsp;and&amp;nbsp;Time&amp;nbsp;in&amp;nbsp;PowerShell&amp;nbsp;(and&amp;nbsp;WMI)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;http://powershell.com/cs/blogs/under-the-stairs/arch...&lt;br /&gt;Date&amp;nbsp;and&amp;nbsp;Time&amp;nbsp;in&amp;nbsp;PowerShell&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;http://powershell.com/cs/blogs/powershell-scripts/ar...&lt;br /&gt;Windows&amp;nbsp;7&amp;nbsp;Troubleshooting&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;http://powershell.com/cs/blogs/windows-powershell-te...&lt;br /&gt;Podcast&amp;nbsp;Discussing&amp;nbsp;WSMAN&amp;nbsp;1/14/2008&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;http://powershell.com/cs/blogs/windows-powershell-te...&lt;br /&gt;Get-UpTime.ps1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;http://powershell.com/cs/blogs/powershell-scripts/ar...&lt;br /&gt;Interactive&amp;nbsp;remoting&amp;nbsp;in&amp;nbsp;CTP3&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;http://powershell.com/cs/blogs/windows-powershell-te...&lt;br /&gt;How&amp;nbsp;to&amp;nbsp;copy&amp;nbsp;colorized&amp;nbsp;script&amp;nbsp;from&amp;nbsp;PowerShell&amp;nbsp;ISE&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;http://powershell.com/cs/blogs/windows-powershell-te...&lt;br /&gt;Please&amp;nbsp;Give&amp;nbsp;Us&amp;nbsp;Feedback&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;http://powershell.com/cs/blogs/windows-powershell-te...&lt;br /&gt;Blogging&amp;nbsp;in&amp;nbsp;2008&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;http://powershell.com/cs/blogs/under-the-stairs/arch...&lt;br /&gt;V2&amp;nbsp;Blog&amp;nbsp;Entries&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;http://powershell.com/cs/blogs/windows-powershell-te...&lt;br /&gt;Copy&amp;nbsp;console&amp;nbsp;screen&amp;nbsp;to&amp;nbsp;system&amp;nbsp;clipboard&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;http://powershell.com/cs/blogs/windows-powershell-te...&lt;br /&gt;Get-Screensaver.ps1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;http://powershell.com/cs/blogs/powershell-scripts/ar...&lt;br /&gt;Colorized&amp;nbsp;capture&amp;nbsp;of&amp;nbsp;console&amp;nbsp;screen&amp;nbsp;in&amp;nbsp;HTML&amp;nbsp;and&amp;nbsp;RTF.&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;http://powershell.com/cs/blogs/windows-powershell-te...&lt;br /&gt;Finding&amp;nbsp;a&amp;nbsp;URL&amp;nbsp;For&amp;nbsp;File&amp;nbsp;Transfer&amp;nbsp;Cmdlets&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;http://powershell.com/cs/blogs/windows-powershell-te...&lt;br /&gt;Transferring&amp;nbsp;(Large)&amp;nbsp;Files&amp;nbsp;Using&amp;nbsp;BITs&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;http://powershell.com/cs/blogs/windows-powershell-te...&lt;br /&gt;Test-PSCmdlet&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;http://powershell.com/cs/blogs/windows-powershell-te...&lt;br /&gt;Capture&amp;nbsp;console&amp;nbsp;screen&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;http://powershell.com/cs/blogs/windows-powershell-te...&lt;br /&gt;Get-Hash2.ps1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;http://powershell.com/cs/blogs/powershell-scripts/ar...&lt;br /&gt;PowerShell&amp;nbsp;as&amp;nbsp;Inventory&amp;nbsp;Tool&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;http://powershell.com/cs/blogs/windows-powershell-te...&lt;br /&gt;Windows&amp;nbsp;7&amp;nbsp;Beta&amp;nbsp;Has&amp;nbsp;Arrived&amp;nbsp; &amp;nbsp;But&amp;nbsp;Not&amp;nbsp;For&amp;nbsp;Everyone&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;http://powershell.com/cs/blogs/under-the-stairs/arch...&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;p&gt;Next, I only want the top 5 entries, and I do not want the link to be cut off. So I insert a &lt;strong&gt;Select-Object -First&lt;/strong&gt; (remember, the &lt;strong&gt;Format&lt;/strong&gt; cmdlets always have to be the last element in your pipeline), and I add a&lt;strong&gt; -wrap&lt;/strong&gt; parameter to &lt;strong&gt;Format-Table&lt;/strong&gt;:&lt;/p&gt;
&lt;div style="font-family:&amp;#39;Courier New&amp;#39;;font-size:12;background:#012456;"&gt;&lt;span style="color:#eeedf0;background-color:#012456;"&gt;PS&amp;gt;&amp;nbsp;$a.rss.channel.item&amp;nbsp;|&amp;nbsp;Select-Object&amp;nbsp;-first&amp;nbsp;5&amp;nbsp;|&amp;nbsp;Format-Table&amp;nbsp;Title,&amp;nbsp;Link&amp;nbsp;-wrap&lt;br /&gt;&lt;br /&gt;title&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;link&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;br /&gt;Group&amp;nbsp;Policy&amp;nbsp;Cmdlets&amp;nbsp;in&amp;nbsp;Windows&amp;nbsp;7&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;http://powershell.com/cs/blogs/windows-powershell-team/&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;archive/2009/01/16/group-policy-cmdlets-in-windows-7.as&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;px&lt;br /&gt;Jeffrey&amp;nbsp;Snover&amp;nbsp;and&amp;nbsp;Bruce&amp;nbsp;Payette&amp;nbsp;on&amp;nbsp;the&amp;nbsp;PowerScripting&amp;nbsp;&amp;nbsp;http://powershell.com/cs/blogs/under-the-stairs/archive&lt;br /&gt;Podcast&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;/2009/01/16/jeffrey-snover-and-bruce-payette-on-the-pow&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;erscripting-podcast.aspx&lt;br /&gt;How&amp;nbsp;To&amp;nbsp;Make&amp;nbsp;Your&amp;nbsp;Own&amp;nbsp;Module&amp;nbsp;Repository&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;http://powershell.com/cs/blogs/windows-powershell-team/&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;archive/2009/01/16/how-to-make-your-own-module-reposito&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ry.aspx&lt;br /&gt;Please&amp;nbsp;Join&amp;nbsp;Me&amp;nbsp;for&amp;nbsp;a&amp;nbsp;Power&amp;nbsp;Scripting&amp;nbsp;Podcast&amp;nbsp;Tonight&amp;nbsp;@&amp;nbsp;&amp;nbsp;http://powershell.com/cs/blogs/windows-powershell-team/&lt;br /&gt;9PM&amp;nbsp;EST&amp;nbsp;(6PM&amp;nbsp;PST)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;archive/2009/01/15/please-join-me-for-a-power-scripting&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-podcast-tonight-9pm-est-6pm-pst.aspx&lt;br /&gt;Running&amp;nbsp;PowerShell&amp;nbsp;Scripts&amp;nbsp;via&amp;nbsp;Email&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;http://powershell.com/cs/blogs/under-the-stairs/archive&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;/2009/01/15/running-powershell-scripts-via-email.aspx&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;p&gt;Can I filter based on topic, too? Sure thing. If you are interested in Windows 7, the upcoming new Windows client, and you&amp;#39;d like to see only blogs about Windows 7, then add a &lt;strong&gt;Where-Object&lt;/strong&gt; into your pipeline. &lt;/p&gt;
&lt;p&gt;Inside of it, the&lt;strong&gt; $_&lt;/strong&gt; placeholder represents the actual blog entry as it is running over the pipeline, and you then can check whether the title property contains one or more keywords. &lt;/p&gt;
&lt;div style="font-family:&amp;#39;Courier New&amp;#39;;font-size:12;background:#012456;"&gt;&lt;span style="color:#eeedf0;background-color:#012456;"&gt;PS&amp;gt;&amp;nbsp;$a.rss.channel.item&amp;nbsp;|&amp;nbsp;Where-Object&amp;nbsp;{&amp;nbsp;$_.Title&amp;nbsp;-like&amp;nbsp;&amp;#39;*Windows&amp;nbsp;7*&amp;#39;&amp;nbsp;}&amp;nbsp;|&amp;nbsp;Format-Table&amp;nbsp;Title,&amp;nbsp;Description&lt;br /&gt;&lt;br /&gt;title&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;description&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;br /&gt;Group&amp;nbsp;Policy&amp;nbsp;Cmdlets&amp;nbsp;in&amp;nbsp;Windows&amp;nbsp;7&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Lilia&amp;nbsp;Gutnik&amp;nbsp;has&amp;nbsp;posted&amp;nbsp;a&amp;nbsp;blog&amp;nbsp;entry&amp;nbsp;HERE&amp;nbsp;showing&amp;nbsp;an...&lt;br /&gt;Windows&amp;nbsp;7&amp;nbsp;Troubleshooting&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Windows&amp;nbsp;7&amp;nbsp;has&amp;nbsp;a&amp;nbsp;cool&amp;nbsp;new&amp;nbsp;extensible&amp;nbsp;troubleshooting&amp;nbsp;...&lt;br /&gt;Windows&amp;nbsp;7&amp;nbsp;Beta&amp;nbsp;Has&amp;nbsp;Arrived&amp;nbsp; &amp;nbsp;But&amp;nbsp;Not&amp;nbsp;For&amp;nbsp;Everyone&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;The&amp;nbsp;Windows&amp;nbsp;7&amp;nbsp;and&amp;nbsp;Windows&amp;nbsp;Server&amp;nbsp;2008&amp;nbsp;R2&amp;nbsp;beta&amp;nbsp;versio...&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;p&gt;Maybe you&amp;#39;d like to output this as a nice report. Here is the thing to remember: Never use &lt;strong&gt;Format-...&lt;/strong&gt; cmdlets when you plan to output results to sources other than the console. Use &lt;strong&gt;Select-Object&lt;/strong&gt; instead. To create a simple HTML report, this is what I&amp;#39;d do:&lt;/p&gt;
&lt;div style="font-family:&amp;#39;Courier New&amp;#39;;font-size:12;background:#012456;"&gt;&lt;span style="color:#eeedf0;background-color:#012456;"&gt;PS&amp;gt;&amp;nbsp;$a.rss.channel.item&amp;nbsp;|&amp;nbsp;Where-Object&amp;nbsp;{&amp;nbsp;$_.Title&amp;nbsp;-like&amp;nbsp;&amp;#39;*Windows&amp;nbsp;7*&amp;#39;&amp;nbsp;}&amp;nbsp;|&amp;nbsp;Select-Object&amp;nbsp;Title,&amp;nbsp;Description&amp;nbsp;|&amp;nbsp;&lt;br /&gt;ConvertTo-Html&amp;nbsp;|&amp;nbsp;Out-File&amp;nbsp;$home\report.htm;&amp;nbsp;&amp;amp;&amp;nbsp;&amp;quot;$home\report.htm&amp;quot;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;p&gt;This is what the resulting report looks like:&lt;/p&gt;
&lt;table&gt;

&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;title&lt;/th&gt;&lt;th&gt;description&lt;/th&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Group Policy Cmdlets in Windows 7&lt;/td&gt;
&lt;td&gt;Lilia Gutnik has posted a blog entry HERE showing an example of the Windows 7 Group Policy cmdlets.&amp;amp;#160; Check it out. &amp;amp;#160; Experiment!&amp;amp;#160; Enjoy!&amp;amp;#160; Engage! Jeffrey Snover [MSFT] Windows Management Partner Architect Visit the Windows PowerShell Team blog at:&amp;amp;#160;&amp;amp;#160;&amp;amp;#160; http://blogs.msdn.com/PowerShell Visit the Windows PowerShell ScriptCenter at:&amp;amp;#160; http://www.microsoft.com/technet Read More......(&amp;lt;a href=&amp;quot;http://powershell.com/cs/blogs/windows-powershell-team/archive/2009/01/16/group-policy-cmdlets-in-windows-7.aspx&amp;quot;&amp;gt;read more&amp;lt;/a&amp;gt;)&amp;lt;img src=&amp;quot;http://powershell.com/cs/aggbug.aspx?PostID=899&amp;quot; width=&amp;quot;1&amp;quot; height=&amp;quot;1&amp;quot;&amp;gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Windows 7 Troubleshooting&lt;/td&gt;
&lt;td&gt;Windows 7 has a cool new extensible troubleshooting framework which is entirely based on PowerShell scripts.&amp;amp;#160; Rafael Rivera has written a very good step-by-step guide for how to author a Win7 Troubleshooting Pack HERE . Check it out. Experiment!&amp;amp;#160; Enjoy!&amp;amp;#160; Engage! Jeffrey Snover [MSFT] Windows Management Partner Architect Visit the Windows PowerShell Team blog at:&amp;amp;#160;&amp;amp;#160;&amp;amp;#160; http Read More......(&amp;lt;a href=&amp;quot;http://powershell.com/cs/blogs/windows-powershell-team/archive/2009/01/14/windows-7-troubleshooting.aspx&amp;quot;&amp;gt;read more&amp;lt;/a&amp;gt;)&amp;lt;img src=&amp;quot;http://powershell.com/cs/aggbug.aspx?PostID=880&amp;quot; width=&amp;quot;1&amp;quot; height=&amp;quot;1&amp;quot;&amp;gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Windows 7 Beta Has Arrived &amp;ndash; But Not For Everyone&lt;/td&gt;
&lt;td&gt;The Windows 7 and Windows Server 2008 R2 beta versions were released this week. I got the ISOs myself during the week, and finished off today loading R2, Win7 Ultimate and WIn7 Home Premium as VMware virtual machines. But it looks like Microsoft has totally Read More......(&amp;lt;a href=&amp;quot;http://powershell.com/cs/blogs/under-the-stairs/archive/2009/01/10/windows-7-beta-has-arrived-but-not-for-everyone.aspx&amp;quot;&amp;gt;read more&amp;lt;/a&amp;gt;)&amp;lt;img src=&amp;quot;http://powershell.com/cs/aggbug.aspx?PostID=848&amp;quot; width=&amp;quot;1&amp;quot; height=&amp;quot;1&amp;quot;&amp;gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Admittedly, the HTML report does not really look very stylish, but you could change that as well:&lt;/p&gt;
&lt;div style="font-family:&amp;#39;Courier New&amp;#39;;font-size:12;background:#012456;"&gt;&lt;span style="color:#eeedf0;background-color:#012456;"&gt;PS&amp;gt;&amp;nbsp;$head&amp;nbsp;=&amp;nbsp;&amp;#39;&amp;lt;style&amp;gt;&amp;nbsp;BODY{font-family:Verdana;&amp;nbsp;background-color:lightblue;}&amp;nbsp;TABLE{border-width:&amp;nbsp;1px;border-style&lt;br /&gt;:&amp;nbsp;solid;border-color:&amp;nbsp;black;border-collapse:&amp;nbsp;collapse;}&amp;nbsp;TH{font-size:1.3em;&amp;nbsp;border-width:&amp;nbsp;1px;padding:&amp;nbsp;2px;borde&lt;br /&gt;r-style:&amp;nbsp;solid;border-color:&amp;nbsp;black;background-color:#FFCCCC}&amp;nbsp;TD{border-width:&amp;nbsp;1px;padding:&amp;nbsp;2px;border-style:&amp;nbsp;sol&lt;br /&gt;id;border-color:&amp;nbsp;black;background-color:yellow}&amp;lt;/style&amp;gt;&amp;#39;&lt;br /&gt;PS&amp;gt;&amp;nbsp;$title&amp;nbsp;=&amp;nbsp;&amp;quot;My&amp;nbsp;Report&amp;quot;&lt;br /&gt;PS&amp;gt;&amp;nbsp;$body&amp;nbsp;=&amp;nbsp;&amp;quot;&amp;lt;H1&amp;gt;New&amp;nbsp;Windows&amp;nbsp;7&amp;nbsp;+&amp;nbsp;PowerShell&amp;nbsp;Blogs&amp;lt;/H1&amp;gt;&amp;quot;&lt;br /&gt;PS&amp;gt;&amp;nbsp;$a.rss.channel.item&amp;nbsp;|&amp;nbsp;Where-Object&amp;nbsp;{&amp;nbsp;$_.Title&amp;nbsp;-like&amp;nbsp;&amp;#39;*Windows&amp;nbsp;7*&amp;#39;&amp;nbsp;}&amp;nbsp;|&amp;nbsp;Select-Object&amp;nbsp;Title,&amp;nbsp;Description&amp;nbsp;|&amp;nbsp;&lt;br /&gt;ConvertTo-Html&amp;nbsp;-title&amp;nbsp;$title&amp;nbsp;-head&amp;nbsp;$head&amp;nbsp;-body&amp;nbsp;$body&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;|&amp;nbsp;Out-File&amp;nbsp;$home\report.htm;&amp;nbsp;&amp;amp;&amp;nbsp;&amp;quot;$home\report.htm&amp;quot;&lt;/span&gt;&lt;/div&gt;
&lt;p&gt;Here is more brainfood on colorizing HTML reports: &lt;a target="_blank" href="http://powershell.com/cs/blogs/tips/archive/2009/01/05/outputting-html-reports.aspx"&gt;http://powershell.com/cs/blogs/tips/archive/2009/01/05/outputting-html-reports.aspx&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;Convert Text to&amp;nbsp; XML&lt;/h2&gt;
&lt;p&gt;To wrap up this first part of our XML series, let&amp;#39;s finally look at two more ways to read XML data into PowerShell. At the beginning of this article, we loaded the XML via Internet into an empty XML object. From here, you can save the XML as file. Using the same &lt;strong&gt;Load() &lt;/strong&gt;method, you can also load XML data from an XML file:&lt;/p&gt;
&lt;div style="font-family:&amp;#39;Courier New&amp;#39;;font-size:12;background:#012456;"&gt;&lt;span style="color:#eeedf0;background-color:#012456;"&gt;PS&amp;gt;&amp;nbsp;$a&amp;nbsp;=&amp;nbsp;New-Object&amp;nbsp;XML&lt;br /&gt;PS&amp;gt;&amp;nbsp;$a.Load(&amp;quot;http://powershell.com/cs/blogs/MainFeed.aspx&amp;quot;)&lt;br /&gt;PS&amp;gt;&amp;nbsp;$a.Save(&amp;quot;$home\myxml.xml&amp;quot;)&lt;br /&gt;PS&amp;gt;&lt;br /&gt;PS&amp;gt;&amp;nbsp;$b&amp;nbsp;=&amp;nbsp;New-Object&amp;nbsp;XML&lt;br /&gt;PS&amp;gt;&amp;nbsp;$b.Load(&amp;quot;$home\myxml.xml&amp;quot;)&lt;br /&gt;PS&amp;gt;&amp;nbsp;$b&lt;br /&gt;&lt;br /&gt;xml&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;xml-stylesheet&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;rss&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;--------------&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;rss&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;p&gt;So the second approach is to load a file-based XML into an empty XML object. The third approach uses type conversion. You read in XML data as plain text, then convert this into the XML data type. &lt;/p&gt;
&lt;p&gt;Remember two things here: Type conversion works by writing the type (in square brackets) in front of the data you want to convert, and second: use parenthesis around &lt;strong&gt;Get-Content&lt;/strong&gt; because you do not want to convert the &lt;strong&gt;Get-Content&lt;/strong&gt; cmdlet of course but rather its result.&lt;/p&gt;
&lt;div style="font-family:&amp;#39;Courier New&amp;#39;;font-size:12;background:#012456;"&gt;&lt;span style="color:#eeedf0;background-color:#012456;"&gt;PS&amp;gt;&amp;nbsp;$c&amp;nbsp;=&amp;nbsp;[xml]&amp;nbsp;(Get-Content&amp;nbsp;$home\myxml.xml)&lt;br /&gt;PS&amp;gt;&amp;nbsp;$c&lt;br /&gt;&lt;br /&gt;xml&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;xml-stylesheet&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;rss&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;--------------&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;rss&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;h2&gt;Next Steps...&lt;/h2&gt;
&lt;p&gt;Next time, we will create our own XML documents, look at some more advanced data analysis and update and change XML data in an XML file. Make sure to check back next week! Which you now by the way could automate, too.&amp;nbsp;Simply use the RSS ticker in the examples above&amp;nbsp;to check for new blog entries&amp;nbsp;on powershell.com! &lt;/p&gt;
&lt;p&gt;Cheers and a great and relaxing weekend to you,&lt;br /&gt;and don&amp;#39;t forget to check out &lt;a target="_blank" href="http://www.powershellplus.com"&gt;PowerShell Plus&lt;/a&gt;! It&amp;#39;s great and simply one of the best ways to learn PowerShell!&lt;/p&gt;
&lt;p&gt;-Tobias&lt;/p&gt;
&lt;p&gt;MVP Windows PowerShell&amp;nbsp;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://powershell.com/cs/aggbug.aspx?PostID=900" width="1" height="1"&gt;</description><category domain="http://powershell.com/cs/blogs/tobias/archive/tags/XML/default.aspx">XML</category><category domain="http://powershell.com/cs/blogs/tobias/archive/tags/RSS/default.aspx">RSS</category><category domain="http://powershell.com/cs/blogs/tobias/archive/tags/New-Object/default.aspx">New-Object</category><category domain="http://powershell.com/cs/blogs/tobias/archive/tags/Format-Table/default.aspx">Format-Table</category><category domain="http://powershell.com/cs/blogs/tobias/archive/tags/Where-Object/default.aspx">Where-Object</category><category domain="http://powershell.com/cs/blogs/tobias/archive/tags/Internet/default.aspx">Internet</category><category domain="http://powershell.com/cs/blogs/tobias/archive/tags/Select-Object/default.aspx">Select-Object</category></item></channel></rss>