<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.technet.com/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>Jose Barreto's Blog</title><link>http://blogs.technet.com/josebda/default.aspx</link><description>These are the top-of-mind issues and random thoughts of Jose Barreto, a member of the File Server team at Microsoft Corporation.</description><dc:language>en-US</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>Download for Powershell v2 for Windows 7? No need... It's already there!</title><link>http://blogs.technet.com/josebda/archive/2009/11/25/download-for-powershell-v2-for-windows-7-no-need-it-s-already-there.aspx</link><pubDate>Wed, 25 Nov 2009 21:19:00 GMT</pubDate><guid isPermaLink="false">d5e57398-b9ef-4490-9955-07cbb4e4a80d:3296371</guid><dc:creator>josebda</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.technet.com/josebda/comments/3296371.aspx</comments><wfw:commentRss>http://blogs.technet.com/josebda/commentrss.aspx?PostID=3296371</wfw:commentRss><wfw:comment>http://blogs.technet.com/josebda/rsscomments.aspx?PostID=3296371</wfw:comment><description>&lt;P&gt;A while back, Microsoft announced the release of PowerShell v2 for Windows XP, Windows Server 2003, Windows Vista, and Windows Server 2008 (see &lt;A href="http://go.microsoft.com/fwlink/?LinkID=151321" mce_href="http://go.microsoft.com/fwlink/?LinkID=151321"&gt;http://go.microsoft.com/fwlink/?LinkID=151321&lt;/A&gt;).&lt;/P&gt;
&lt;P&gt;However, it is not clear to everyone that Powershell v2 is already part of Windows 7 and Windows Server 2008 R2. &lt;/P&gt;
&lt;P&gt;I have seen people still asking for the link for PowerShell v2 for Windows 7 and Windows Server 2008 R2. Such download does not exist, since the PowerShell included in the OS is already v2.&lt;/P&gt;
&lt;P&gt;Part of this confusion may be due to the fact that the folder in Windows 7 is still called "C:\windows\System32\WindowsPowerShell\v1.0". Maybe it's the fact that we still use the "PS1" file extension. Maybe it's the fact that the file version number for PowerShell.exe is actually "6.1.7600".&lt;/P&gt;
&lt;P&gt;Just believe that v2 is already there... OK, maybe you don't believe me. Here's a little cmdlet to confirm it for you. You can launch PowerShell and use "get-host". &lt;/P&gt;
&lt;P&gt;&lt;IMG style="WIDTH: 769px; HEIGHT: 232px" src="http://blogs.technet.com/photos/josebda2/images/3296373/original.aspx" width=769 height=232 mce_src="http://blogs.technet.com/photos/josebda2/images/3296373/original.aspx"&gt;&lt;/P&gt;
&lt;P&gt;That should make it perfectly clear :-)&lt;/P&gt;&lt;img src="http://blogs.technet.com/aggbug.aspx?PostID=3296371" width="1" height="1"&gt;</description><category domain="http://blogs.technet.com/josebda/archive/tags/Windows+7/default.aspx">Windows 7</category><category domain="http://blogs.technet.com/josebda/archive/tags/Windows+Server+2008+R2/default.aspx">Windows Server 2008 R2</category><category domain="http://blogs.technet.com/josebda/archive/tags/PowerShell/default.aspx">PowerShell</category></item><item><title>SQL Server 2008 R2 Enterprise Evaluation November CTP available for MSDN/TechNet Subscribers</title><link>http://blogs.technet.com/josebda/archive/2009/11/09/sql-server-2008-r2-enterprise-evaluation-november-ctp-available-for-msdn-technet-subscribers.aspx</link><pubDate>Mon, 09 Nov 2009 18:07:00 GMT</pubDate><guid isPermaLink="false">d5e57398-b9ef-4490-9955-07cbb4e4a80d:3292508</guid><dc:creator>josebda</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.technet.com/josebda/comments/3292508.aspx</comments><wfw:commentRss>http://blogs.technet.com/josebda/commentrss.aspx?PostID=3292508</wfw:commentRss><wfw:comment>http://blogs.technet.com/josebda/rsscomments.aspx?PostID=3292508</wfw:comment><description>&lt;P&gt;Great news following a very busy week for SQL Server with the PASS Community Summit: The new SQL Server 2008 R2 November CTP is now available for MSDN and TechNet subscribers.This download is expected to be available as a general download in a couple of days.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Title&lt;/STRONG&gt;:&amp;nbsp;SQL Server 2008 R2 Enterprise Evaluation November CTP (x86, x64, ia64) - DVD (English) &lt;BR&gt;&lt;STRONG&gt;Size&lt;/STRONG&gt;: 4,011.88 (MB) &lt;BR&gt;&lt;STRONG&gt;File Name&lt;/STRONG&gt;: en_sql_server_2008_r2_enterprise_evaluation_november_ctp_x86_x64_ia64_dvd_455348.iso&amp;nbsp; &lt;BR&gt;&lt;STRONG&gt;Date Posted&lt;/STRONG&gt;: 11/9/2009 &lt;/P&gt;
&lt;P&gt;&lt;IMG style="WIDTH: 705px; HEIGHT: 270px" title="SQL Server 2008 R2 Nov CTP" alt="SQL Server 2008 R2 Nov CTP" src="http://blogs.technet.com/photos/josebda/images/3292509/original.aspx" width=705 height=270 mce_src="http://blogs.technet.com/photos/josebda/images/3292509/original.aspx"&gt;&lt;/P&gt;
&lt;P&gt;I'm already downloading... :-)&lt;/P&gt;
&lt;P&gt;Additional details at &lt;BR&gt;&lt;A href="http://www.microsoft.com/presspass/press/2009/nov09/11-03pass09pr.mspx"&gt;http://www.microsoft.com/presspass/press/2009/nov09/11-03pass09pr.mspx&lt;/A&gt;&lt;/P&gt;&lt;img src="http://blogs.technet.com/aggbug.aspx?PostID=3292508" width="1" height="1"&gt;</description><category domain="http://blogs.technet.com/josebda/archive/tags/SQL+Server/default.aspx">SQL Server</category><category domain="http://blogs.technet.com/josebda/archive/tags/Events/default.aspx">Events</category><category domain="http://blogs.technet.com/josebda/archive/tags/SQL+Server+2008+R2/default.aspx">SQL Server 2008 R2</category></item><item><title>Mistakes when configuring your Hyper-V environment</title><link>http://blogs.technet.com/josebda/archive/2009/11/05/mistakes-when-configuring-your-hyper-v-environment.aspx</link><pubDate>Thu, 05 Nov 2009 17:02:00 GMT</pubDate><guid isPermaLink="false">d5e57398-b9ef-4490-9955-07cbb4e4a80d:3291761</guid><dc:creator>josebda</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.technet.com/josebda/comments/3291761.aspx</comments><wfw:commentRss>http://blogs.technet.com/josebda/commentrss.aspx?PostID=3291761</wfw:commentRss><wfw:comment>http://blogs.technet.com/josebda/rsscomments.aspx?PostID=3291761</wfw:comment><description>&lt;P&gt;I came across some interesting tips on things to consider in a virtualized environment by Greg Shields (Consultant and Microsoft MVP).&amp;nbsp;&lt;BR&gt;They are non-issues (or settled issues) on physical environments and you might overlook them when making the transition to virtual machines. &lt;/P&gt;
&lt;P&gt;Here's a summary to get you interested:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Screensavers&lt;/LI&gt;
&lt;LI&gt;Managing from the console&lt;/LI&gt;
&lt;LI&gt;AV on VM disk files&lt;/LI&gt;
&lt;LI&gt;Power options&lt;/LI&gt;
&lt;LI&gt;Cluster Failback&lt;/LI&gt;
&lt;LI&gt;RAM availability&lt;/LI&gt;
&lt;LI&gt;Backup for CSV&lt;/LI&gt;
&lt;LI&gt;Number of processors&lt;/LI&gt;&lt;/UL&gt;
&lt;P mce_keep="true"&gt;Here are the links to the actual articles:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;
&lt;DIV mce_keep="true"&gt;&lt;A href="http://searchservervirtualization.techtarget.com/tip/0,289483,sid94_gci1365989_mem1,00.html" mce_href="http://searchservervirtualization.techtarget.com/tip/0,289483,sid94_gci1365989_mem1,00.html"&gt;http://searchservervirtualization.techtarget.com/tip/0,289483,sid94_gci1365989_mem1,00.html&lt;/A&gt;&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV mce_keep="true"&gt;&lt;A href="http://searchservervirtualization.techtarget.com/tip/0,289483,sid94_gci1372408_mem1,00.html" mce_href="http://searchservervirtualization.techtarget.com/tip/0,289483,sid94_gci1372408_mem1,00.html"&gt;http://searchservervirtualization.techtarget.com/tip/0,289483,sid94_gci1372408_mem1,00.html&lt;/A&gt;&lt;/DIV&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;img src="http://blogs.technet.com/aggbug.aspx?PostID=3291761" width="1" height="1"&gt;</description><category domain="http://blogs.technet.com/josebda/archive/tags/Hyper-V/default.aspx">Hyper-V</category><category domain="http://blogs.technet.com/josebda/archive/tags/Windows+Server+2008+R2/default.aspx">Windows Server 2008 R2</category></item><item><title>Scary SQL Server stuff: tombstones, phantoms, blobs, ghosts and zombies</title><link>http://blogs.technet.com/josebda/archive/2009/10/31/scary-sql-server-stuff-tombstones-phantoms-blobs-ghosts-and-zombies.aspx</link><pubDate>Sat, 31 Oct 2009 22:10:00 GMT</pubDate><guid isPermaLink="false">d5e57398-b9ef-4490-9955-07cbb4e4a80d:3290487</guid><dc:creator>josebda</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.technet.com/josebda/comments/3290487.aspx</comments><wfw:commentRss>http://blogs.technet.com/josebda/commentrss.aspx?PostID=3290487</wfw:commentRss><wfw:comment>http://blogs.technet.com/josebda/rsscomments.aspx?PostID=3290487</wfw:comment><description>&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;This post mixes the spirit of Halloween and the passion for SQL Server :-)&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;o:p&gt;&lt;FONT size=3 face=Calibri&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;Have you noticed how SQL Server has a number of things that seem right out of a horror movie? &lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;As a test of your SQL Server expertise and for a fun Halloween trivia game, try to describe the items in the list below in the context of SQL Server. &lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;If you can’t, follow the links to figure them out:&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;
&lt;DIV style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;FONT size=3 face=Calibri&gt;&lt;STRONG&gt;Tombstones&lt;/STRONG&gt;. Marking the burial places of your deceased data. If you don't keep them, you might end up&amp;nbsp;meeting the undead. &lt;A href="http://msdn.microsoft.com/en-us/library/ms186771.aspx"&gt;http://msdn.microsoft.com/en-us/library/ms186771.aspx&lt;/A&gt;&lt;/FONT&gt;&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;FONT size=3 face=Calibri&gt;&lt;STRONG&gt;Phantoms&lt;/STRONG&gt;.&amp;nbsp;Seeing things that are not there? These haunted queries can only be avoided&amp;nbsp;with proper isolation.&amp;nbsp;&lt;A href="http://msdn.microsoft.com/en-us/library/aa259216.aspx"&gt;http://msdn.microsoft.com/en-us/library/aa259216.aspx&lt;/A&gt; &lt;/FONT&gt;&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;FONT size=3 face=Calibri&gt;&lt;STRONG&gt;Deadlocks&lt;/STRONG&gt;.&amp;nbsp;Weird things happens when hairy transactions collide.&amp;nbsp;If one of those wrap around you, you might end up as the victim. &lt;A href="http://msdn.microsoft.com/en-us/library/ms178104.aspx"&gt;http://msdn.microsoft.com/en-us/library/ms178104.aspx&lt;/A&gt; &lt;/FONT&gt;&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;FONT size=3 face=Calibri&gt;&lt;STRONG&gt;Blobs&lt;/STRONG&gt;. Oh, the nightmares from these huge things sucking the air out of your database. Your only way out may be pushing them down a stream.&amp;nbsp;&lt;A href="http://msdn.microsoft.com/en-us/library/3517w44b.aspx"&gt;http://msdn.microsoft.com/en-us/library/3517w44b.aspx&lt;/A&gt; &lt;/FONT&gt;&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;FONT size=3 face=Calibri&gt;&lt;STRONG&gt;Kill&lt;/STRONG&gt;. Why would a database need such a command? Well, make sure you're well behaved it might never be needed.&amp;nbsp;&lt;A href="http://msdn.microsoft.com/en-us/library/ms173730.aspx"&gt;http://msdn.microsoft.com/en-us/library/ms173730.aspx&lt;/A&gt;&lt;/FONT&gt;&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;FONT size=3 face=Calibri&gt;&lt;STRONG&gt;Crypt&lt;/STRONG&gt; &lt;STRONG&gt;properties&lt;/STRONG&gt;. Tales from a database that implemented additional security. Just make sure you don't&amp;nbsp;misplace your&amp;nbsp;keys. &lt;A href="http://msdn.microsoft.com/en-us/library/ms189536.aspx"&gt;http://msdn.microsoft.com/en-us/library/ms189536.aspx&lt;/A&gt;&lt;/FONT&gt;&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;FONT size=3 face=Calibri&gt;&lt;STRONG&gt;Hash Match&lt;/STRONG&gt;. It's not a competition to see who's the fastest slasher.&amp;nbsp;&lt;A href="http://msdn.microsoft.com/en-us/library/aa237090.aspx"&gt;http://msdn.microsoft.com/en-us/library/aa237090.aspx&lt;/A&gt;&lt;/FONT&gt;&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;FONT size=3 face=Calibri&gt;&lt;STRONG&gt;Drop user&lt;/STRONG&gt;. Users don't really live forever, after all.&amp;nbsp;&lt;A href="http://msdn.microsoft.com/en-us/library/ms189438.aspx"&gt;http://msdn.microsoft.com/en-us/library/ms189438.aspx&lt;/A&gt;&lt;/FONT&gt;&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;FONT size=3 face=Calibri&gt;&lt;STRONG&gt;Ghost rows&lt;/STRONG&gt;. An army of ghosts, all perfectly lined up? Not really.&amp;nbsp;&lt;A href="http://msdn.microsoft.com/en-us/library/ms188436.aspx"&gt;http://msdn.microsoft.com/en-us/library/ms188436.aspx&lt;/A&gt; &lt;/FONT&gt;&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;FONT size=3 face=Calibri&gt;&lt;STRONG&gt;Zombie rowsets&lt;/STRONG&gt;. What's Halloween without zombies, even if they only show up in small places.&amp;nbsp;&lt;A href="http://msdn.microsoft.com/en-us/library/aa258325.aspx"&gt;http://msdn.microsoft.com/en-us/library/aa258325.aspx&lt;/A&gt; &lt;/FONT&gt;&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;FONT size=3 face=Calibri&gt;&lt;STRONG&gt;Execute reader&lt;/STRONG&gt;. Sounds like a curse on whoever reads your data. But it's actually quite useful and fast.&amp;nbsp;&lt;A href="http://msdn.microsoft.com/en-us/library/9kcbe65k.aspx"&gt;http://msdn.microsoft.com/en-us/library/9kcbe65k.aspx&lt;/A&gt;&lt;/FONT&gt;&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;FONT size=3 face=Calibri&gt;&lt;STRONG&gt;Shadow Copies&lt;/STRONG&gt;. Not as scary as it sounds. It's much scarier when your data goes bad and you don't have them.&amp;nbsp;&lt;A href="http://msdn.microsoft.com/en-us/library/cc966520.aspx"&gt;http://msdn.microsoft.com/en-us/library/cc966520.aspx&lt;/A&gt; &lt;/FONT&gt;&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;FONT size=3 face=Calibri&gt;&lt;STRONG&gt;Nested Triggers&lt;/STRONG&gt;. It could be a code for snipers waiting to hit you from the rooftops. But it's much harder to explain than that.&amp;nbsp;&lt;A href="http://msdn.microsoft.com/en-us/library/ms190739.aspx"&gt;http://msdn.microsoft.com/en-us/library/ms190739.aspx&lt;/A&gt; &lt;/FONT&gt;&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;FONT size=3 face=Calibri&gt;&lt;STRONG&gt;RIP. &lt;/STRONG&gt;No, it's not an epitaph. It's a way to help you clear your tracks and achieve compliance.&amp;nbsp;&lt;A href="http://msdn.microsoft.com/en-us/library/bb326650.aspx"&gt;http://msdn.microsoft.com/en-us/library/bb326650.aspx&lt;/A&gt;&lt;/FONT&gt;&lt;/DIV&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;And, of course, there’s a number of Wizards all over the place.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;If you know any other good ones, please do share in the post comments.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;o:p&gt;&lt;FONT size=3 face=Calibri&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;o:p&gt;&lt;FONT size=3 face=Calibri&gt;P.S.: I&amp;nbsp;was also reminded by Kalen Delaney of the classic "Halloween Problem" which can cause pretty scary results, as&amp;nbsp;described at &lt;A href="http://en.wikipedia.org/wiki/Halloween_Problem"&gt;http://en.wikipedia.org/wiki/Halloween_Problem&lt;/A&gt;. Not specific to SQL Server, but there was a related issue with SQL Server 7 : &lt;A href="http://support.microsoft.com/kb/248441"&gt;http://support.microsoft.com/kb/248441&lt;/A&gt;.&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;o:p&gt;&lt;FONT size=3 face=Calibri&gt;&lt;/FONT&gt;&lt;/o:p&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;Happy Halloween!&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;&lt;o:p&gt;&lt;IMG style="WIDTH: 102px; HEIGHT: 110px" title="SQL Halloween" alt="SQL Halloween" src="http://blogs.technet.com/photos/josebda/images/3290488/original.aspx" width=102 height=110 mce_src="http://blogs.technet.com/photos/josebda/images/3290488/original.aspx"&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;img src="http://blogs.technet.com/aggbug.aspx?PostID=3290487" width="1" height="1"&gt;</description><category domain="http://blogs.technet.com/josebda/archive/tags/SQL+Server/default.aspx">SQL Server</category><category domain="http://blogs.technet.com/josebda/archive/tags/Events/default.aspx">Events</category></item><item><title>Implementing an End-User Data Centralization Solution with Folder Redirection and Offlines Files</title><link>http://blogs.technet.com/josebda/archive/2009/10/23/implementing-an-end-user-data-centralization-solution-with-folder-redirection-and-offlines-files.aspx</link><pubDate>Sat, 24 Oct 2009 05:00:00 GMT</pubDate><guid isPermaLink="false">d5e57398-b9ef-4490-9955-07cbb4e4a80d:3288834</guid><dc:creator>josebda</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.technet.com/josebda/comments/3288834.aspx</comments><wfw:commentRss>http://blogs.technet.com/josebda/commentrss.aspx?PostID=3288834</wfw:commentRss><wfw:comment>http://blogs.technet.com/josebda/rsscomments.aspx?PostID=3288834</wfw:comment><description>&lt;P&gt;There's a new 77-page white paper covering the use of Folder Redirection and Offline Files in a very practical way.&lt;/P&gt;
&lt;P&gt;Here's an excerpt:&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;"The objective of this white paper is to show through a case study how to use different Microsoft products and technologies to put in place a comprehensive solution satisfying the needs of a mid-sized organization around users’ file data management. The study was conducted by the Quality Assurance group of the Storage Solutions Division (SSD) at Microsoft, a division that focuses on enabling customers of all sizes to store, manage, and reliably access their file data."&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;Download from &lt;A href="http://www.microsoft.com/downloads/details.aspx?displaylang=en&amp;amp;FamilyID=d8541618-5c63-4c4d-a0fd-d942cd3d2ec6" mce_href="http://www.microsoft.com/downloads/details.aspx?displaylang=en&amp;amp;FamilyID=d8541618-5c63-4c4d-a0fd-d942cd3d2ec6"&gt;http://www.microsoft.com/downloads/details.aspx?displaylang=en&amp;amp;FamilyID=d8541618-5c63-4c4d-a0fd-d942cd3d2ec6&lt;/A&gt;&lt;/P&gt;&lt;img src="http://blogs.technet.com/aggbug.aspx?PostID=3288834" width="1" height="1"&gt;</description><category domain="http://blogs.technet.com/josebda/archive/tags/Storage/default.aspx">Storage</category><category domain="http://blogs.technet.com/josebda/archive/tags/Windows+Server+2008+R2/default.aspx">Windows Server 2008 R2</category><category domain="http://blogs.technet.com/josebda/archive/tags/SMB/default.aspx">SMB</category></item><item><title>SharePoint 2010 beta in November. Details and documentation right now!</title><link>http://blogs.technet.com/josebda/archive/2009/10/19/sharepoint-2010-beta-in-november-details-and-documentation-right-now.aspx</link><pubDate>Tue, 20 Oct 2009 05:28:00 GMT</pubDate><guid isPermaLink="false">d5e57398-b9ef-4490-9955-07cbb4e4a80d:3287800</guid><dc:creator>josebda</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.technet.com/josebda/comments/3287800.aspx</comments><wfw:commentRss>http://blogs.technet.com/josebda/commentrss.aspx?PostID=3287800</wfw:commentRss><wfw:comment>http://blogs.technet.com/josebda/rsscomments.aspx?PostID=3287800</wfw:comment><description>&lt;P&gt;Jeff Teper (Corporate Vice President, SharePoint Server) and Steve Ballmer (CEO) shared SharePoint Server 2010 feature details and announced the November beta during the SharePoint Conference today in Las Vegas. &lt;/P&gt;
&lt;P&gt;Jeff also posted a long and revealing blog, outlining 8 categories and 40 feature areas:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Sites&lt;/LI&gt;
&lt;UL&gt;
&lt;LI&gt;SharePoint Web Experience&lt;/LI&gt;
&lt;LI&gt;Office Client&lt;/LI&gt;
&lt;LI&gt;SharePoint Workspace&lt;/LI&gt;
&lt;LI&gt;Office Web Apps&lt;/LI&gt;
&lt;LI&gt;SharePoint Mobile Access&lt;/LI&gt;&lt;/UL&gt;
&lt;LI&gt;Communities&lt;/LI&gt;
&lt;UL&gt;
&lt;LI&gt;Collaborative Content&lt;/LI&gt;
&lt;LI&gt;Social Feedback and Organization&lt;/LI&gt;
&lt;LI&gt;User Profiles&lt;/LI&gt;
&lt;LI&gt;MySites&lt;/LI&gt;
&lt;LI&gt;People Connections&lt;/LI&gt;&lt;/UL&gt;
&lt;LI&gt;Content&lt;/LI&gt;
&lt;UL&gt;
&lt;LI&gt;Large Lists and Libraries&lt;/LI&gt;
&lt;LI&gt;Enterprise Metadata&lt;/LI&gt;
&lt;LI&gt;Document Sets&lt;/LI&gt;
&lt;LI&gt;Web Publishing including Digital Asset Management&lt;/LI&gt;
&lt;LI&gt;Governance and Records Management&lt;/LI&gt;&lt;/UL&gt;
&lt;LI&gt;Search&lt;/LI&gt;
&lt;UL&gt;
&lt;LI&gt;Interactive Search Experience&lt;/LI&gt;
&lt;LI&gt;Relevance&lt;/LI&gt;
&lt;LI&gt;People Search&lt;/LI&gt;
&lt;LI&gt;Connectivity&lt;/LI&gt;
&lt;LI&gt;Scale and Platform Flexibility&amp;nbsp;&lt;/LI&gt;&lt;/UL&gt;
&lt;LI&gt;Insights&lt;/LI&gt;
&lt;UL&gt;
&lt;LI&gt;Excel Services&lt;/LI&gt;
&lt;LI&gt;Performance Point Services&lt;/LI&gt;
&lt;LI&gt;SQL Server&lt;/LI&gt;
&lt;LI&gt;“Gemini”&lt;/LI&gt;
&lt;LI&gt;Visio Services&lt;/LI&gt;&lt;/UL&gt;
&lt;LI&gt;Composites&lt;/LI&gt;
&lt;UL&gt;
&lt;LI&gt;SharePoint Designer&lt;/LI&gt;
&lt;LI&gt;InfoPath Forms Service&lt;/LI&gt;
&lt;LI&gt;Access Services&lt;/LI&gt;
&lt;LI&gt;Sandbox Solutions&lt;/LI&gt;
&lt;LI&gt;Business Connectivity Services&lt;/LI&gt;&lt;/UL&gt;
&lt;LI&gt;Administration&lt;/LI&gt;
&lt;UL&gt;
&lt;LI&gt;Improved Upgrade&lt;/LI&gt;
&lt;LI&gt;Throttling, Health Monitoring, Analytics&lt;/LI&gt;
&lt;LI&gt;Web and PowerShell Admin&lt;/LI&gt;
&lt;LI&gt;Scalability and Availability&lt;/LI&gt;
&lt;LI&gt;Identity Management and Security&lt;/LI&gt;&lt;/UL&gt;
&lt;LI&gt;Development&lt;/LI&gt;
&lt;UL&gt;
&lt;LI&gt;New SharePoint APIs&lt;/LI&gt;
&lt;LI&gt;Application Lifecycle&lt;/LI&gt;
&lt;LI&gt;Visual Studio 2010 Support&lt;/LI&gt;
&lt;LI&gt;Developer Dashboard View&lt;/LI&gt;
&lt;LI&gt;Development on Windows 7&lt;/LI&gt;&lt;/UL&gt;&lt;/UL&gt;
&lt;P&gt;Jeff did an amazing job summarizing the upcoming SharePoint Server 2010 in a single blog post that includes additional information on each of the 48 bullets above, plus 8 screenshots (one per category). Absolute&amp;nbsp;must read!!!&amp;nbsp;&amp;nbsp;&lt;/P&gt;
&lt;TABLE&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD&gt;
&lt;P&gt;Check the blog post at&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/sharepoint/archive/2009/10/19/sharepoint-2010.aspx" mce_href="http://blogs.msdn.com/sharepoint/archive/2009/10/19/sharepoint-2010.aspx"&gt;http://blogs.msdn.com/sharepoint/archive/2009/10/19/sharepoint-2010.aspx&lt;/A&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;Recorded keynote from the SharePoint Conference available from&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;A href="http://www.microsoft.com/presspass/presskits/sharepoint/videoGallery.aspx"&gt;http://www.microsoft.com/presspass/presskits/sharepoint/videoGallery.aspx&lt;/A&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;Also, documentation and learning resources on SharePoint 2010 are available starting today for both Developers and IT Professionals:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;A href="http://msdn.microsoft.com/en-us/sharepoint/default.aspx" mce_href="http://msdn.microsoft.com/en-us/sharepoint/default.aspx"&gt;&lt;FONT color=#006ff7&gt;SharePoint Developer Center&lt;/FONT&gt;&lt;/A&gt; on MSDN&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://technet.microsoft.com/en-us/sharepoint/default.aspx" mce_href="http://technet.microsoft.com/en-us/sharepoint/default.aspx"&gt;&lt;FONT color=#006ff7&gt;SharePoint Products TechCenter&lt;/FONT&gt;&lt;/A&gt;&amp;nbsp;on TechNet&lt;/LI&gt;&lt;/UL&gt;&lt;/TD&gt;
&lt;TD&gt;
&lt;P align=right&gt;&lt;IMG style="WIDTH: 395px; HEIGHT: 205px" title="SharePoint 2010" alt="SharePoint 2010" align=middle src="http://i.technet.microsoft.com/ee263917.Feature_SharePointServer2010WhatsNew(en-us,MSDN.10).png" width=395 height=205 mce_src="http://i.technet.microsoft.com/ee263917.Feature_SharePointServer2010WhatsNew(en-us,MSDN.10).png"&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;img src="http://blogs.technet.com/aggbug.aspx?PostID=3287800" width="1" height="1"&gt;</description><category domain="http://blogs.technet.com/josebda/archive/tags/SharePoint/default.aspx">SharePoint</category><category domain="http://blogs.technet.com/josebda/archive/tags/Search/default.aspx">Search</category><category domain="http://blogs.technet.com/josebda/archive/tags/Events/default.aspx">Events</category></item><item><title>File Server Capacity Tool (FSCT) 1.0 available for download</title><link>http://blogs.technet.com/josebda/archive/2009/09/16/file-server-capacity-tool-fsct-1-0-available-for-download.aspx</link><pubDate>Wed, 16 Sep 2009 20:57:00 GMT</pubDate><guid isPermaLink="false">d5e57398-b9ef-4490-9955-07cbb4e4a80d:3281464</guid><dc:creator>josebda</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.technet.com/josebda/comments/3281464.aspx</comments><wfw:commentRss>http://blogs.technet.com/josebda/commentrss.aspx?PostID=3281464</wfw:commentRss><wfw:comment>http://blogs.technet.com/josebda/rsscomments.aspx?PostID=3281464</wfw:comment><description>&lt;P&gt;Version 1.0 of the File Server Capacity Tool (FSCT) was announced yesterday during a presentation by Jian Yan and&amp;nbsp; Bartosz Nyczkowski at SNIA’s Storage Developer Conference in Santa Clara, CA. The presentation covered a number of details about FSCT and included a demo running FSCT with the HomeFolders workload.&lt;/P&gt;
&lt;P&gt;If you are not familiar with FSCT, the download page offers this overview: “File server capacity planning and performance troubleshooting are critical aspects of high-level network administration. Central file servers and distributed client workstations are now the norm in most corporate networks. This structure reduces storage capacity requirements, centralizes backup, increases the availability of files, and simplifies the document revision and review process. However, because data storage and access are centralized, performance limitations impact the entire network population. Accurately projecting the number of users that hardware can support under a specific workload, and understanding when and where bottlenecks occur, are critical to making efficient improvements to the server configuration. File server capacity planning tools can be valuable in choosing new hardware for purchase, identifying the capacity of existing hardware, locating existing bottlenecks, and planning for resource expansion in advance of resource exhaustion. The throughput capacity of a file server can be expressed either as the maximum number of operations per second or a maximum number of users supported by the configuration. These values are influenced by several factors, some of which include processor speed, available memory, disk speed, network throughput and latency, and the speed with which SMB requests are processed.”&lt;/P&gt;
&lt;P&gt;The final version is available for download in both 32-bit (x86) and 64-bit (x64) versions. It is supported on&amp;nbsp; Windows Server 2003, Windows Server 2003 R2, Windows Server 2008, Windows Server 2008 R2, Windows Vista and&amp;nbsp; Windows 7 (with the latest service pack applied). &lt;/P&gt;
&lt;P&gt;Downloads are available now:&lt;BR&gt;x64: &lt;A href="http://www.microsoft.com/downloads/details.aspx?displaylang=en&amp;amp;FamilyID=b20db7f1-15fd-40ae-9f3a-514968c65643" mce_href="http://www.microsoft.com/downloads/details.aspx?displaylang=en&amp;amp;FamilyID=b20db7f1-15fd-40ae-9f3a-514968c65643"&gt;http://www.microsoft.com/downloads/details.aspx?displaylang=en&amp;amp;FamilyID=b20db7f1-15fd-40ae-9f3a-514968c65643&lt;/A&gt; &lt;BR&gt;x86: &lt;A href="http://www.microsoft.com/downloads/details.aspx?displaylang=en&amp;amp;FamilyID=0b212272-1884-4af1-972d-42ef1db9f977" mce_href="http://www.microsoft.com/downloads/details.aspx?displaylang=en&amp;amp;FamilyID=0b212272-1884-4af1-972d-42ef1db9f977"&gt;http://www.microsoft.com/downloads/details.aspx?displaylang=en&amp;amp;FamilyID=0b212272-1884-4af1-972d-42ef1db9f977&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;A white paper is also included in the download packages, with detailed description of the tool, step-by-step instructions on how to use it and reference of the command line interface.&lt;/P&gt;
&lt;P&gt;For questions about FSCT and how to use it, please use the forum at&lt;BR&gt;&lt;A href="http://social.technet.microsoft.com/Forums/en-US/fsct/threads" mce_href="http://social.technet.microsoft.com/Forums/en-US/fsct/threads"&gt;http://social.technet.microsoft.com/Forums/en-US/fsct/threads&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;Also check some details on FSCT on these previous posts (from the release of the beta last year and the release candidate back in July):&lt;BR&gt;&lt;A href="http://blogs.technet.com/josebda/archive/2009/07/08/file-server-capacity-tool-fsct-release-candidate-available-for-download.aspx" mce_href="http://blogs.technet.com/josebda/archive/2009/07/08/file-server-capacity-tool-fsct-release-candidate-available-for-download.aspx"&gt;http://blogs.technet.com/josebda/archive/2009/07/08/file-server-capacity-tool-fsct-release-candidate-available-for-download.aspx&lt;/A&gt;&lt;BR&gt;&lt;A href="http://blogs.technet.com/josebda/archive/2008/10/06/fsct-a-cifs-smb-smb2-file-server-tool-for-capacity-planning-and-performance-troubleshooting.aspx" mce_href="http://blogs.technet.com/josebda/archive/2008/10/06/fsct-a-cifs-smb-smb2-file-server-tool-for-capacity-planning-and-performance-troubleshooting.aspx"&gt;http://blogs.technet.com/josebda/archive/2008/10/06/fsct-a-cifs-smb-smb2-file-server-tool-for-capacity-planning-and-performance-troubleshooting.aspx&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;This is a major milestone in the two-year journey to offer this tool publicly, which included efforts from a number of people from different teams at Microsoft, including the File Server Team and the Windows Performance Team.&lt;/P&gt;&lt;img src="http://blogs.technet.com/aggbug.aspx?PostID=3281464" width="1" height="1"&gt;</description><category domain="http://blogs.technet.com/josebda/archive/tags/Windows+Server+2008/default.aspx">Windows Server 2008</category><category domain="http://blogs.technet.com/josebda/archive/tags/Storage/default.aspx">Storage</category><category domain="http://blogs.technet.com/josebda/archive/tags/Windows+7/default.aspx">Windows 7</category><category domain="http://blogs.technet.com/josebda/archive/tags/FSCT/default.aspx">FSCT</category><category domain="http://blogs.technet.com/josebda/archive/tags/Windows+Server+2008+R2/default.aspx">Windows Server 2008 R2</category><category domain="http://blogs.technet.com/josebda/archive/tags/SMB/default.aspx">SMB</category><category domain="http://blogs.technet.com/josebda/archive/tags/Interoperability/default.aspx">Interoperability</category></item><item><title>TI-55-II calculator, the first device I ever programmed</title><link>http://blogs.technet.com/josebda/archive/2009/08/29/ti-55-ii-calculator-the-first-device-i-ever-programmed.aspx</link><pubDate>Sun, 30 Aug 2009 05:50:00 GMT</pubDate><guid isPermaLink="false">d5e57398-b9ef-4490-9955-07cbb4e4a80d:3278050</guid><dc:creator>josebda</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.technet.com/josebda/comments/3278050.aspx</comments><wfw:commentRss>http://blogs.technet.com/josebda/commentrss.aspx?PostID=3278050</wfw:commentRss><wfw:comment>http://blogs.technet.com/josebda/rsscomments.aspx?PostID=3278050</wfw:comment><description>&lt;TABLE&gt;
&lt;TBODY&gt;
&lt;TR vAlign=top align=left&gt;
&lt;TD&gt;
&lt;P&gt;I recently bought a used TI-55-II on eBay. This is an old (early 80’s) Texas Instruments calculator, one the first programmable ones. I got it mostly for sentimental value, since I used to own one back in Brazil in 1983, my last year in high school. &lt;/P&gt;
&lt;P&gt;Looking back, the fact that I got this specific programmable calculator exactly at that moment in my life was probably an important contributing factor to my choice of Computer Science when I joined the Federal University of Ceara in Brazil in 1984. Before that, I had my eyes set on Architecture. And not Computer or Systems Architecture, I should say, since back&amp;nbsp;then we did not associate Architecture with Computer Science careers.&lt;/P&gt;
&lt;P&gt;The TI-55-II is actually a pretty limited device by today’s standards. You have a 10-digit LCD display, 8 “memories” and 56 “programming steps”. Programming the calculator basically meant storing a sequence of keystrokes and you had no conditional statements, just one RST command to go back to step 0. Even with that, I remember being quite impressed with the ability to create a program, use multiple variables and display data on the screen (there is a PAUSE instruction to let you see a number on the screen before moving to the next step). &lt;/P&gt;
&lt;P&gt;The calculator I used back in high school was actually manufactured in the city of Manaus in Brazil ("Produzida na Zona Franca de&amp;nbsp;Manaus") by a subsidiary of Texas Instruments. I found some information about it on the internet: &lt;A href="http://www.datamath.org/Sci/Slanted/TI-55-II-AA.htm" mce_href="http://www.datamath.org/Sci/Slanted/TI-55-II-AA.htm"&gt;http://www.datamath.org/Sci/Slanted/TI-55-II-AA.htm&lt;/A&gt;. In fact, there is even a soft copy of the manual in PDF format: &lt;A href="http://www.datamath.net/Manuals/TI-55-II_QR_US.pdf" mce_href="http://www.datamath.net/Manuals/TI-55-II_QR_US.pdf"&gt;http://www.datamath.net/Manuals/TI-55-II_QR_US.pdf&lt;/A&gt;. &lt;/P&gt;
&lt;P&gt;My used TI-55-II I got from eBay (shown on the right) was made in the US in 1982. It's almost the same as the Brazilian model except for the type of battery it uses. Details&amp;nbsp;at &lt;A href="http://www.datamath.org/Sci/Slanted/TI-55-II.htm"&gt;http://www.datamath.org/Sci/Slanted/TI-55-II.htm&lt;/A&gt;. Mine is actually working fine and I even managed to remember how to create simple programs with it. Interesting how your brain can retain that kind of information decades later… &lt;/P&gt;
&lt;P&gt;See also a previous blog post on CP/M and the TRS-80, which I used a few years after that: &lt;A href="http://blogs.technet.com/josebda/archive/2009/08/07/the-good-old-days-of-cp-m-2-2-on-a-trs-80-with-an-8-bit-z80-cpu.aspx" mce_href="http://blogs.technet.com/josebda/archive/2009/08/07/the-good-old-days-of-cp-m-2-2-on-a-trs-80-with-an-8-bit-z80-cpu.aspx"&gt;http://blogs.technet.com/josebda/archive/2009/08/07/the-good-old-days-of-cp-m-2-2-on-a-trs-80-with-an-8-bit-z80-cpu.aspx&lt;/A&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;IMG style="WIDTH: 234px; HEIGHT: 402px" title=TI-55-II alt=TI-55-II src="http://blogs.technet.com/photos/filecab/images/3278051/original.aspx" width=234 height=402 mce_src="http://blogs.technet.com/photos/filecab/images/3278051/original.aspx"&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;img src="http://blogs.technet.com/aggbug.aspx?PostID=3278050" width="1" height="1"&gt;</description><category domain="http://blogs.technet.com/josebda/archive/tags/Brazil/default.aspx">Brazil</category><category domain="http://blogs.technet.com/josebda/archive/tags/History/default.aspx">History</category></item><item><title>Windows Server DFS-Namespaces Performance and Scalability </title><link>http://blogs.technet.com/josebda/archive/2009/08/22/windows-server-dfs-namespaces-performance-and-scalability.aspx</link><pubDate>Sat, 22 Aug 2009 21:45:00 GMT</pubDate><guid isPermaLink="false">d5e57398-b9ef-4490-9955-07cbb4e4a80d:3275952</guid><dc:creator>josebda</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.technet.com/josebda/comments/3275952.aspx</comments><wfw:commentRss>http://blogs.technet.com/josebda/commentrss.aspx?PostID=3275952</wfw:commentRss><wfw:comment>http://blogs.technet.com/josebda/rsscomments.aspx?PostID=3275952</wfw:comment><description>&lt;P&gt;The DFS-N test team has completed some extensive Performance and Scalability testing and we wanted to share some of the results.&lt;/P&gt;
&lt;P&gt;It includes results on standalone namespaces, "2000 mode" domain namespaces and "2008 mode" domain namespaces, under Windows Server 2003, Windows Server 2008 and Windows Server 2008 R2.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Check the post by Marcello Hasegawa at &lt;A href="http://blogs.technet.com/filecab/archive/2009/08/22/windows-server-dfs-namespaces-performance-and-scalability.aspx" mce_href="http://blogs.technet.com/filecab/archive/2009/08/22/windows-server-dfs-namespaces-performance-and-scalability.aspx"&gt;http://blogs.technet.com/filecab/archive/2009/08/22/windows-server-dfs-namespaces-performance-and-scalability.aspx&lt;/A&gt;.&lt;/P&gt;&lt;img src="http://blogs.technet.com/aggbug.aspx?PostID=3275952" width="1" height="1"&gt;</description><category domain="http://blogs.technet.com/josebda/archive/tags/Windows+Server+2008/default.aspx">Windows Server 2008</category><category domain="http://blogs.technet.com/josebda/archive/tags/Windows+Server+2008+R2/default.aspx">Windows Server 2008 R2</category><category domain="http://blogs.technet.com/josebda/archive/tags/DFS/default.aspx">DFS</category></item><item><title>Three ways to design your DFS Namespaces</title><link>http://blogs.technet.com/josebda/archive/2009/08/21/three-ways-to-design-your-dfs-namespaces.aspx</link><pubDate>Sat, 22 Aug 2009 02:00:00 GMT</pubDate><guid isPermaLink="false">d5e57398-b9ef-4490-9955-07cbb4e4a80d:3275501</guid><dc:creator>josebda</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.technet.com/josebda/comments/3275501.aspx</comments><wfw:commentRss>http://blogs.technet.com/josebda/commentrss.aspx?PostID=3275501</wfw:commentRss><wfw:comment>http://blogs.technet.com/josebda/rsscomments.aspx?PostID=3275501</wfw:comment><description>&lt;P&gt;&lt;STRONG&gt;Introduction&lt;/STRONG&gt;&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;In this blog post, we’ll showcase the flexibility you have with DFS-N by showing three distinct ways that you could design a namespace.&lt;/P&gt;
&lt;P&gt;Note: If you’re not familiar with DFS-N, please read this blog post first: &lt;BR&gt;&lt;A href="http://blogs.technet.com/josebda/archive/2009/03/10/the-basics-of-the-windows-server-2008-distributed-file-system-dfs.aspx" mce_href="http://blogs.technet.com/josebda/archive/2009/03/10/the-basics-of-the-windows-server-2008-distributed-file-system-dfs.aspx"&gt;http://blogs.technet.com/josebda/archive/2009/03/10/the-basics-of-the-windows-server-2008-distributed-file-system-dfs.aspx&lt;/A&gt; &lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;&lt;STRONG&gt;Scenario&lt;/STRONG&gt;&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;The scenario here is simple: you have three file servers in different locations: S1 is in New York, S2 is in Amsterdam and S3 is in Hong Kong. Each server has a unique set of data (Proposals, Marketing information and Engineering documents for each geography) and you want to expose this under a single namespace. Here’s the structure on each file server:&lt;/P&gt;
&lt;P&gt;Server S1 in New York:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;F:\AMER\PROPOSAL – Proposals for the AMER (Americas) region&lt;/LI&gt;
&lt;LI&gt;F:\AMER\MARKETING – Marketing information for the AMER region&lt;/LI&gt;
&lt;LI&gt;F:\AMER\ENGINEERING – Engineering documents for the AMER region&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;Server S2 in Amsterdam:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;F:\EMEA\PROPOSAL – Proposals for the EMEA (Europe, Middle East and Africa) region&lt;/LI&gt;
&lt;LI&gt;F:\EMEA\MARKETING – Marketing information for the EMEA region&lt;/LI&gt;
&lt;LI&gt;F:\EMEA\ENGINEERING – Engineering documents for the EMEA region&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;Server S3 in Hong Kong:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;F:\APAC\PROPOSAL – Proposals for the APAC (Asia and Pacific) region&lt;/LI&gt;
&lt;LI&gt;F:\APAC\MARKETING – Marketing information for the APAC region&lt;/LI&gt;
&lt;LI&gt;F:\APAC\ENGINEERING – Engineering documents for the APAC region&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;Please note that this specific scenario does not include replication. Each server each has completely an independent set of files. For instance, a proposal for an EMEA customer would exist only in the F:\EMEA\PROPOSALS folder in S2 and it would not exist in servers S1 or S3. Replication across these servers could be accomplished using DFS-R, but I am purposely avoiding it in this example to focus specifically on DFS-N design.&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;&lt;STRONG&gt;Creating the folders and shares&lt;/STRONG&gt;&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;First of all, I am providing the scripts to create the folder structure and the shares. These are 3 distinct scripts and each one needs to be run on a specific server (S1, S2 or S3). We could actually do this all remotely, but I’m keeping it simple. &lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;CREATE-S1.CMD&lt;/STRONG&gt;&lt;/P&gt;
&lt;BLOCKQUOTE&gt;&lt;PRE&gt;REM ## RUN THIS SCRIPT in S1, the file server in New York&lt;BR&gt;MD F:\AMER\PROPOSALS&lt;BR&gt;MD F:\AMER\MARKETING&lt;BR&gt;MD F:\AMER\ENGINEERING&lt;BR&gt;NET SHARE AMER=F:\AMER
&lt;/PRE&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;&lt;STRONG&gt;CREATE-S2.CMD&lt;/STRONG&gt;&lt;/P&gt;
&lt;BLOCKQUOTE&gt;&lt;PRE&gt;REM&amp;nbsp;## RUN THIS SCRIPT in S2, the file server in Amsterdam&lt;BR&gt;MD F:\EMEA\PROPOSALS&lt;BR&gt;MD F:\EMEA\MARKETING&lt;BR&gt;MD F:\EMEA\ENGINEERING&lt;BR&gt;NET SHARE EMEA=F:\EMEA
&lt;/PRE&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;&lt;STRONG&gt;CREATE-S3.CMD&lt;/STRONG&gt;&lt;/P&gt;
&lt;BLOCKQUOTE&gt;&lt;PRE&gt;REM ## RUN THIS SCRIPT in S3, the file server in Hong Kong&lt;BR&gt;MD F:\APAC\PROPOSALS&lt;BR&gt;MD F:\APAC\MARKETING&lt;BR&gt;MD F:\APAC\ENGINEERING&lt;BR&gt;NET SHARE APAC=F:\APAC
&lt;/PRE&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;Please note that the shares will end up with read-only permissions using the commands above. In your real-world deployment you will need to properly plan your NTFS and file share permissions and implement them properly with CACLS or ICACLS.EXE (for NTFS) and the /GRANT option in NET SHARE (for the file shares). The focus of this post is not on permissions but on the structure of the shares, folders and namespaces. &lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;&lt;STRONG&gt;Namespace option 1 – Simple mapping of shares&lt;/STRONG&gt;&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;The first option I will cover is a simple mapping at the root share on each server. This is simpler because it requires a namespace with only three folders (or links). Assuming we use a fourth server (S4) as the namespace server (or target) and NS1 as the name of the namespace (or root), users would basically use \\S4\NS1 as the UNC path to the entire set of data from all three file servers.&lt;/P&gt;
&lt;P&gt;Note 1: You could host the namespace in one of the file servers, see details at&amp;nbsp; &lt;A href="http://blogs.technet.com/josebda/archive/2009/06/26/how-many-dfs-n-namespaces-servers-do-you-need.aspx" mce_href="http://blogs.technet.com/josebda/archive/2009/06/26/how-many-dfs-n-namespaces-servers-do-you-need.aspx"&gt;http://blogs.technet.com/josebda/archive/2009/06/26/how-many-dfs-n-namespaces-servers-do-you-need.aspx&lt;/A&gt; &lt;BR&gt;Note 2: We’re using a standalone namespace here, but you could just as easily use a domain namespace instead.&lt;BR&gt;Note 3: We’re not adding any fault tolerance for the namespace or the file servers in these scenarios. This could be accomplished with Failover Clustering for standalone namespaces or with multiple targets for a domain namespace.&lt;/P&gt;
&lt;P&gt;Here’s a script to create the namespace, which should be run on S4:&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;CREATE-NS1.CMD&lt;/STRONG&gt;&lt;/P&gt;
&lt;BLOCKQUOTE&gt;&lt;PRE&gt;REM ## scenario 1 - Simple mapping of shares
REM ## RUN THIS SCRIPT in S4, the namespace server
MD F:\NS1
NET SHARE NS1=F:\NS1
DFSUTIL ROOT ADDSTD \\S4\NS1
DFSUTIL LINK ADD \\S4\NS1\AMER \\S1\AMER
DFSUTIL LINK ADD \\S4\NS1\EMEA \\S2\EMEA
DFSUTIL LINK ADD \\S4\NS1\APAC \\S3\APAC
DIR \\S4\NS1 /S /B
DFSUTIL ROOT EXPORT \\S4\NS1 F:\NS1EXPORT.XML VERBOSE
&lt;/PRE&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;From an end-user perspective, the folder structure under \\S4\NS1 would look like this:&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P mce_keep="true"&gt;&lt;IMG style="WIDTH: 153px; HEIGHT: 272px" title="DFS NSD 1" alt="DFS NSD 1" src="http://blogs.technet.com/photos/josebda2/images/3275497/original.aspx" width=153 height=272 mce_src="http://blogs.technet.com/photos/josebda2/images/3275497/original.aspx"&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;At the end of this script, an XML export of the namespace is created. Here’s what it looks like:&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;NS1EXPORT.XML&lt;/STRONG&gt;&lt;/P&gt;
&lt;BLOCKQUOTE&gt;&lt;PRE&gt;&amp;lt;?xml version="1.0"?&amp;gt;&lt;BR&gt;&amp;lt;Root xmlns = "http://schemas.microsoft.com/dfs/2007/03/dfsutil" majorVersion = "2" minorVersion = "0" &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Name="\\S4\NS1" State="OK" Timeout="300" &amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Target State="ONLINE" &amp;gt;\\S4\NS1&amp;lt;/Target&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Link Name="AMER" State="OK" Timeout="300" &amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Target State="ONLINE" &amp;gt;\\S1\AMER&amp;lt;/Target&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/Link&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Link Name="EMEA" State="OK" Timeout="300" &amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Target State="ONLINE" &amp;gt;\\S2\EMEA&amp;lt;/Target&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/Link&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Link Name="APAC" State="OK" Timeout="300" &amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Target State="ONLINE" &amp;gt;\\S3\APAC&amp;lt;/Target&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/Link&amp;gt;&lt;BR&gt;&amp;lt;/Root&amp;gt;
&lt;/PRE&gt;&lt;/BLOCKQUOTE&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;&lt;STRONG&gt;Namespace option 2 – Flattening out the tree in the namespace&lt;/STRONG&gt;&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;This second options shows the flexibility of DFS-N by creating a flat list of folders from the three servers and their folder structures. Users might find convenient to see a long list of folders without any nesting of folders. This shows how you can point your folder targets (or link targets) to a folder inside the share, not only the root of the file share. Again we’ll use that fourth server (S4) as the namespace server (or target), but now with NS2 as the name of the namespace (or root). Users would use \\S4\NS2 as the UNC path to the entire set of data from all three file servers.&lt;/P&gt;
&lt;P&gt;Here’s a script to create the namespace, which should be run on S4:&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;CREATE-NS2.CMD&lt;/STRONG&gt;&lt;/P&gt;
&lt;BLOCKQUOTE&gt;&lt;PRE&gt;REM ## scenario 2 - Flattening out the tree in the namespace
REM ## RUN THIS SCRIPT in S4, the namespace server
MD F:\NS2
NET SHARE NS2=F:\NS2
DFSUTIL ROOT ADDSTD \\S4\NS2
DFSUTIL LINK ADD \\S4\NS2\AMERPROP \\S1\AMER\PROPOSALS
DFSUTIL LINK ADD \\S4\NS2\AMERMARK \\S1\AMER\MARKETING
DFSUTIL LINK ADD \\S4\NS2\AMERENGI \\S1\AMER\ENGINEERING
DFSUTIL LINK ADD \\S4\NS2\EMEAPROP \\S2\EMEA\PROPOSALS
DFSUTIL LINK ADD \\S4\NS2\EMEAMARK \\S2\EMEA\MARKETING
DFSUTIL LINK ADD \\S4\NS2\EMEAENGI \\S2\EMEA\ENGINEERING
DFSUTIL LINK ADD \\S4\NS2\APACPROP \\S3\APAC\PROPOSALS
DFSUTIL LINK ADD \\S4\NS2\APACMARK \\S3\APAC\MARKETING
DFSUTIL LINK ADD \\S4\NS2\APACENGI \\S3\APAC\ENGINEERING
DIR \\S4\NS2 /S /B
DFSUTIL ROOT EXPORT \\S4\NS2 F:\NS2EXPORT.XML VERBOSE
&lt;/PRE&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;From an end-user perspective, the folder structure under \\S4\NS2 would be flat, like this:&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P mce_keep="true"&gt;&lt;IMG style="WIDTH: 127px; HEIGHT: 212px" title="DFS NSD 2" alt="DFS NSD 2" src="http://blogs.technet.com/photos/josebda2/images/3275498/original.aspx" width=127 height=212 mce_src="http://blogs.technet.com/photos/josebda2/images/3275498/original.aspx"&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;At the end of this script, an XML export of the namespace is created. Here’s what it looks like:&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;NS2EXPORT.XML&lt;/STRONG&gt;&lt;/P&gt;
&lt;BLOCKQUOTE&gt;&lt;PRE&gt;&amp;lt;?xml version="1.0"?&amp;gt;&lt;BR&gt;&amp;lt;Root xmlns = "http://schemas.microsoft.com/dfs/2007/03/dfsutil" majorVersion = "2" minorVersion = "0" &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Name="\\S4\NS2" State="OK" Timeout="300" &amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Target State="ONLINE" &amp;gt;\\S4\NS2&amp;lt;/Target&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Link Name="EMEAMARK" State="OK" Timeout="300" &amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Target State="ONLINE" &amp;gt;\\S2\EMEA\MARKETING&amp;lt;/Target&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/Link&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Link Name="APACENGI" State="OK" Timeout="300" &amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Target State="ONLINE" &amp;gt;\\S3\APAC\ENGINEERING&amp;lt;/Target&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/Link&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Link Name="APACMARK" State="OK" Timeout="300" &amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Target State="ONLINE" &amp;gt;\\S3\APAC\MARKETING&amp;lt;/Target&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/Link&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Link Name="AMERMARK" State="OK" Timeout="300" &amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Target State="ONLINE" &amp;gt;\\S1\AMER\MARKETING&amp;lt;/Target&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/Link&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Link Name="AMERENGI" State="OK" Timeout="300" &amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Target State="ONLINE" &amp;gt;\\S1\AMER\ENGINEERING&amp;lt;/Target&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/Link&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Link Name="AMERPROP" State="OK" Timeout="300" &amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Target State="ONLINE" &amp;gt;\\S1\AMER\PROPOSALS&amp;lt;/Target&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/Link&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Link Name="APACPROP" State="OK" Timeout="300" &amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Target State="ONLINE" &amp;gt;\\S3\APAC\PROPOSALS&amp;lt;/Target&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/Link&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Link Name="EMEAPROP" State="OK" Timeout="300" &amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Target State="ONLINE" &amp;gt;\\S2\EMEA\PROPOSALS&amp;lt;/Target&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/Link&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Link Name="EMEAENGI" State="OK" Timeout="300" &amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Target State="ONLINE" &amp;gt;\\S2\EMEA\ENGINEERING&amp;lt;/Target&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/Link&amp;gt;&lt;BR&gt;&amp;lt;/Root&amp;gt;
&lt;/PRE&gt;&lt;/BLOCKQUOTE&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;&lt;STRONG&gt;Namespace option 3 -&amp;nbsp; Namespace reversing the original tree structure on each file server&lt;/STRONG&gt;&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;Last but not least, the most interesting exhibit of the flexibility of DFS-N. In this case we’ll create a namespace showing the collection of folders group by type instead of geography. DFS-N makes it easy, since we can basically restructure the shares as we create the namespace. This shows how you can also use a tree structure on the DFS folder (or link) side of the equation, which can do a lot when you combine with what we did in option 2 above. Again we’ll use that fourth server (S4) as the namespace server (or target), but now with NS3 as the name of the namespace (or root). Users would use \\S4\NS3 as the UNC path to the entire set of data from all three file servers.&lt;/P&gt;
&lt;P&gt;Here’s a script to create the namespace, which should be run on S4:&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;CREATE-NS3.CMD&lt;/STRONG&gt;&lt;/P&gt;
&lt;BLOCKQUOTE&gt;&lt;PRE&gt;REM ## scenario 3 –  Namespace reversing the original tree structure on each file server
REM ## RUN THIS SCRIPT in S4, the namespace server
MD F:\NS3
NET SHARE NS3=F:\NS3
DFSUTIL ROOT ADDSTD \\S4\NS3
DFSUTIL LINK ADD \\S4\NS3\PROPOSALS\AMER \\S1\AMER\PROPOSALS
DFSUTIL LINK ADD \\S4\NS3\MARKETING\AMER \\S1\AMER\MARKETING
DFSUTIL LINK ADD \\S4\NS3\ENGINEERING\AMER \\S1\AMER\ENGINEERING
DFSUTIL LINK ADD \\S4\NS3\PROPOSALS\EMEA \\S2\EMEA\PROPOSALS
DFSUTIL LINK ADD \\S4\NS3\MARKETING\EMEA \\S2\EMEA\MARKETING
DFSUTIL LINK ADD \\S4\NS3\ENGINEERING\EMEA \\S2\EMEA\ENGINEERING
DFSUTIL LINK ADD \\S4\NS3\PROPOSALS\APAC \\S3\APAC\PROPOSALS
DFSUTIL LINK ADD \\S4\NS3\MARKETING\APAC \\S3\APAC\MARKETING
DFSUTIL LINK ADD \\S4\NS3\ENGINEERING\APAC \\S3\APAC\ENGINEERING
DIR \\S4\NS3 /S /B
DFSUTIL ROOT EXPORT \\S4\NS3 F:\NS3EXPORT.XML VERBOSE
&lt;/PRE&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;From an end-user perspective, the folder structure under \\S4\NS3 is shown below. It examplifies how DFS-N can completely mask the physical infrastructure behind the namespace:&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P mce_keep="true"&gt;&lt;IMG style="WIDTH: 141px; HEIGHT: 277px" title="DFS NSD 3" alt="DFS NSD 3" src="http://blogs.technet.com/photos/josebda2/images/3275499/original.aspx" width=141 height=277 mce_src="http://blogs.technet.com/photos/josebda2/images/3275499/original.aspx"&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;Note that \\S4\NS3\ENGINEERING, \\S4\NS3\MARKETING and \\S4\NS3\PROPOSALS don’t actually exist as DFS folders (or links) at all. They are basically abstract constructs shown only in the UI, which don’t map to any specific target. You can confirm this when you look at the export of the namespace:&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;NS3EXPORT.XML&lt;/STRONG&gt;&lt;/P&gt;
&lt;BLOCKQUOTE&gt;&lt;PRE&gt;&amp;lt;?xml version="1.0"?&amp;gt;&lt;BR&gt;&amp;lt;Root xmlns = "http://schemas.microsoft.com/dfs/2007/03/dfsutil" majorVersion = "2" minorVersion = "0" &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Name="\\S4\NS3" State="OK" Timeout="300" &amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Target State="ONLINE" &amp;gt;\\S4\NS3&amp;lt;/Target&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Link Name="MARKETING\APAC" State="OK" Timeout="300" &amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Target State="ONLINE" &amp;gt;\\S3\APAC\MARKETING&amp;lt;/Target&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/Link&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Link Name="MARKETING\AMER" State="OK" Timeout="300" &amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Target State="ONLINE" &amp;gt;\\S1\AMER\MARKETING&amp;lt;/Target&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/Link&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Link Name="ENGINEERING\EMEA" State="OK" Timeout="300" &amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Target State="ONLINE" &amp;gt;\\S2\EMEA\ENGINEERING&amp;lt;/Target&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/Link&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Link Name="MARKETING\EMEA" State="OK" Timeout="300" &amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Target State="ONLINE" &amp;gt;\\S2\EMEA\MARKETING&amp;lt;/Target&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/Link&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Link Name="ENGINEERING\AMER" State="OK" Timeout="300" &amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Target State="ONLINE" &amp;gt;\\S1\AMER\ENGINEERING&amp;lt;/Target&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/Link&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Link Name="PROPOSALS\AMER" State="OK" Timeout="300" &amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Target State="ONLINE" &amp;gt;\\S1\AMER\PROPOSALS&amp;lt;/Target&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/Link&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Link Name="PROPOSALS\APAC" State="OK" Timeout="300" &amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Target State="ONLINE" &amp;gt;\\S3\APAC\PROPOSALS&amp;lt;/Target&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/Link&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Link Name="PROPOSALS\EMEA" State="OK" Timeout="300" &amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Target State="ONLINE" &amp;gt;\\S2\EMEA\PROPOSALS&amp;lt;/Target&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/Link&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Link Name="ENGINEERING\APAC" State="OK" Timeout="300" &amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Target State="ONLINE" &amp;gt;\\S3\APAC\ENGINEERING&amp;lt;/Target&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/Link&amp;gt;&lt;BR&gt;&amp;lt;/Root&amp;gt;
&lt;/PRE&gt;&lt;/BLOCKQUOTE&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;&lt;STRONG&gt;Conclusion&lt;/STRONG&gt;&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;I hope this helped you understand how DFS-N folder (or links) and folder targets (link targets) work. Please note that we could create this all using the DFS Management graphical user interface (or MMC). We did this in the command line because it’s easier to document that way. Here’s a view from the MMC of all the three namespaces we created:&lt;/P&gt;
&lt;P mce_keep="true"&gt;&lt;IMG style="WIDTH: 794px; HEIGHT: 617px" title="DFS NSD 4" alt="DFS NSD 4" src="http://blogs.technet.com/photos/josebda2/images/3275500/original.aspx" width=794 height=617 mce_src="http://blogs.technet.com/photos/josebda2/images/3275500/original.aspx"&gt;&lt;/P&gt;
&lt;P&gt;Please note that you do not want to create all three namespaces simultaneously. I did this just for showing it here. You would choose the option that best fits your purpose. The goal here is to simplify things for the users, not to confuse them :-)&lt;/P&gt;
&lt;P&gt;I also did not cover replication here at all. In fact, this example uses only DFS-N and can even be run without the DFS-R role service installed. We could certainly design a namespace that takes replication into account, but that’s a topic for another blog post…&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;&lt;STRONG&gt;Links&lt;/STRONG&gt;&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;For more information about DFS-Namespaces, see also the following links from TechNet:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;DFS Management: &lt;A href="http://technet.microsoft.com/en-us/library/cc730736.aspx" mce_href="http://technet.microsoft.com/en-us/library/cc730736.aspx"&gt;http://technet.microsoft.com/en-us/library/cc730736.aspx&lt;/A&gt;.&lt;/LI&gt;
&lt;LI&gt;Checklist: Deploy DFS Namespaces: &lt;A href="http://technet.microsoft.com/en-us/library/cc725830.aspx" mce_href="http://technet.microsoft.com/en-us/library/cc725830.aspx"&gt;http://technet.microsoft.com/en-us/library/cc725830.aspx&lt;/A&gt; &lt;/LI&gt;
&lt;LI&gt;Choose a Namespace Type: &lt;A href="http://technet.microsoft.com/en-us/library/cc770287.aspx" mce_href="http://technet.microsoft.com/en-us/library/cc770287.aspx"&gt;http://technet.microsoft.com/en-us/library/cc770287.aspx&lt;/A&gt; &lt;/LI&gt;&lt;/UL&gt;&lt;/BLOCKQUOTE&gt;&lt;img src="http://blogs.technet.com/aggbug.aspx?PostID=3275501" width="1" height="1"&gt;</description><category domain="http://blogs.technet.com/josebda/archive/tags/Windows+Server+2008/default.aspx">Windows Server 2008</category><category domain="http://blogs.technet.com/josebda/archive/tags/Storage/default.aspx">Storage</category><category domain="http://blogs.technet.com/josebda/archive/tags/Windows+Storage+Server/default.aspx">Windows Storage Server</category><category domain="http://blogs.technet.com/josebda/archive/tags/Windows+Server+2008+R2/default.aspx">Windows Server 2008 R2</category><category domain="http://blogs.technet.com/josebda/archive/tags/DFS/default.aspx">DFS</category></item><item><title>Experimenting with PowerShell Cmdlets, Snap-ins and Modules</title><link>http://blogs.technet.com/josebda/archive/2009/08/09/experimenting-with-powershell-cmdlets-snap-ins-and-modules.aspx</link><pubDate>Mon, 10 Aug 2009 08:12:00 GMT</pubDate><guid isPermaLink="false">d5e57398-b9ef-4490-9955-07cbb4e4a80d:3271983</guid><dc:creator>josebda</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.technet.com/josebda/comments/3271983.aspx</comments><wfw:commentRss>http://blogs.technet.com/josebda/commentrss.aspx?PostID=3271983</wfw:commentRss><wfw:comment>http://blogs.technet.com/josebda/rsscomments.aspx?PostID=3271983</wfw:comment><description>&lt;P&gt;As I continue to experiment with PowerShell v2&amp;nbsp;in Windows Server&amp;nbsp;2008 R2,&amp;nbsp;I will share some of what I learn&amp;nbsp;here on the blog. This time I am focusing on Cmdlets, Snap-ins and Modules.&lt;STRONG&gt;&amp;nbsp;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Cmdlets&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Windows PowerShell introduced the notion of a “cmdlet” (you pronounce it “commandlet”). These are like tools or commands that are typically very simple and to the point (although most have properties or parameters). For instance, there is one to restart a computer (Restart-Computer), one to list the hotfixes installed on a computer (Get-Hotfix) and one to invoke a WMI method (Invoke-WmiMethod). You can get a list of cmdlets using a cmdlet called Get-Command. You can also learn more about a cmdlet by using a cmd-let called Get-Help. &lt;/P&gt;
&lt;P&gt;Try these:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Get-Command&lt;/LI&gt;
&lt;LI&gt;Get-Command -CommandType cmdlet&lt;/LI&gt;
&lt;LI&gt;Get-Command | ?{$_.Commandtype -eq "Cmdlet"}&lt;/LI&gt;
&lt;LI&gt;Get-Help Get-Command&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;&lt;STRONG&gt;Verbs and Nouns&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;You probably noticed that the name of the cmdlets are always divided into two parts, separated by a dash. The first part describes the type of action (called the “Verb”) and the second part describes the object where the action is performed (called the “Noun”). You will notice that the way verbs and nouns are used are quite consistent. You will see some verbs being frequently used, like “Get”, “Set”, “New” and “Remove”. Common nouns include “Item”, “Object”, “Service”, “EventLog”, “Computer” or “Job”. Not every combination of verb and noun is implemented though, you can use Get-Command and Get-Help to find more.&lt;/P&gt;
&lt;P&gt;Try these:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Get-Command -CommandType cmdlet | Select Name, Verb, Noun&lt;/LI&gt;
&lt;LI&gt;Get-Command | ?{$_.Noun -eq "Computer"}&lt;/LI&gt;
&lt;LI&gt;Get-Command | ?{$_.Verb -eq "New"}&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;&lt;STRONG&gt;Parameters&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Cmdlets also commonly include parameters. As with the regular command prompt in Windows and with most command-line tools, these will inform the cmdlet details about what to do. They are many times optional. There is usually a default parameter that can be provided right after the cmdlet name. Others must be explicitly declared by the parameter name starting with a dash. The Get-Help cmdlet, for instance, can be provided with a default parameter to indicate what cmdlet you need help on. You can also specify optional parameters like -examples or -detailed. Parameters vary widely between cmdlets. You can use Get-Help to learn more about the parameters for a specific cmdlet.&lt;/P&gt;
&lt;P&gt;Try these:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Get-Help command&lt;/LI&gt;
&lt;LI&gt;Get-Help Get-Command -examples&lt;/LI&gt;
&lt;LI&gt;Get-Help about_parameters&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;&lt;STRONG&gt;Snap-ins&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;PowerShell can be extended in a number of ways and one of them is to add more cmdlets. The built-in cmdlets, for example, come from some PowerShell Snap-ins. A number of those snap-ins are loaded by default. By default, in Windows Server 2008 R2, the following snap-ins are loaded. You can get a list with Get-PSSnapin:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Microsoft.PowerShell.Diagnostics&lt;/LI&gt;
&lt;LI&gt;Microsoft.WSMan.Management&lt;/LI&gt;
&lt;LI&gt;Microsoft.PowerShell.Core&lt;/LI&gt;
&lt;LI&gt;Microsoft.PowerShell.Utility&lt;/LI&gt;
&lt;LI&gt;Microsoft.PowerShell.Host&lt;/LI&gt;
&lt;LI&gt;Microsoft.PowerShell.Management&lt;/LI&gt;
&lt;LI&gt;Microsoft.PowerShell.Security&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;The Get-Command and Get-Help cmdlets, for instance, come from Microsoft.PowerShell.Core Snap-in. You can load addition snap-in (with Add-PSSnapin). Snap-ins are basically .NET program compiled into DLL files and they can also include (in addition to cmdlets), providers and functions. The snap-in definition includes &lt;/P&gt;
&lt;P&gt;Try these:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Get-Help snapin&lt;/LI&gt;
&lt;LI&gt;Get-PSSnapin&lt;/LI&gt;
&lt;LI&gt;Get-Command -CommandType cmdlet | Select ModuleName | Sort ModuleName –Unique&lt;/LI&gt;
&lt;LI&gt;Get-Command -Module Microsoft.PowerShell.Core&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;&lt;STRONG&gt;Modules&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;With PowerShell v2, cmdlets can also be defined in another type of extension called Modules. By default, Windows Server 2008 R2 PowerShell will not import any modules, but there are a number of modules available for importing. These modules are described in files you can find under the c:\Windows\System32\WindowsPowerShell\v1.0\Modules\ folder, including files with a "psd1" extension that contain details about the module in plain text. Here is a list of the modules available in Windows Server 2008 R2:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;ActiveDirectory&lt;/LI&gt;
&lt;LI&gt;ADRMS&lt;/LI&gt;
&lt;LI&gt;AppLocker&lt;/LI&gt;
&lt;LI&gt;BestPractices&lt;/LI&gt;
&lt;LI&gt;BitsTransfer&lt;/LI&gt;
&lt;LI&gt;GroupPolicy&lt;/LI&gt;
&lt;LI&gt;PSDiagnostics&lt;/LI&gt;
&lt;LI&gt;ServerManager&lt;/LI&gt;
&lt;LI&gt;TroubleshootingPack&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;The ServerManager module, for instance, provides cmdlets that can be use to manage Roles, Role Services and Features in Windows (they replace the deprecated ServerManagerCmd.exe tool). &lt;/P&gt;
&lt;P&gt;Try these:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Get-Help Module&lt;/LI&gt;
&lt;LI&gt;Get-Module -ListAvailable&lt;/LI&gt;
&lt;LI&gt;Get-ChildItem C:\Windows\System32\WindowsPowerShell\v1.0\Modules -Recurse&lt;/LI&gt;
&lt;LI&gt;Get-ChildItem C:\Windows\System32\WindowsPowerShell\v1.0\Modules -Recurse -Filter *.psd1 | Select Name, Length&lt;/LI&gt;
&lt;LI&gt;Get-Content c:\Windows\System32\WindowsPowerShell\v1.0\Modules\ServerManager\ServerManager.psd1&lt;/LI&gt;
&lt;LI&gt;Import-Module ServerManager&lt;/LI&gt;
&lt;LI&gt;Get-Module&lt;/LI&gt;
&lt;LI&gt;Get-Command -Module ServerManager&lt;/LI&gt;
&lt;LI&gt;Get-WindowsFeature&lt;/LI&gt;
&lt;LI&gt;Remove-Module ServerManager&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;I hope this helped you understand a bit more about cmdlets in PowerShell. Try the sample commands (for Windows Server 2008 R2) and keep on learning...&lt;/P&gt;&lt;img src="http://blogs.technet.com/aggbug.aspx?PostID=3271983" width="1" height="1"&gt;</description><category domain="http://blogs.technet.com/josebda/archive/tags/The+Basics/default.aspx">The Basics</category><category domain="http://blogs.technet.com/josebda/archive/tags/Windows+Server+2008+R2/default.aspx">Windows Server 2008 R2</category><category domain="http://blogs.technet.com/josebda/archive/tags/PowerShell/default.aspx">PowerShell</category></item><item><title>SNIA’s Storage Developers Conference 2009 in Santa Clara, CA is coming – Plan to be there on the week of September 14th</title><link>http://blogs.technet.com/josebda/archive/2009/08/08/snia-s-storage-developers-conference-2009-in-santa-clara-ca-is-coming-plan-to-be-there-on-september-14th.aspx</link><pubDate>Sat, 08 Aug 2009 20:04:00 GMT</pubDate><guid isPermaLink="false">d5e57398-b9ef-4490-9955-07cbb4e4a80d:3271731</guid><dc:creator>josebda</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.technet.com/josebda/comments/3271731.aspx</comments><wfw:commentRss>http://blogs.technet.com/josebda/commentrss.aspx?PostID=3271731</wfw:commentRss><wfw:comment>http://blogs.technet.com/josebda/rsscomments.aspx?PostID=3271731</wfw:comment><description>&lt;P&gt;The Storage Networking Industry Association (SNIA) is hosting the 6th Storage Developer Conference (SDC) in the Hyatt Regency in beautiful Santa Clara, CA (Silicon Valley) on the week of September 14th. This event is also co-located with the CIFS/SMB/SMB2 Plugfest. For those working with storage technologies, this event gathers a unique crowd and includes a rich agenda that you can find at &lt;A href="http://www.snia.org/events/storage-developer2009/agenda2009" mce_href="http://www.snia.org/events/storage-developer2009/agenda2009"&gt;http://www.snia.org/events/storage-developer2009/agenda2009&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;Looking at the agenda, you can see it includes presentations and/or panels with key industry players like Amazon, Brocade, EMC, Emulex, Google, HP, IBM, Intel, Isilon, The Linux Foundation, LSI, Microsoft, NetApp, The Samba Team, Sun, Symantec, Tata, Ubiqx, Western Digital and Wipro, just to mention a few names you should readily recognize.&lt;/P&gt;
&lt;P&gt;Microsoft is the CIFS/SMB/SMB2 Plugfest Underwriter and the presentations from Microsoft include topics like BranchCache, Green Technologies, Data Classification on File Servers, Windows File System Transactions, SMB version 2.1, Storage in Virtual Machine Manager, SMB2 Model Based Testing, File Server Capacity Tool (FSCT), DFS-Namespaces Scalability, Storage Management and Delete Notifications in Windows 7. Microsoft is also participating in the panel on Cloud Storage. I am helping deliver the presentations on FSCT and DFS-N, along with a few colleagues, and I will also spend time at the PlugFest. &lt;/P&gt;
&lt;P&gt;On last thing about the SDC and probably one of the most important ones is that the presentations are usually delivered to developers by the actual product teams and&amp;nbsp;frequently the actual developer of the technology is either delivering the presentation or is in the room to take questions. That kind of deep insight is&amp;nbsp;not common in every conference out there. For instance, I remember last year when there was a discussion (during&amp;nbsp;Q&amp;amp;A) about something&amp;nbsp;related to both NTFS and SMB. It was great to see senior developers from both teams in the room (one was the presenter and one was in the audience), discussing with attendees a specific topic that spanned both the local file system and the remote file serving protocol. &lt;/P&gt;
&lt;P&gt;Registration is open at&amp;nbsp; &lt;A href="http://www.snia.org/events/storage-developer2009/" mce_href="http://www.snia.org/events/storage-developer2009/"&gt;http://www.snia.org/events/storage-developer2009/&lt;/A&gt; and you should definitely plan to be there. If you are attending, leave a comment and let’s plan to meet when we get there!&lt;/P&gt;
&lt;P align=center&gt;&lt;A href="http://www.snia.org/events/storage-developer2009" mce_href="http://www.snia.org/events/storage-developer2009"&gt;&lt;IMG border=0 alt="SDC Banner 2009" src="http://www.snia.org/events/storage-developer2009/help_promote/SDC468Banner.gif" width=468 height=60 mce_src="http://www.snia.org/events/storage-developer2009/help_promote/SDC468Banner.gif"&gt; &lt;/A&gt;&lt;/P&gt;&lt;img src="http://blogs.technet.com/aggbug.aspx?PostID=3271731" width="1" height="1"&gt;</description><category domain="http://blogs.technet.com/josebda/archive/tags/Training/default.aspx">Training</category><category domain="http://blogs.technet.com/josebda/archive/tags/Storage/default.aspx">Storage</category><category domain="http://blogs.technet.com/josebda/archive/tags/Events/default.aspx">Events</category><category domain="http://blogs.technet.com/josebda/archive/tags/Windows+7/default.aspx">Windows 7</category><category domain="http://blogs.technet.com/josebda/archive/tags/Windows+Server+2008+R2/default.aspx">Windows Server 2008 R2</category><category domain="http://blogs.technet.com/josebda/archive/tags/SMB/default.aspx">SMB</category><category domain="http://blogs.technet.com/josebda/archive/tags/Interoperability/default.aspx">Interoperability</category><category domain="http://blogs.technet.com/josebda/archive/tags/DFS/default.aspx">DFS</category><category domain="http://blogs.technet.com/josebda/archive/tags/NFS/default.aspx">NFS</category></item><item><title>The good old days of CP/M 2.2 on a TRS-80 with an 8-bit Z80 CPU</title><link>http://blogs.technet.com/josebda/archive/2009/08/07/the-good-old-days-of-cp-m-2-2-on-a-trs-80-with-an-8-bit-z80-cpu.aspx</link><pubDate>Sat, 08 Aug 2009 08:00:00 GMT</pubDate><guid isPermaLink="false">d5e57398-b9ef-4490-9955-07cbb4e4a80d:3271679</guid><dc:creator>josebda</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.technet.com/josebda/comments/3271679.aspx</comments><wfw:commentRss>http://blogs.technet.com/josebda/commentrss.aspx?PostID=3271679</wfw:commentRss><wfw:comment>http://blogs.technet.com/josebda/rsscomments.aspx?PostID=3271679</wfw:comment><description>&lt;P&gt;I was reading the news on the release of Windows 7 and stopped to think of the early days of my IT career and what an OS looked like then. I thought way back to one of the first microcomputer disk operating systems I ever used: CP/M. I actually remembered the few resident commands we had back then in CP/M: DIR, ERA, REN, TYPE, SAVE and USER. I remember that clearly because, back in the 1980s,&amp;nbsp;I taught some classes on CP/M&amp;nbsp;(while still attending college) and even wrote a little booklet (in Portuguese) on it. &lt;/P&gt;
&lt;P&gt;That was back in Brazil and we used a clone of the TRS-80 Model III computer called CP 500 from Micrologica, running on an 8-bit Z80 CPU at 2MHz, 48KB of RAM and a 5 1/4" floppy drive (holding less than 400KB of data). I first used the CP 500 at the school where I taught those classes and ended up owning one later on. Back then, we used applications like&amp;nbsp; Wordstar, SuperCalc and DBase II, and it all used to fit in a single floppy (leaving some free space for some documents).&lt;/P&gt;
&lt;P&gt;It’s amazing how these days there are online references to pretty much anything you can remember. I found Wikipedia pages on:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;The TRS-80 computer from Tandy Corporation: &lt;A href="http://en.wikipedia.org/wiki/TRS-80" mce_href="http://en.wikipedia.org/wiki/TRS-80"&gt;http://en.wikipedia.org/wiki/TRS-80&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;The Z80 processor from Zilog: &lt;A href="http://en.wikipedia.org/wiki/Z80" mce_href="http://en.wikipedia.org/wiki/Z80"&gt;http://en.wikipedia.org/wiki/Z80&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;The CP/M operating system from Digital Research: &lt;A href="http://en.wikipedia.org/wiki/CP/M" mce_href="http://en.wikipedia.org/wiki/CP/M"&gt;http://en.wikipedia.org/wiki/CP/M&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;The Wordstar text editor from MicroPro: &lt;A href="http://en.wikipedia.org/wiki/Wordstar" mce_href="http://en.wikipedia.org/wiki/Wordstar"&gt;http://en.wikipedia.org/wiki/Wordstar&lt;/A&gt; &lt;/LI&gt;
&lt;LI&gt;The SuperCalc spreadsheet from Computer Associates: &lt;A href="http://en.wikipedia.org/wiki/SuperCalc" mce_href="http://en.wikipedia.org/wiki/SuperCalc"&gt;http://en.wikipedia.org/wiki/SuperCalc&lt;/A&gt; &lt;/LI&gt;
&lt;LI&gt;The dBASE II database management system from Ashton-Tate: &lt;A href="http://en.wikipedia.org/wiki/Dbase" mce_href="http://en.wikipedia.org/wiki/Dbase"&gt;http://en.wikipedia.org/wiki/Dbase&lt;/A&gt; &lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;For those that can read&amp;nbsp;Portuguese, I also found:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;A wikipedia page on the Brazilian CP 500 from Prologica: &lt;A href="http://pt.wikipedia.org/wiki/CP500" mce_href="http://pt.wikipedia.org/wiki/CP500"&gt;http://pt.wikipedia.org/wiki/CP500&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;Some detailed information on the CP 500&amp;nbsp;at the Museum of Computing and IT: &lt;A href="http://www.mci.org.br/micro/prologica/cp500.html"&gt;http://www.mci.org.br/micro/prologica/cp500.html&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;An ad from the days of the CP 500 launch in 1982: &lt;A href="http://www.mci.org.br/micro/prologica/cp500_ne_1g.jpg"&gt;http://www.mci.org.br/micro/prologica/cp500_ne_1g.jpg&lt;/A&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;To my amazement, I also found copies of old CP/M manuals dating back to 1976, including the CP/M 2.2 manual from 1983 at &lt;A href="http://www.cpm.z80.de/manuals/cpm22-m.pdf" mce_href="http://www.cpm.z80.de/manuals/cpm22-m.pdf"&gt;http://www.cpm.z80.de/manuals/cpm22-m.pdf&lt;/A&gt;. That trip down memory lane reminded me of the BASIC interpreters we used on those machines (both the resident basic for the TRS-80 and the MBASIC interpreter for CP/M). I also looked at some of my old archives on DVD and found some old MBASIC code I wrote for that computer.&lt;/P&gt;
&lt;P&gt;I also stumbled upon a series of recent videos on the history of Microsoft at&amp;nbsp; &lt;A href="http://channel9.msdn.com/shows/History/" mce_href="http://channel9.msdn.com/shows/History/"&gt;http://channel9.msdn.com/shows/History/&lt;/A&gt;. This includes an episode about the year 1977 when Microsoft released their the first Z80 BASIC interpreter and has Bill Gates talking about the launch of the TRS-80 computer: &lt;A href="http://channel9.msdn.com/shows/History/The-History-of-Microsoft-1977/" mce_href="http://channel9.msdn.com/shows/History/The-History-of-Microsoft-1977/"&gt;http://channel9.msdn.com/shows/History/The-History-of-Microsoft-1977/&lt;/A&gt;.&amp;nbsp; That was also the year Elvis died and the first Star Wars movie was released. &lt;/P&gt;
&lt;P&gt;Yeah… I guess I am getting old :-)&lt;/P&gt;&lt;img src="http://blogs.technet.com/aggbug.aspx?PostID=3271679" width="1" height="1"&gt;</description><category domain="http://blogs.technet.com/josebda/archive/tags/Training/default.aspx">Training</category><category domain="http://blogs.technet.com/josebda/archive/tags/Brazil/default.aspx">Brazil</category><category domain="http://blogs.technet.com/josebda/archive/tags/History/default.aspx">History</category></item><item><title>Strings, Arrays and Functions in PowerShell v2 (and some sample code that speaks for itself :-)</title><link>http://blogs.technet.com/josebda/archive/2009/08/02/strings-arrays-and-functions-in-powershell.aspx</link><pubDate>Mon, 03 Aug 2009 06:30:00 GMT</pubDate><guid isPermaLink="false">d5e57398-b9ef-4490-9955-07cbb4e4a80d:3270194</guid><dc:creator>josebda</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.technet.com/josebda/comments/3270194.aspx</comments><wfw:commentRss>http://blogs.technet.com/josebda/commentrss.aspx?PostID=3270194</wfw:commentRss><wfw:comment>http://blogs.technet.com/josebda/rsscomments.aspx?PostID=3270194</wfw:comment><description>&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;FONT face=Calibri&gt;&lt;FONT size=3&gt;I spent some more time experimenting with PowerShell v2 and here goes my second post about it. &lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;FONT face=Calibri&gt;&lt;FONT size=3&gt;This time around I am focusing on how to define variables, use expressions and create functions.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;o:p&gt;&lt;FONT size=3 face=Calibri&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;B style="mso-bidi-font-weight: normal"&gt;&lt;FONT face=Calibri&gt;&lt;FONT size=3&gt;The "problem" we're solving :-)&lt;/FONT&gt;&lt;/FONT&gt;&lt;/B&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;o:p&gt;&lt;FONT size=3 face=Calibri&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;FONT face=Calibri&gt;&lt;FONT size=3&gt;To make it fun, I decided to create a little script that creates some random syllables, words and sentences using a set of rules. This will come out as some nonsense sentences, but they should be pronounceable. I wrote this little program in several languages before and it generally exercises a number of concepts around manipulating arrays and strings. It uses random numbers and sets of consonants and vowels, plus some logic around the number of syllables per word, words per sentence, etc.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;o:p&gt;&lt;FONT size=3 face=Calibri&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;FONT face=Calibri&gt;&lt;FONT size=3&gt;Here are a few sample sentences created by the program:&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;
&lt;DIV style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;FONT face=Calibri&gt;&lt;FONT size=3&gt;Inepirula beicmicso phosa.&lt;/FONT&gt;&lt;/FONT&gt;&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;FONT face=Calibri&gt;&lt;FONT size=3&gt;Ci muesit sacoipae naepdave opeefane.&lt;/FONT&gt;&lt;/FONT&gt;&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;FONT face=Calibri&gt;&lt;FONT size=3&gt;Kikipor sofestrysu crasha browohocyn.&lt;/FONT&gt;&lt;/FONT&gt;&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;FONT face=Calibri&gt;&lt;FONT size=3&gt;De dyczershaco kurensataer mexi trerememee.&lt;/FONT&gt;&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;FONT face=Calibri&gt;&lt;FONT size=3&gt;Cie he cho cyuba lio goabryntune.&lt;/FONT&gt;&lt;/FONT&gt;&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;FONT face=Calibri&gt;&lt;FONT size=3&gt;Quiaphe breiepco henureme sopoche.&lt;/FONT&gt;&lt;/FONT&gt;&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;FONT face=Calibri&gt;&lt;FONT size=3&gt;Pychurmabie osipi leberoi.&lt;/FONT&gt;&lt;/FONT&gt;&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;FONT face=Calibri&gt;&lt;FONT size=3&gt;Ne trirorce auencuep je sucootoi yeelneer.&lt;/FONT&gt;&lt;/FONT&gt;&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;FONT face=Calibri&gt;&lt;FONT size=3&gt;Uchekepian rinsi reypbar.&lt;/FONT&gt;&lt;/FONT&gt;&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;FONT face=Calibri&gt;&lt;FONT size=3&gt;Oeciurgo vacra go.&lt;/FONT&gt;&lt;/FONT&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;FONT face=Calibri&gt;&lt;FONT size=3&gt;It’s gibberish, I know, but you should be able to pronounce it. &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face=Calibri&gt;&lt;FONT size=3&gt;In fact, I went one step further and used the Speech API in Windows to actually have the computer say them out loud. &lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;FONT face=Calibri&gt;&lt;FONT size=3&gt;P.S.: Due to its random nature, it is possible (although somewhat unlikely) that the program might spit out some bad words in some real language. I apologize in advance :-)&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;o:p&gt;&lt;FONT size=3 face=Calibri&gt;&lt;/FONT&gt;&lt;/o:p&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;B style="mso-bidi-font-weight: normal"&gt;&lt;FONT face=Calibri&gt;&lt;FONT size=3&gt;What I learned&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/B&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;o:p&gt;&lt;FONT size=3 face=Calibri&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;FONT face=Calibri&gt;&lt;FONT size=3&gt;PowerShell proved quite capable of creating this program. In fact, due to its interesting abilities to turn strings into arrays, rich expressions and loop constructs, it was no problem at all. &lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;FONT face=Calibri&gt;&lt;FONT size=3&gt;I did learn a few details that always vary from language to language:&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="TEXT-INDENT: -0.25in; MARGIN: 0in 0in 0pt 0.5in; mso-list: l0 level1 lfo2" class=MsoListParagraph&gt;&lt;SPAN style="FONT-FAMILY: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol"&gt;&lt;SPAN style="mso-list: Ignore"&gt;&lt;FONT size=3&gt;·&lt;/FONT&gt;&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT face=Calibri&gt;&lt;FONT size=3&gt;PowerShell uses a $ sign before the name of variables&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="TEXT-INDENT: -0.25in; MARGIN: 0in 0in 0pt 0.5in; mso-list: l0 level1 lfo2" class=MsoListParagraph&gt;&lt;SPAN style="FONT-FAMILY: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol"&gt;&lt;SPAN style="mso-list: Ignore"&gt;&lt;FONT size=3&gt;·&lt;/FONT&gt;&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT face=Calibri&gt;&lt;FONT size=3&gt;When creating variables, you can specify the type in [], but that is optional&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="TEXT-INDENT: -0.25in; MARGIN: 0in 0in 0pt 0.5in; mso-list: l0 level1 lfo2" class=MsoListParagraph&gt;&lt;SPAN style="FONT-FAMILY: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol"&gt;&lt;SPAN style="mso-list: Ignore"&gt;&lt;FONT size=3&gt;·&lt;/FONT&gt;&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT face=Calibri&gt;&lt;FONT size=3&gt;Common types include int32, array, string and object &lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="TEXT-INDENT: -0.25in; MARGIN: 0in 0in 0pt 0.5in; mso-list: l0 level1 lfo2" class=MsoListParagraph&gt;&lt;SPAN style="FONT-FAMILY: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol"&gt;&lt;SPAN style="mso-list: Ignore"&gt;&lt;FONT size=3&gt;·&lt;/FONT&gt;&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT face=Calibri&gt;&lt;FONT size=3&gt;Get-Random(n) will give you a random integer between 0 and (n-1).&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="TEXT-INDENT: -0.25in; MARGIN: 0in 0in 0pt 0.5in; mso-list: l0 level1 lfo2" class=MsoListParagraph&gt;&lt;SPAN style="FONT-FAMILY: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol"&gt;&lt;SPAN style="mso-list: Ignore"&gt;&lt;FONT size=3&gt;·&lt;/FONT&gt;&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT face=Calibri&gt;&lt;FONT size=3&gt;Strings are arrays of characters starting at item number 0&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="TEXT-INDENT: -0.25in; MARGIN: 0in 0in 0pt 0.5in; mso-list: l0 level1 lfo2" class=MsoListParagraph&gt;&lt;SPAN style="FONT-FAMILY: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol"&gt;&lt;SPAN style="mso-list: Ignore"&gt;&lt;FONT size=3&gt;·&lt;/FONT&gt;&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT face=Calibri&gt;&lt;FONT size=3&gt;The -split operator can turn a string into an array, splitting the string using a specified delimiter&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="TEXT-INDENT: -0.25in; MARGIN: 0in 0in 0pt 0.5in; mso-list: l0 level1 lfo2" class=MsoListParagraph&gt;&lt;SPAN style="FONT-FAMILY: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol"&gt;&lt;SPAN style="mso-list: Ignore"&gt;&lt;FONT size=3&gt;·&lt;/FONT&gt;&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT face=Calibri&gt;&lt;FONT size=3&gt;Substring is the function to get a piece of a string&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="TEXT-INDENT: -0.25in; MARGIN: 0in 0in 0pt 0.5in; mso-list: l0 level1 lfo2" class=MsoListParagraph&gt;&lt;SPAN style="FONT-FAMILY: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol"&gt;&lt;SPAN style="mso-list: Ignore"&gt;&lt;FONT size=3&gt;·&lt;/FONT&gt;&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT face=Calibri&gt;&lt;FONT size=3&gt;Length is the function to get the number of characters in a string (or items in an array)&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="TEXT-INDENT: -0.25in; MARGIN: 0in 0in 0pt 0.5in; mso-list: l0 level1 lfo2" class=MsoListParagraph&gt;&lt;SPAN style="FONT-FAMILY: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol"&gt;&lt;SPAN style="mso-list: Ignore"&gt;&lt;FONT size=3&gt;·&lt;/FONT&gt;&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT face=Calibri&gt;&lt;FONT size=3&gt;Some operators are a bit tricky and it doesn’t use the regular "&amp;lt;", "&amp;gt;", "&amp;lt;=", "&amp;gt;=", "!="&amp;nbsp;and "==" operators. You&amp;nbsp;need to use "-lt", "-gt", "-le", "-ge", "-ne"&amp;nbsp;and "-eq" instead (there are many more). You get used to it.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="TEXT-INDENT: -0.25in; MARGIN: 0in 0in 0pt 0.5in; mso-list: l0 level1 lfo2" class=MsoListParagraph&gt;&lt;SPAN style="FONT-FAMILY: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol"&gt;&lt;SPAN style="mso-list: Ignore"&gt;&lt;FONT size=3&gt;·&lt;/FONT&gt;&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT face=Calibri&gt;&lt;FONT size=3&gt;You can use the “+=”, “-=”, “*=” assignment syntax as you have in C++, C#&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="TEXT-INDENT: -0.25in; MARGIN: 0in 0in 0pt 0.5in; mso-list: l0 level1 lfo2" class=MsoListParagraph&gt;&lt;SPAN style="FONT-FAMILY: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol"&gt;&lt;SPAN style="mso-list: Ignore"&gt;&lt;FONT size=3&gt;·&lt;/FONT&gt;&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT face=Calibri&gt;&lt;FONT size=3&gt;You will sometimes need to enclose an expression in ( ) so that it is not confused with a statement&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="TEXT-INDENT: -0.25in; MARGIN: 0in 0in 0pt 0.5in; mso-list: l0 level1 lfo2" class=MsoListParagraph&gt;&lt;SPAN style="FONT-FAMILY: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol"&gt;&lt;SPAN style="mso-list: Ignore"&gt;&lt;FONT size=3&gt;·&lt;/FONT&gt;&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT face=Calibri&gt;&lt;FONT size=3&gt;You can use the multiply operator to repeat a string. For instance (“-“ * 5) yields “-----“. This is one of those cases where you must use the ().&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="TEXT-INDENT: -0.25in; MARGIN: 0in 0in 0pt 0.5in; mso-list: l0 level1 lfo2" class=MsoListParagraph&gt;&lt;SPAN style="FONT-FAMILY: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol"&gt;&lt;SPAN style="mso-list: Ignore"&gt;&lt;FONT size=3&gt;·&lt;/FONT&gt;&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT face=Calibri&gt;&lt;FONT size=3&gt;You can create COM objects with the ‘New-Object -ComObject “name”’ syntax&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="TEXT-INDENT: -0.25in; MARGIN: 0in 0in 0pt 0.5in; mso-list: l0 level1 lfo2" class=MsoListParagraph&gt;&lt;SPAN style="FONT-FAMILY: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol"&gt;&lt;SPAN style="mso-list: Ignore"&gt;&lt;FONT size=3&gt;·&lt;/FONT&gt;&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT face=Calibri&gt;&lt;FONT size=3&gt;In loops and conditional statements, you use () to specify the conditions and { } to group the statements&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="TEXT-INDENT: -0.25in; MARGIN: 0in 0in 0pt 0.5in; mso-list: l0 level1 lfo2" class=MsoListParagraph&gt;&lt;SPAN style="FONT-FAMILY: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol"&gt;&lt;SPAN style="mso-list: Ignore"&gt;&lt;FONT size=3&gt;·&lt;/FONT&gt;&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT face=Calibri&gt;&lt;FONT size=3&gt;The default execution policy will not let you run an unsigned script. You can bypass this using “Set-ExecutionPolicy Unrestricted -scope process”. Note that this will only apply for the running process, due to the –scope parameter. You can set this at a wider scope, but you probably shouldn’t, for security reasons.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;o:p&gt;&lt;FONT size=3 face=Calibri&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;&lt;o:p&gt;&lt;FONT size=3 face=Calibri&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;B style="mso-bidi-font-weight: normal"&gt;&lt;FONT face=Calibri&gt;&lt;FONT size=3&gt;Closing comments&lt;/FONT&gt;&lt;/FONT&gt;&lt;/B&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;FONT face=Calibri&gt;&lt;FONT size=3&gt;Last but not least, find the code below. I tested this on Windows Server 2008 R2. &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face=Calibri&gt;&lt;FONT size=3&gt;Try it only on a test machine. &lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;FONT face=Calibri&gt;&lt;FONT size=3&gt;You should probably save it in a file called sentences.ps1 (for instance) and run it from there using “.\sentences.ps1”.&amp;nbsp;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;FONT face=Calibri&gt;&lt;FONT size=3&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&lt;/SPAN&gt;Consider using the Powershell ISE, which includes a debugger. &lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;o:p&gt;&lt;FONT size=3 face=Calibri&gt;Use CTRL-C to stop it before&amp;nbsp;it says all 10 sentences.&amp;nbsp;You might have to wait&amp;nbsp;for it to end saying a sentence&amp;nbsp;before it actually stops.&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/P&gt;&lt;o:p&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;B style="mso-bidi-font-weight: normal"&gt;&lt;FONT face=Calibri&gt;&lt;FONT size=3&gt;The code&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/B&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'"&gt;&lt;FONT size=3&gt;[array] $Vowels = "a;a;a;a;e;e;e;e;i;i;i;o;o;o;u;u;y" -split ";"&lt;BR&gt;[array] $Consonants = "b;b;br;c;c;c;ch;cr;d;f;g;h;j;k;l;m;m;m;n;n;p;p;ph;qu;r;r;r;s;s;s;sh;t;tr;v;w;x;z" -split ";"&lt;BR&gt;[array] $Endings = "r;r;s;r;l;n;n;n;c;c;t;p" -split ";"&lt;BR&gt;[object] $Voice = New-Object -ComObject "SAPI.SPVoice"&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'"&gt;&lt;FONT size=3&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'"&gt;&lt;FONT size=3&gt;function Get-RandomVowel &lt;BR&gt;{ return $Vowels[(Get-Random($Vowels.Length))] }&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'"&gt;&lt;FONT size=3&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'"&gt;&lt;FONT size=3&gt;function Get-RandomConsonant&lt;BR&gt;{ return $Consonants[(Get-Random($Consonants.Length))] }&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'"&gt;&lt;FONT size=3&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'"&gt;&lt;FONT size=3&gt;function Get-RandomEnding&lt;BR&gt;{ return $Endings[(Get-Random($Endings.Length))] }&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'"&gt;&lt;FONT size=3&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'"&gt;&lt;FONT size=3&gt;function Get-RandomSyllable ([int32] $PercentConsonants, [int32] $PercentEndings)&lt;BR&gt;{&amp;nbsp; &lt;BR&gt;&amp;nbsp;&amp;nbsp; [string] $Syllable = ""&lt;BR&gt;&amp;nbsp;&amp;nbsp; if ((Get-Random(100)) -le $PercentConsonants) &lt;BR&gt;&amp;nbsp;&amp;nbsp; { $Syllable+= Get-RandomConsonant }&lt;BR&gt;&amp;nbsp;&amp;nbsp; $Syllable+= Get-RandomVowel&lt;BR&gt;&amp;nbsp;&amp;nbsp; if ((Get-Random(100)) -le $PercentEndings) &lt;BR&gt;&amp;nbsp;&amp;nbsp; { $Syllable+= Get-RandomEnding }&lt;BR&gt;&amp;nbsp;&amp;nbsp; return $Syllable&lt;BR&gt;}&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'"&gt;&lt;FONT size=3&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'"&gt;&lt;FONT size=3&gt;function Get-RandomWord ([int32] $MinSyllables, [int32] $MaxSyllables)&lt;BR&gt;{&amp;nbsp; &lt;BR&gt;&amp;nbsp;&amp;nbsp; [string] $Word = ""&lt;BR&gt;&amp;nbsp;&amp;nbsp; [int32] $Syllables = ($MinSyllables) + (Get-Random(($MaxSyllables - $MinSyllables + 1)))&lt;BR&gt;&amp;nbsp;&amp;nbsp; for ([int32] $Count=1; $Count -le $Syllables; $Count++) &lt;BR&gt;&amp;nbsp;&amp;nbsp; { $Word += Get-RandomSyllable 70 20 } &amp;lt;# Consonant 70% of the time, Ending 20% #&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp; return $Word&lt;BR&gt;}&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'"&gt;&lt;FONT size=3&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'"&gt;&lt;FONT size=3&gt;function Get-RandomSentence ([int32] $MinWords, [int32] $MaxWords) &lt;BR&gt;{&amp;nbsp; &lt;BR&gt;&amp;nbsp;&amp;nbsp; [string] $Sentence = ""&lt;BR&gt;&amp;nbsp;&amp;nbsp; [int32] $Words = ($MinWords) + (Get-Random($MaxWords - $MinWords + 1))&lt;BR&gt;&amp;nbsp;&amp;nbsp; for ([int32] $Count=1; $Count -le $Words; $Count++) &lt;BR&gt;&amp;nbsp;&amp;nbsp; { &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $Sentence += Get-RandomWord 1 5 &amp;lt;# Word with 1 to 5 syllables #&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $Sentence += " "&lt;BR&gt;&amp;nbsp;&amp;nbsp; }&lt;BR&gt;&amp;nbsp;&amp;nbsp; $Sentence = $Sentence.substring(0,1).ToUpper() + $Sentence.substring(1,$Sentence.Length-2) + "."&lt;BR&gt;&amp;nbsp;&amp;nbsp; return $Sentence&lt;BR&gt;}&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'"&gt;&lt;FONT size=3&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;BR&gt;for ([int32] $Count=1; $Count -le 10; $Count++) &lt;BR&gt;{ &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; [string] $Sentence = Get-RandomSentence 2 6 &amp;lt;# Sentence with 2 to 6 words #&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Write-Host $Sentence&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Write-Host ("-" * $Sentence.Length)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; [int32] $VResult = $Voice.Speak($Sentence)&lt;BR&gt;}&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'"&gt;&lt;FONT size=3&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'"&gt;&lt;FONT size=3&gt;&lt;B style="mso-bidi-font-weight: normal"&gt;&lt;FONT face=Calibri&gt;&lt;FONT size=3&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/B&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;o:p&gt;&lt;FONT size=3 face=Calibri&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'"&gt;&lt;FONT size=3&gt;&lt;B style="mso-bidi-font-weight: normal"&gt;&lt;FONT face=Calibri&gt;&lt;FONT size=3&gt;Improve it&lt;/FONT&gt;&lt;/FONT&gt;&lt;/B&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;o:p&gt;&lt;FONT size=3 face=Calibri&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;FONT face=Calibri&gt;&lt;FONT size=3&gt;Now that you got this code, you might want to work on it and make it better. Maybe changing the frequency of the consonants, vowels and endings. Maybe tweak the number of syllables per word or words per sentence. You might even think of ways to make it generate some poetry with the right number of syllables per sentence and some rhyming. Have fun…&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;img src="http://blogs.technet.com/aggbug.aspx?PostID=3270194" width="1" height="1"&gt;</description><category domain="http://blogs.technet.com/josebda/archive/tags/Windows+7/default.aspx">Windows 7</category><category domain="http://blogs.technet.com/josebda/archive/tags/Windows+Server+2008+R2/default.aspx">Windows Server 2008 R2</category><category domain="http://blogs.technet.com/josebda/archive/tags/PowerShell/default.aspx">PowerShell</category></item><item><title>Experimenting with PowerShell v2</title><link>http://blogs.technet.com/josebda/archive/2009/07/25/experimenting-with-powershell.aspx</link><pubDate>Sat, 25 Jul 2009 22:30:00 GMT</pubDate><guid isPermaLink="false">d5e57398-b9ef-4490-9955-07cbb4e4a80d:3261142</guid><dc:creator>josebda</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.technet.com/josebda/comments/3261142.aspx</comments><wfw:commentRss>http://blogs.technet.com/josebda/commentrss.aspx?PostID=3261142</wfw:commentRss><wfw:comment>http://blogs.technet.com/josebda/rsscomments.aspx?PostID=3261142</wfw:comment><description>&lt;P&gt;Powershell is a&amp;nbsp;command line interface for Windows that offers a&amp;nbsp;very powerful and flexible model.&lt;BR&gt;It is now a feature included with Windows 7 and Windows Server 2008 R2, not an optional download as before.&lt;BR&gt;In this post, I show some sample commands that&amp;nbsp;can help you understand some of the basic features and a few more complex ones.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;If you never played with it before, try running &lt;STRONG&gt;Get-Help &lt;/STRONG&gt;and &lt;STRONG&gt;Get-Command &lt;/STRONG&gt;in a PowerShell prompt. &lt;/P&gt;
&lt;TABLE border=1 width="100%"&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD width="50%"&gt;Shows a list of commands: &lt;/TD&gt;
&lt;TD width="50%"&gt;Get-Command&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="50%"&gt;Shows the help overview: &lt;/TD&gt;
&lt;TD width="50%"&gt;Get-Help&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="50%"&gt;Show the help for “Dir”:&lt;/TD&gt;
&lt;TD width="50%"&gt;Get-Help Dir&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;
&lt;P&gt;Let's use the &lt;STRONG&gt;Dir &lt;/STRONG&gt;command now&amp;nbsp;(actually an alias for &lt;STRONG&gt;Get-ChildItem&lt;/STRONG&gt;) and a number of ways to transform the output using &lt;STRONG&gt;pipeline functions&lt;/STRONG&gt;:&lt;/P&gt;
&lt;TABLE border=1 width="100%"&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD width="50%"&gt;Shows Directory:&lt;/TD&gt;
&lt;TD width="50%"&gt;Dir&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="50%"&gt;Shows Directory in list format (two ways):&lt;/TD&gt;
&lt;TD width="50%"&gt;Dir | Format-List &lt;BR&gt;Dir | FL&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="50%"&gt;Shows Directory sorted by file length:&lt;/TD&gt;
&lt;TD width="50%"&gt;Dir | Sort Length&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="50%"&gt;Shows Directory sorted by file length in descending order:&lt;/TD&gt;
&lt;TD width="50%"&gt;Dir | Sort Length –Descending&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="50%"&gt;Shows all the methods and properties for the objects resulting from Dir (files and folders):&lt;/TD&gt;
&lt;TD width="50%"&gt;Dir | Get-Member&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="50%"&gt;Shows a selected list of properties instead of the default list:&lt;/TD&gt;
&lt;TD width="50%"&gt;Dir | Select&amp;nbsp; Directory, Name, Extension, Length&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="50%"&gt;Shows directory in HTML format (not much use going to the console like this, though):&lt;/TD&gt;
&lt;TD width="50%"&gt;Dir | ConvertTo-Html &lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="50%"&gt;Output the Directory listing to a file:&lt;/TD&gt;
&lt;TD width="50%"&gt;Dir | Out-File psfilelist.txt&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="50%"&gt;Output the Directory listing to a grid in window:&lt;/TD&gt;
&lt;TD width="50%"&gt;Dir | Out-GridView&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="50%"&gt;All together now: Shows selected list of properties, sorted, in HTML, going to a file. You need to open the file yourself:&lt;/TD&gt;
&lt;TD width="50%"&gt;Dir | Select Directory, Name, Extension, Length | Sort Length -Descending | ConvertTo-Html | Out-File psfilelist.htm&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;
&lt;P&gt;Now exploring other “drives” in PowerShell with &lt;STRONG&gt;Get-PSDrive&lt;/STRONG&gt;, including the certificate store and the registry.&lt;/P&gt;
&lt;TABLE border=1 width="100%"&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD width="50%"&gt;Get list of PowerShell “drives”:&lt;/TD&gt;
&lt;TD width="50%"&gt;Get-PSDrive&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="50%"&gt;Shows environment variables:&lt;/TD&gt;
&lt;TD width="50%"&gt;Dir ENV:\&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="50%"&gt;Shows the certiticate store:&lt;/TD&gt;
&lt;TD width="50%"&gt;Dir CERT:\&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="50%"&gt;Shows root certificates for the machine:&lt;/TD&gt;
&lt;TD width="50%"&gt;Dir CERT:\LocalMachine\Root | Select FriendlyName, NotAfter&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="50%"&gt;Shows “HK Local Machine” portion of the registry&lt;/TD&gt;
&lt;TD width="50%"&gt;Dir HKLM:&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="50%"&gt;Shows specified part of the registry:&lt;/TD&gt;
&lt;TD width="50%"&gt;Dir HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;
&lt;P&gt;Another easy way to get interesting data is with &lt;STRONG&gt;Get-Process&lt;/STRONG&gt;.&lt;/P&gt;
&lt;TABLE border=1 width="100%"&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD width="50%"&gt;List running processes:&lt;/TD&gt;
&lt;TD width="50%"&gt;Get-Process&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="50%"&gt;Shows all the methods and properties for the process objects:&lt;/TD&gt;
&lt;TD width="50%"&gt;Get-Process | Get-Member&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="50%"&gt;Shows selected list of properties of running processes, formatted as table:&lt;/TD&gt;
&lt;TD width="50%"&gt;Get-Process | Select Id, Name, Product, CPU, WorkingSet | Format-Table –autosize&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;
&lt;P&gt;Combining PowerShell with WMI is also very interesting. You can leverage any WMI provider on the box using &lt;STRONG&gt;Get-WmiObject&lt;/STRONG&gt;.&lt;BR&gt;You can get a list of WMI Classes from &lt;A href="http://msdn.microsoft.com/en-us/library/aa394554(VS.85).aspx" mce_href="http://msdn.microsoft.com/en-us/library/aa394554(VS.85).aspx"&gt;http://msdn.microsoft.com/en-us/library/aa394554(VS.85).aspx&lt;/A&gt; &lt;/P&gt;
&lt;TABLE border=1 width="100%"&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD width="50%"&gt;Shows all WMI objects with "disk" on the name:&lt;/TD&gt;
&lt;TD width="50%"&gt;Get-WmiObject -List *disk* | Select Name&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="50%"&gt;Shows disk partitions:&lt;/TD&gt;
&lt;TD width="50%"&gt;Get-WmiObject Win32_DiskPartition | Select Name, Size, BootPartition&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="50%"&gt;Shows logical disks:&lt;/TD&gt;
&lt;TD width="50%"&gt;Get-WmiObject Win32_LogicalDisk | Select DeviceID, DriveType, Size, FreeSpace&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="50%"&gt;Shows mapped drives (with NET USE command):&lt;/TD&gt;
&lt;TD width="50%"&gt;Get-WmiObject Win32_MappedLogicalDisk | Select Name, ProviderName, FileSystem, Size, FreeSpace | Format-Table&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;
&lt;P&gt;PowerShell also lets you call the &lt;STRONG&gt;.NET Framework&lt;/STRONG&gt;, which is a huge library.&lt;BR&gt;You need to use a syntax where the full class name (library.class) is mentioned in [], followed by a :: and the method name.&lt;/P&gt;
&lt;P&gt;You can find a reference for it at &lt;A href="http://msdn.microsoft.com/en-us/library/ms229335.aspx" mce_href="http://msdn.microsoft.com/en-us/library/ms229335.aspx"&gt;http://msdn.microsoft.com/en-us/library/ms229335.aspx&lt;/A&gt;&lt;/P&gt;
&lt;TABLE border=1 width="100%"&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD width="50%"&gt;Shows network interfaces:&lt;/TD&gt;
&lt;TD width="50%"&gt;[System.Net.NetworkInformation.NetworkInterface]::GetAllNetworkInterfaces() | Select Name, Speed, OperationalStatus&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="50%"&gt;Shows identity of the current logged user:&lt;/TD&gt;
&lt;TD width="50%"&gt;[System.Security.Principal.WindowsIdentity]::GetCurrent() | Select Name, AuthenticationType, IsAuthenticated, IsSystem&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="50%"&gt;Shows drive information:&lt;/TD&gt;
&lt;TD width="50%"&gt;[System.IO.DriveInfo]::GetDrives() | Select Name, DriveType, IsReady, TotalSize, TotalFreeSpace, RootDirectory | Format-Table -autosize&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;
&lt;P&gt;It’s also interesting to iterate through the list of resulting objects, to perform additional actions.&lt;BR&gt;You use the &lt;STRONG&gt;ForEach &lt;/STRONG&gt;keyword (actually an alias for &lt;STRONG&gt;ForEach-Object&lt;/STRONG&gt;), which allows you to run something for each item. The item is referred to as $_.&lt;BR&gt;You can also use the symbol % instead of ForEach-Object.&lt;/P&gt;
&lt;TABLE border=1 width="100%"&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD width="50%"&gt;Change to the application data folder, which is obtained from the environment variables:&lt;/TD&gt;
&lt;TD width="50%"&gt;Dir Env:\AppData | ForEach { CD $_.Value }&lt;BR&gt;Dir Env:\AppData |&amp;nbsp;% { CD $_.Value } &lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="50%"&gt;Show all text files enumerated by the Dir command:&lt;/TD&gt;
&lt;TD width="50%"&gt;Dir *.TXT | ForEach { Type $_ }&lt;BR&gt;Dir *.TXT |&amp;nbsp;% { Type $_ }&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="50%"&gt;Show root directory for all drives enumerated by GetDrives:&lt;/TD&gt;
&lt;TD width="50%"&gt;[System.IO.DriveInfo]::GetDrives() | foreach { Dir $_ }&lt;BR&gt;[System.IO.DriveInfo]::GetDrives() |&amp;nbsp;% { Dir $_ }&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;
&lt;P&gt;A similar syntax is used for &lt;STRONG&gt;Where &lt;/STRONG&gt;(actually an alias for &lt;STRONG&gt;Where-Object&lt;/STRONG&gt;), which can be used to filter objects in the pipeline.&lt;BR&gt;You can also use the symbol&amp;nbsp;? instead of Where-Object.&lt;/P&gt;
&lt;TABLE border=1 width="100%"&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD width="50%"&gt;Show selected properties of processes using more than 10MB of memory, in descending order, formatted as table:&lt;/TD&gt;
&lt;TD width="50%"&gt;Get-Process | Select Id, Name, Product, CPU, WorkingSet | Where { $_.WorkingSet -gt 10*1024*1024} | Sort WorkingSet -Descending | Format-Table –autosize&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="50%"&gt;Shows all services that are stopped:&lt;/TD&gt;
&lt;TD width="50%"&gt;Get-Service | Where { $_.Status -eq "Stopped" }&lt;BR&gt;Get-Service |&amp;nbsp;? { $_.Status -eq "Stopped" }&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;
&lt;P&gt;Now let's focus on the &lt;STRONG&gt;DFS Namespaces &lt;/STRONG&gt;service, which is something I’m working on (these will only work if the box is a Windows Server file server with the &lt;STRONG&gt;DFS-N&lt;/STRONG&gt; role service installed):&lt;/P&gt;
&lt;TABLE border=1 width="100%"&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD width="50%"&gt;Shows all 2000 mode domain namespaces on the current computer, using the registry:&lt;/TD&gt;
&lt;TD width="50%"&gt;Dir HKLM:\Software\Microsoft\DFS\Roots\Domain&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="50%"&gt;Shows all 2008 mode&amp;nbsp; domain namespaces on the current computer, using the registry:&lt;/TD&gt;
&lt;TD width="50%"&gt;Dir HKLM:\Software\Microsoft\DFS\Roots\DomainV2&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="50%"&gt;Shows all standalone namespaces on the current computer, using the registry:&lt;/TD&gt;
&lt;TD width="50%"&gt;Dir HKLM:\Software\Microsoft\DFS\Roots\Standalone&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="50%"&gt;Shows all namespaces of all types on the current computer, using the registry:&lt;/TD&gt;
&lt;TD width="50%"&gt;Dir HKLM:\Software\Microsoft\DFS\Roots –Recurse | Select PSChildName, ValueCount, Property&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="50%"&gt;Shows properties of the DFS-N service in the registry:&lt;/TD&gt;
&lt;TD width="50%"&gt;Dir HKLM:\System\CurrentControlSet\Services\Dfs&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="50%"&gt;Get status of DFS Service (formatted as list)&lt;/TD&gt;
&lt;TD width="50%"&gt;Get-Service DFS | fl&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="50%"&gt;Starts the DFS-N service (two ways):&lt;/TD&gt;
&lt;TD width="50%"&gt;Get-Service DFS |&amp;nbsp;Start-Service &lt;BR&gt;Get-Service DFS | % { $_.Start }&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="50%"&gt;Shows all WMI objects with DFS on the name (will include some DFS-R ones as well):&lt;/TD&gt;
&lt;TD width="50%"&gt;Get-WmiObject -List *DFS*&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="50%"&gt;Shows DFS Targets on the current computer, using WMI:&lt;/TD&gt;
&lt;TD width="50%"&gt;Get-WmiObject Win32_DFSTarget&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="50%"&gt;Shows selected properties of DFS nodes on the current computer, including it's a root and its state, using WMI:&lt;/TD&gt;
&lt;TD width="50%"&gt;Get-WmiObject Win32_DFSNode | Select Name, Root, State | Format-Table –autosize&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;
&lt;P&gt;I hope that has helped you see how interesting PowerShell can be. Here are a few &lt;STRONG&gt;links &lt;/STRONG&gt;for additional information and tutorials:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Windows Powershell Owner's Manual: &lt;A href="http://www.microsoft.com/technet/scriptcenter/topics/winpsh/manual/default.mspx"&gt;http://www.microsoft.com/technet/scriptcenter/topics/winpsh/manual/default.mspx&lt;/A&gt;&amp;nbsp;&lt;/LI&gt;
&lt;LI&gt;List of cmdlets (help topics): &lt;A href="http://technet.microsoft.com/en-us/library/dd347701.aspx"&gt;http://technet.microsoft.com/en-us/library/dd347701.aspx&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;Powershell ScriptCenter: &lt;A href="http://technet.microsoft.com/en-us/scriptcenter/dd742419.aspx"&gt;http://technet.microsoft.com/en-us/scriptcenter/dd742419.aspx&lt;/A&gt;&amp;nbsp;&lt;/LI&gt;
&lt;LI&gt;Powershell on Wikipedia: &lt;A href="http://en.wikipedia.org/wiki/Windows_PowerShell"&gt;http://en.wikipedia.org/wiki/Windows_PowerShell&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;Some free video tutorials: &lt;A href="http://www.idera.com/Promo/Practical-PowerShell"&gt;http://www.idera.com/Promo/Practical-PowerShell&lt;/A&gt; &lt;/LI&gt;
&lt;LI&gt;Official Powershell team blog: &lt;A href="http://blogs.msdn.com/powershell"&gt;http://blogs.msdn.com/powershell&lt;/A&gt; &lt;/LI&gt;
&lt;LI&gt;Powershell Guy blog: &lt;A href="http://thepowershellguy.com/blogs/posh"&gt;http://thepowershellguy.com/blogs/posh&lt;/A&gt; &lt;/LI&gt;&lt;/UL&gt;&lt;img src="http://blogs.technet.com/aggbug.aspx?PostID=3261142" width="1" height="1"&gt;</description><category domain="http://blogs.technet.com/josebda/archive/tags/The+Basics/default.aspx">The Basics</category><category domain="http://blogs.technet.com/josebda/archive/tags/Windows+7/default.aspx">Windows 7</category><category domain="http://blogs.technet.com/josebda/archive/tags/Windows+Server+2008+R2/default.aspx">Windows Server 2008 R2</category><category domain="http://blogs.technet.com/josebda/archive/tags/DFS/default.aspx">DFS</category><category domain="http://blogs.technet.com/josebda/archive/tags/PowerShell/default.aspx">PowerShell</category></item></channel></rss>