<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/" version="2.0">
  <channel>
    <title>Precision Computing</title>
    <link>http://www.leeholmes.com/blog/</link>
    <description>Software Design and Development</description>
    <copyright>Lee Holmes</copyright>
    <lastBuildDate>Mon, 18 Jan 2010 20:53:33 GMT</lastBuildDate>
    <generator>newtelligence dasBlog 1.9.6264.0</generator>
    <managingEditor>blog-feedback@leeholmes.com</managingEditor>
    <webMaster>blog-feedback@leeholmes.com</webMaster>
    <item>
      <trackback:ping>http://www.leeholmes.com/blog/Trackback.aspx?guid=befd1fae-373c-4a50-96ee-b43e1df6580a</trackback:ping>
      <pingback:server>http://www.leeholmes.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.leeholmes.com/blog/PermaLink,guid,befd1fae-373c-4a50-96ee-b43e1df6580a.aspx</pingback:target>
      <dc:creator>
      </dc:creator>
      <wfw:comment>http://www.leeholmes.com/blog/CommentView,guid,befd1fae-373c-4a50-96ee-b43e1df6580a.aspx</wfw:comment>
      <wfw:commentRss>http://www.leeholmes.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=befd1fae-373c-4a50-96ee-b43e1df6580a</wfw:commentRss>
      <slash:comments>1</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Here’s one that’s short and sweet. A lot of programs exist for the sole purpose of
taking a screen shot after a certain amount of time. For example, delay for 10 seconds
before taking a screen shot so that you have the time to open some menus.
</p>
        <p>
This is incredibly simple with PowerShell:
</p>
        <blockquote>
          <p>
            <font face="Courier Noew">Add-Type -Assembly System.Windows.Forms 
<br />
Sleep 10 </font>
          </p>
          <p>
            <font face="Courier Noew">## Capture the entire screen 
<br />
[System.Windows.Forms.Sendkeys]::SendWait("{PrtSc}") </font>
          </p>
          <p>
            <font face="Courier Noew">## Capture the current window 
<br />
[System.Windows.Forms.Sendkeys]::SendWait("%{PrtSc}")</font>
          </p>
        </blockquote>
        <img width="0" height="0" src="http://www.leeholmes.com/blog/aggbug.ashx?id=befd1fae-373c-4a50-96ee-b43e1df6580a" />
      </body>
      <title>Delayed Screen Captures in PowerShell</title>
      <guid isPermaLink="false">http://www.leeholmes.com/blog/PermaLink,guid,befd1fae-373c-4a50-96ee-b43e1df6580a.aspx</guid>
      <link>http://www.leeholmes.com/blog/DelayedScreenCapturesInPowerShell.aspx</link>
      <pubDate>Mon, 18 Jan 2010 20:53:33 GMT</pubDate>
      <description>&lt;p&gt;
Here’s one that’s short and sweet. A lot of programs exist for the sole purpose of
taking a screen shot after a certain amount of time. For example, delay for 10 seconds
before taking a screen shot so that you have the time to open some menus.
&lt;/p&gt;
&lt;p&gt;
This is incredibly simple with PowerShell:
&lt;/p&gt;
&lt;blockquote&gt; 
&lt;p&gt;
&lt;font face="Courier Noew"&gt;Add-Type -Assembly System.Windows.Forms 
&lt;br /&gt;
Sleep 10 &lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Courier Noew"&gt;## Capture the entire screen 
&lt;br /&gt;
[System.Windows.Forms.Sendkeys]::SendWait(&amp;quot;{PrtSc}&amp;quot;) &lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Courier Noew"&gt;## Capture the current window 
&lt;br /&gt;
[System.Windows.Forms.Sendkeys]::SendWait(&amp;quot;%{PrtSc}&amp;quot;)&lt;/font&gt;
&lt;/p&gt;
&lt;/blockquote&gt;&lt;img width="0" height="0" src="http://www.leeholmes.com/blog/aggbug.ashx?id=befd1fae-373c-4a50-96ee-b43e1df6580a" /&gt;</description>
      <comments>http://www.leeholmes.com/blog/CommentView,guid,befd1fae-373c-4a50-96ee-b43e1df6580a.aspx</comments>
    </item>
    <item>
      <trackback:ping>http://www.leeholmes.com/blog/Trackback.aspx?guid=1e05ba14-ec02-401e-a78d-be8c7273b593</trackback:ping>
      <pingback:server>http://www.leeholmes.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.leeholmes.com/blog/PermaLink,guid,1e05ba14-ec02-401e-a78d-be8c7273b593.aspx</pingback:target>
      <dc:creator>
      </dc:creator>
      <wfw:comment>http://www.leeholmes.com/blog/CommentView,guid,1e05ba14-ec02-401e-a78d-be8c7273b593.aspx</wfw:comment>
      <wfw:commentRss>http://www.leeholmes.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=1e05ba14-ec02-401e-a78d-be8c7273b593</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
In PowerShell V2, we added a bunch of computer management cmdlets:
</p>
        <blockquote>
          <p>
            <font face="courier new">PS &gt;Get-Command -Noun Computer | Format-Table -Auto </font>
          </p>
          <p>
            <font face="courier new">CommandType Name               
Definition 
<br />
----------- ----               
---------- 
<br />
Cmdlet      Add-Computer       
Add-Computer [-DomainName] &lt;String&gt; [-Credent 
<br />
Cmdlet      Checkpoint-Computer Checkpoint-Computer [-Description]
&lt;String&gt; [ 
<br />
Cmdlet      Remove-Computer     Remove-Computer
[[-Credential] &lt;PSCredential&gt; 
<br />
Cmdlet      Restart-Computer    Restart-Computer
[[-ComputerName] &lt;String[]&gt;] 
<br />
Cmdlet      Restore-Computer    Restore-Computer
[-RestorePoint] &lt;Int32&gt; [-Ve 
<br />
Cmdlet      Stop-Computer      
Stop-Computer [[-ComputerName] &lt;String[]&gt;] [[</font>
          </p>
        </blockquote>
        <p>
Astute followers of our CTP process might notice a missing entry in this list when
compared to earlier builds: the Rename-Computer cmdlet.
</p>
        <p>
During testing and additional validation, we realized two things:
</p>
        <ul>
          <li>
            <u>1) The API used to rename computers is fairly “forgiving” 
<br /></u>If you specify an invalid computer name, the API often doesn’t reject it – but
instead transforms it. For example, supplying a computer name that is too long will
simply truncate the computer name and complete the operation. There’s nothing like
losing a computer in your domain! Similarly, the API supports full Unicode input,
while many applications break if the computer name is not the same as its <a href="http://en.wikipedia.org/wiki/NetBIOS">NetBIOS
name</a> (which does not support full Unicode.) 
<br /></li>
          <li>
            <u>2) Our implementation failed to detect some higher-level scenarios that the existing
NetDom.exe command detects 
<br /></u>NetDom.exe is a tool that already lets you rename computers, and users might expect
some degree of compatibility with the safety it ensures. For example: in the machine
a CA server? In the middle of a DC promo? In the middle of a role change?</li>
        </ul>
        <p>
Since both netdom.exe and WMI (<a title="http://msdn.microsoft.com/en-us/library/aa393056(VS.85).aspx" href="http://msdn.microsoft.com/en-us/library/aa393056(VS.85).aspx">http://msdn.microsoft.com/en-us/library/aa393056(VS.85).aspx</a>)
are easily accessible alternatives, we decided to remove the cmdlet rather than ship
something that didn’t meet expectations.
</p>
        <img width="0" height="0" src="http://www.leeholmes.com/blog/aggbug.ashx?id=1e05ba14-ec02-401e-a78d-be8c7273b593" />
      </body>
      <title>Where is Rename-Computer?</title>
      <guid isPermaLink="false">http://www.leeholmes.com/blog/PermaLink,guid,1e05ba14-ec02-401e-a78d-be8c7273b593.aspx</guid>
      <link>http://www.leeholmes.com/blog/WhereIsRenameComputer.aspx</link>
      <pubDate>Wed, 13 Jan 2010 21:10:49 GMT</pubDate>
      <description>&lt;p&gt;
In PowerShell V2, we added a bunch of computer management cmdlets:
&lt;/p&gt;
&lt;blockquote&gt; 
&lt;p&gt;
&lt;font face="courier new"&gt;PS &amp;gt;Get-Command -Noun Computer | Format-Table -Auto &lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="courier new"&gt;CommandType Name&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;
Definition 
&lt;br /&gt;
----------- ----&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;
---------- 
&lt;br /&gt;
Cmdlet&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Add-Computer&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;
Add-Computer [-DomainName] &amp;lt;String&amp;gt; [-Credent 
&lt;br /&gt;
Cmdlet&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Checkpoint-Computer Checkpoint-Computer [-Description]
&amp;lt;String&amp;gt; [ 
&lt;br /&gt;
Cmdlet&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Remove-Computer&amp;#160;&amp;#160;&amp;#160;&amp;#160; Remove-Computer
[[-Credential] &amp;lt;PSCredential&amp;gt; 
&lt;br /&gt;
Cmdlet&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Restart-Computer&amp;#160;&amp;#160;&amp;#160; Restart-Computer
[[-ComputerName] &amp;lt;String[]&amp;gt;] 
&lt;br /&gt;
Cmdlet&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Restore-Computer&amp;#160;&amp;#160;&amp;#160; Restore-Computer
[-RestorePoint] &amp;lt;Int32&amp;gt; [-Ve 
&lt;br /&gt;
Cmdlet&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Stop-Computer&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;
Stop-Computer [[-ComputerName] &amp;lt;String[]&amp;gt;] [[&lt;/font&gt;
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
Astute followers of our CTP process might notice a missing entry in this list when
compared to earlier builds: the Rename-Computer cmdlet.
&lt;/p&gt;
&lt;p&gt;
During testing and additional validation, we realized two things:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;u&gt;1) The API used to rename computers is fairly “forgiving” 
&lt;br /&gt;
&lt;/u&gt;If you specify an invalid computer name, the API often doesn’t reject it – but
instead transforms it. For example, supplying a computer name that is too long will
simply truncate the computer name and complete the operation. There’s nothing like
losing a computer in your domain! Similarly, the API supports full Unicode input,
while many applications break if the computer name is not the same as its &lt;a href="http://en.wikipedia.org/wiki/NetBIOS"&gt;NetBIOS
name&lt;/a&gt; (which does not support full Unicode.) 
&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;u&gt;2) Our implementation failed to detect some higher-level scenarios that the existing
NetDom.exe command detects 
&lt;br /&gt;
&lt;/u&gt;NetDom.exe is a tool that already lets you rename computers, and users might expect
some degree of compatibility with the safety it ensures. For example: in the machine
a CA server? In the middle of a DC promo? In the middle of a role change?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
Since both netdom.exe and WMI (&lt;a title="http://msdn.microsoft.com/en-us/library/aa393056(VS.85).aspx" href="http://msdn.microsoft.com/en-us/library/aa393056(VS.85).aspx"&gt;http://msdn.microsoft.com/en-us/library/aa393056(VS.85).aspx&lt;/a&gt;)
are easily accessible alternatives, we decided to remove the cmdlet rather than ship
something that didn’t meet expectations.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.leeholmes.com/blog/aggbug.ashx?id=1e05ba14-ec02-401e-a78d-be8c7273b593" /&gt;</description>
      <comments>http://www.leeholmes.com/blog/CommentView,guid,1e05ba14-ec02-401e-a78d-be8c7273b593.aspx</comments>
    </item>
    <item>
      <trackback:ping>http://www.leeholmes.com/blog/Trackback.aspx?guid=770f10b8-ee39-48aa-b627-a70d1b11bc76</trackback:ping>
      <pingback:server>http://www.leeholmes.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.leeholmes.com/blog/PermaLink,guid,770f10b8-ee39-48aa-b627-a70d1b11bc76.aspx</pingback:target>
      <dc:creator>
      </dc:creator>
      <wfw:comment>http://www.leeholmes.com/blog/CommentView,guid,770f10b8-ee39-48aa-b627-a70d1b11bc76.aspx</wfw:comment>
      <wfw:commentRss>http://www.leeholmes.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=770f10b8-ee39-48aa-b627-a70d1b11bc76</wfw:commentRss>
      <slash:comments>1</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I don’t like to post line noise very often, but I did break that exception in the <a href="http://www.leeholmes.com/blog/HolidayWishes.aspx">Holiday
Wishes</a> post a few weeks ago. I hate quoting entire blog posts, but, 177 characters
isn’t too bad:
</p>
        <blockquote>
          <p>
            <em>'(18029799997931744,139752119745773792|%{"{0,60}"-f [Convert]::ToString($_,
2).Replace("0"," ")})-split''(.{12}|Mh)''|?{$_}'|%{iex $_;-join[char[]]$_[[char[]]"nOBB7[4oBCaenRa"]}</em>
          </p>
        </blockquote>
        <p>
When it runs, you get this for output:
</p>
        <blockquote>
          <pre style="background-color: #012456; color: #eeedf0">PS &gt;'(18029799997931744,139752119745773792|%{"{0,60}"-f [Convert]::ToString
($_, 2).Replace("0"," ")})-split''(.{12}|Mh)''|?{$_}'|%{iex $_;-join[char[]
]$_[[char[]]"nOBB7[4oBCaenRa"]}                                            
     1                                                                     
    111                                                                    
   11111                                                                   
  1111111                                                                  
    111                                                                    
   11111                                                                   
 111111111                                                                 
11111111111                                                                
    111                                                                    
    111                                                                    
Merrv ChristMas                                                            </pre>
        </blockquote>
        <p>
While it may seem like magic, it in fact was not – just some terribly obtuse PowerShell
scripting. Let’s take a look at what makes it tick. Rather than deconstruct it, we’ll
build it up from scratch.
</p>
        <p>
In a text editor, I drew the tree you see in the main output. In thinking how to compress
this down into a shorter script, the essence of the solution is that the tree is really
just a set of ON (“1”) cells, and OFF (“ “) cells. Binary is a system that describes
ON and OFF really well, so perhaps we can store the tree’s pattern of ON and OFF in
a binary number?
</p>
        <p>
Converting this to more realistic binary, we get:
</p>
        <blockquote>
          <p>
            <font face="Courier New">000001000000 
<br />
000011100000 
<br />
000111110000 
<br />
001111111000 
<br />
000011100000 
<br />
000111110000 
<br />
011111111100 
<br />
111111111110 
<br />
000011100000 
<br />
000011100000</font>
          </p>
        </blockquote>
        <p>
Now, NUMBERS do a great job of encoding binary patterns. For example, “1234” is 10011010010
in binary. What if we just concatenate all those ones and zeros together to find the
number it represents?
</p>
        <blockquote>
          <pre style="background-color: #012456; color: #eeedf0">PS &gt;$result = [Convert]::ToInt64("00000100000000001110000000011111000000111
111100000001110000000011111000001111111110011111111111000001110000000001110
0000", 2)                                                                  
<span style="background-color: #012456; color: #cc6666">Exception
calling "ToInt64" with "2" argument(s): "Value was either
too la</span><span style="background-color: #012456; color: #cc6666">rge or too small
for a UInt64."</span><span style="background-color: #012456; color: #cc6666">At
line:1 char:29</span><span style="background-color: #012456; color: #cc6666">+ $result
= [Convert]::ToInt64 <span>&lt;</span><span>&lt;</span><span>&lt;</span><span>&lt;</span> ("000001000000000011100000000111110000</span><span style="background-color: #012456; color: #cc6666">00111111100000001110000000011111000001111111110011111111111000001110000000</span><span style="background-color: #012456; color: #cc6666">0011100000",
2)</span><span style="background-color: #012456; color: #cc6666"> + CategoryInfo
: NotSpecified: (:) [], MethodInvocationExcep </span><span style="background-color: #012456; color: #cc6666"> tion</span><span style="background-color: #012456; color: #cc6666"> +
FullyQualifiedErrorId : DotNetMethodException</span></pre>
        </blockquote>
        <p>
Unfortunately, there are too many bits (120) to fit in a single 64-bit number. While
there are some “big number” libraries about, this should stand on its own. Instead,
lets break it up into two smaller 60-bit chunks, and convert those:
</p>
        <blockquote>
          <pre style="background-color: #012456; color: #eeedf0">PS &gt;[Convert]::ToInt64("000001000000000011100000000111110000001111111000000
011100000", 2)                                                             
18029799997931744                                                          
PS &gt;[Convert]::ToInt64("000111110000011111111100111111111110000011100000000
011100000", 2)                                                             
139752119745773792                                                         </pre>
        </blockquote>
        <p>
Perfect. There are the magic numbers you see at the beginning of the script. We should
be able to recreate our greeting by converting them back to binary, and outputting
them:
</p>
        <blockquote>
          <pre style="background-color: #012456; color: #eeedf0">PS &gt;18029799997931744,139752119745773792 | Foreach-Object {                
&gt;&gt;     [Convert]::ToString($_, 2)                                          
&gt;&gt; }                                                                       
&gt;&gt;                                                                         
1000000000011100000000111110000001111111000000011100000                    
111110000011111111100111111111110000011100000000011100000                  </pre>
        </blockquote>
        <p>
Hmm. These don’t match up any longer. Since leading zeroes are not important when
converting numbers to binary, the .NET Framework doesn’t put any. After all, how many
would it put? We can get around this problem by right-aligning the strings back to
60 characters:
</p>
        <blockquote>
          <pre style="background-color: #012456; color: #eeedf0">PS &gt;18029799997931744,139752119745773792 | Foreach-Object {                
&gt;&gt;     "{0,60}" -f [Convert]::ToString($_, 2)                              
&gt;&gt; }                                                                       
&gt;&gt;                                                                         
     1000000000011100000000111110000001111111000000011100000               
   111110000011111111100111111111110000011100000000011100000               </pre>
        </blockquote>
        <p>
That’s got the correct width again, but those zeroes are going to get in the way.
Let’s convert them back to spaces:
</p>
        <blockquote>
          <pre style="background-color: #012456; color: #eeedf0">PS &gt;18029799997931744,139752119745773792 | Foreach-Object {                
&gt;&gt;     "{0,60}" -f [Convert]::ToString($_, 2).Replace("0"," ")             
&gt;&gt; }                                                                       
&gt;&gt;                                                                         
     1          111        11111      1111111       111                    
   11111     111111111  11111111111     111         111                    </pre>
        </blockquote>
        <p>
That’s getting pretty close. In fact, many trees look exactly like this when they
come from a box. However, it’s not stacked properly – our original tree rows were
12 wide, and now they are 60. Busting out a <a href="http://www.leeholmes.com/blog/EmailQuotingAndWrappingIn59Bytes.aspx">gnarly
word wrapping regular expression</a> I blogged out a while ago, let’s apply it:
</p>
        <blockquote>
          <pre style="background-color: #012456; color: #eeedf0">PS &gt;(                                                                      
&gt;&gt;     18029799997931744,139752119745773792 | Foreach-Object {             
&gt;&gt;         "{0,60}" -f [Convert]::ToString($_, 2).Replace("0"," ")         
&gt;&gt;     }                                                                   
&gt;&gt; ) -split '(.{12})' | Where-Object { $_ }                                
&gt;&gt;                                                                         
     1                                                                     
    111                                                                    
   11111                                                                   
  1111111                                                                  
    111                                                                    
   11111                                                                   
 111111111                                                                 
11111111111                                                                
    111                                                                    
    111                                                                    </pre>
        </blockquote>
        <p>
Hey, that rings a bell!
</p>
        <p>
The next step is to add the “Merry Christmas” greeting at the end. Rather than write
it directly or invent some cool scheme to encode the characters, what if we picked
characters from the script itself, so far? If we have access to the script as a string,
we can use PowerShell’s array slicing to pick whatever letters we want out. For example:
</p>
        <blockquote>
          <pre style="background-color: #012456; color: #eeedf0">PS &gt;"ABCDEF"[3,4,0,3,1,4,4,5]                                              
D                                                                          
E                                                                          
A                                                                          
D                                                                          
B                                                                          
E                                                                          
E                                                                          
F                                                                          </pre>
        </blockquote>
        <p>
We don’t actually have access to the script as a string, so instead – let’s pack it
into a string first, and then run it with Invoke-Expression. We’ll drop a bunch of
spaces and use a bunch of aliases to compress things further:
</p>
        <blockquote>
          <p>
'(18029799997931744,139752119745773792|%{"{0,60}"-f [Convert]::ToString($_,
2).Replace("0"," ")})-split''(.{12})''|?{$_}'|iex
</p>
        </blockquote>
        <p>
Now, how can we invoke that string, but also have it available for the letter picking
process we still want to do? We could store it in a variable (and reuse that variable,)
but it might be easier to use the Foreach-Object cmdlet to loop over the (single)
string, and then reuse the implicit $_ variable.
</p>
        <blockquote>
          <pre style="background-color: #012456; color: #eeedf0">PS &gt;'"Hello"' | Foreach-Object { Invoke-Expression $_; $_[3,2,2] }         
Hello                                                                      
l                                                                          
e                                                                          
e                                                                          </pre>
        </blockquote>
        <p>
PowerShell naturally emits those last objects one-by-one, so let’s join them into
a string:
</p>
        <blockquote>
          <pre style="background-color: #012456; color: #eeedf0">PS &gt;'"Hello"' | Foreach-Object { Invoke-Expression $_; -join $_[3,2,2] }   
Hello                                                                      
lee                                                                        </pre>
        </blockquote>
        <p>
That looks like the approach we need to pick the letters out of our original script.
I generated a table and reviewed its output:
</p>
        <blockquote>
          <pre style="background-color: #012456; color: #eeedf0">PS &gt;$script = '(18029799997931744,139752119745773792|%{"{0,60}"-f [Convert]
::ToString($_, 2).Replace("0"," ")})-split''(.{12})''|?{$_}'               
PS &gt;$x = 0; $script.ToCharArray() | % { "$x : $_"; $x++ }                  
0 : (                                                                      
1 : 1                                                                      
2 : 8                                                                      
3 : 0                                                                      
4 : 2                                                                      
5 : 9                                                                      
6 : 7                                                                      
51 : [                                                                     
52 : C                                                                     
53 : o                                                                     
54 : n                                                                     
55 : v                                                                     
56 : e                                                                     
57 : r                                                                     
58 : t                                                                     
59 : ]                                                                     
116 : }                                                                    </pre>
        </blockquote>
        <p>
Unfortunately, the script output is missing a few chararcters: “M”, and “h”. It’s
also missing a “y”, but using a “v” is a common trick due to its visual similarity.
Where can we pack those letters in, though?
</p>
        <p>
The regular expression looks like the perfect place. It splits on sequences of 12
characters, so we could also ask it to split on the non-existent string “Mh”. It would
have no impact, but would give us the characters we need. Some readers thought that
the “v” instead of a “y” was a typo, so Robert (in the comments) fixed the script
by adding the “y” to this throwaway piece of the regular expression.
</p>
        <blockquote>
          <p>
            <em>'(18029799997931744,139752119745773792|%{"{0,60}"-f [Convert]::ToString($_,
2).Replace("0"," ")})-split''(.{12}<font color="#ff0000">|Mhy</font>)''|?{$_}</em>
          </p>
        </blockquote>
        <p>
After adding the extra text to the script, review the output again and get a big list
of numbers:
</p>
        <blockquote>
          <p>
… –join $_[110,79,66,66,55,91,52,111,66,67,97,101,110,82,97]
</p>
        </blockquote>
        <p>
That’s unbecoming of an obfuscated script. Luckily, those numbers are in the regular
ASCII range, and we can convert them to a string:
</p>
        <blockquote>
          <pre style="background-color: #012456; color: #eeedf0">PS &gt;[char[]] (110,79,66,66,55,91,52,111,66,67,97,101,110,82,97)            
n                                                                          
O                                                                          
B                                                                          
B                                                                          
7                                                                          
[                                                                          
4                                                                          
o                                                                          
B                                                                          
C                                                                          
a                                                                          
e                                                                          
n                                                                          
R                                                                          
a                                                                          
PS &gt;[int[]] [char[]] "nOBB7[4oBCaenRa"                                     
110                                                                        
79                                                                         
66                                                                         
66                                                                         
55                                                                         
91                                                                         
52                                                                         
111                                                                        
66                                                                         
67                                                                         
97                                                                         
101                                                                        
110                                                                        
82                                                                         
97                                                                         </pre>
        </blockquote>
        <p>
PowerShell’s array slicing does automatic integer casting if needed, so we are fine
just converting the string to a sequence of characters:
</p>
        <blockquote>
          <p>
… $_[[char[]]"nOBB7[4oBCaenRa"]}
</p>
        </blockquote>
        <p>
And there you have it: 1200 words to describe 177 characters.
</p>
        <img width="0" height="0" src="http://www.leeholmes.com/blog/aggbug.ashx?id=770f10b8-ee39-48aa-b627-a70d1b11bc76" />
      </body>
      <title>An Exercise in De-Obfuscation</title>
      <guid isPermaLink="false">http://www.leeholmes.com/blog/PermaLink,guid,770f10b8-ee39-48aa-b627-a70d1b11bc76.aspx</guid>
      <link>http://www.leeholmes.com/blog/AnExerciseInDeObfuscation.aspx</link>
      <pubDate>Mon, 04 Jan 2010 22:46:18 GMT</pubDate>
      <description>&lt;p&gt;
I don’t like to post line noise very often, but I did break that exception in the &lt;a href="http://www.leeholmes.com/blog/HolidayWishes.aspx"&gt;Holiday
Wishes&lt;/a&gt; post a few weeks ago. I hate quoting entire blog posts, but, 177 characters
isn’t too bad:
&lt;/p&gt;
&lt;blockquote&gt; 
&lt;p&gt;
&lt;em&gt;'(18029799997931744,139752119745773792|%{&amp;quot;{0,60}&amp;quot;-f [Convert]::ToString($_,
2).Replace(&amp;quot;0&amp;quot;,&amp;quot; &amp;quot;)})-split''(.{12}|Mh)''|?{$_}'|%{iex $_;-join[char[]]$_[[char[]]&amp;quot;nOBB7[4oBCaenRa&amp;quot;]}&lt;/em&gt;
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
When it runs, you get this for output:
&lt;/p&gt;
&lt;blockquote&gt; &lt;pre style="background-color: #012456; color: #eeedf0"&gt;PS &amp;gt;'(18029799997931744,139752119745773792|%{&amp;quot;{0,60}&amp;quot;-f [Convert]::ToString
($_, 2).Replace(&amp;quot;0&amp;quot;,&amp;quot; &amp;quot;)})-split''(.{12}|Mh)''|?{$_}'|%{iex $_;-join[char[]
]$_[[char[]]&amp;quot;nOBB7[4oBCaenRa&amp;quot;]}                                            
     1                                                                     
    111                                                                    
   11111                                                                   
  1111111                                                                  
    111                                                                    
   11111                                                                   
 111111111                                                                 
11111111111                                                                
    111                                                                    
    111                                                                    
Merrv ChristMas                                                            &lt;/pre&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
While it may seem like magic, it in fact was not – just some terribly obtuse PowerShell
scripting. Let’s take a look at what makes it tick. Rather than deconstruct it, we’ll
build it up from scratch.
&lt;/p&gt;
&lt;p&gt;
In a text editor, I drew the tree you see in the main output. In thinking how to compress
this down into a shorter script, the essence of the solution is that the tree is really
just a set of ON (“1”) cells, and OFF (“ “) cells. Binary is a system that describes
ON and OFF really well, so perhaps we can store the tree’s pattern of ON and OFF in
a binary number?
&lt;/p&gt;
&lt;p&gt;
Converting this to more realistic binary, we get:
&lt;/p&gt;
&lt;blockquote&gt; 
&lt;p&gt;
&lt;font face="Courier New"&gt;000001000000 
&lt;br /&gt;
000011100000 
&lt;br /&gt;
000111110000 
&lt;br /&gt;
001111111000 
&lt;br /&gt;
000011100000 
&lt;br /&gt;
000111110000 
&lt;br /&gt;
011111111100 
&lt;br /&gt;
111111111110 
&lt;br /&gt;
000011100000 
&lt;br /&gt;
000011100000&lt;/font&gt;
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
Now, NUMBERS do a great job of encoding binary patterns. For example, “1234” is 10011010010
in binary. What if we just concatenate all those ones and zeros together to find the
number it represents?
&lt;/p&gt;
&lt;blockquote&gt; &lt;pre style="background-color: #012456; color: #eeedf0"&gt;PS &amp;gt;$result = [Convert]::ToInt64(&amp;quot;00000100000000001110000000011111000000111
111100000001110000000011111000001111111110011111111111000001110000000001110
0000&amp;quot;, 2)                                                                  
&lt;span style="background-color: #012456; color: #cc6666"&gt;Exception
calling &amp;quot;ToInt64&amp;quot; with &amp;quot;2&amp;quot; argument(s): &amp;quot;Value was either
too la&lt;/span&gt; &lt;span style="background-color: #012456; color: #cc6666"&gt;rge or too small
for a UInt64.&amp;quot;&lt;/span&gt; &lt;span style="background-color: #012456; color: #cc6666"&gt;At
line:1 char:29&lt;/span&gt; &lt;span style="background-color: #012456; color: #cc6666"&gt;+ $result
= [Convert]::ToInt64 &lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt; (&amp;quot;000001000000000011100000000111110000&lt;/span&gt; &lt;span style="background-color: #012456; color: #cc6666"&gt;00111111100000001110000000011111000001111111110011111111111000001110000000&lt;/span&gt; &lt;span style="background-color: #012456; color: #cc6666"&gt;0011100000&amp;quot;,
2)&lt;/span&gt; &lt;span style="background-color: #012456; color: #cc6666"&gt; + CategoryInfo
: NotSpecified: (:) [], MethodInvocationExcep &lt;/span&gt; &lt;span style="background-color: #012456; color: #cc6666"&gt; tion&lt;/span&gt; &lt;span style="background-color: #012456; color: #cc6666"&gt; +
FullyQualifiedErrorId : DotNetMethodException&lt;/span&gt; &lt;/pre&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
Unfortunately, there are too many bits (120) to fit in a single 64-bit number. While
there are some “big number” libraries about, this should stand on its own. Instead,
lets break it up into two smaller 60-bit chunks, and convert those:
&lt;/p&gt;
&lt;blockquote&gt; &lt;pre style="background-color: #012456; color: #eeedf0"&gt;PS &amp;gt;[Convert]::ToInt64(&amp;quot;000001000000000011100000000111110000001111111000000
011100000&amp;quot;, 2)                                                             
18029799997931744                                                          
PS &amp;gt;[Convert]::ToInt64(&amp;quot;000111110000011111111100111111111110000011100000000
011100000&amp;quot;, 2)                                                             
139752119745773792                                                         &lt;/pre&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
Perfect. There are the magic numbers you see at the beginning of the script. We should
be able to recreate our greeting by converting them back to binary, and outputting
them:
&lt;/p&gt;
&lt;blockquote&gt; &lt;pre style="background-color: #012456; color: #eeedf0"&gt;PS &amp;gt;18029799997931744,139752119745773792 | Foreach-Object {                
&amp;gt;&amp;gt;     [Convert]::ToString($_, 2)                                          
&amp;gt;&amp;gt; }                                                                       
&amp;gt;&amp;gt;                                                                         
1000000000011100000000111110000001111111000000011100000                    
111110000011111111100111111111110000011100000000011100000                  &lt;/pre&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
Hmm. These don’t match up any longer. Since leading zeroes are not important when
converting numbers to binary, the .NET Framework doesn’t put any. After all, how many
would it put? We can get around this problem by right-aligning the strings back to
60 characters:
&lt;/p&gt;
&lt;blockquote&gt; &lt;pre style="background-color: #012456; color: #eeedf0"&gt;PS &amp;gt;18029799997931744,139752119745773792 | Foreach-Object {                
&amp;gt;&amp;gt;     &amp;quot;{0,60}&amp;quot; -f [Convert]::ToString($_, 2)                              
&amp;gt;&amp;gt; }                                                                       
&amp;gt;&amp;gt;                                                                         
     1000000000011100000000111110000001111111000000011100000               
   111110000011111111100111111111110000011100000000011100000               &lt;/pre&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
That’s got the correct width again, but those zeroes are going to get in the way.
Let’s convert them back to spaces:
&lt;/p&gt;
&lt;blockquote&gt; &lt;pre style="background-color: #012456; color: #eeedf0"&gt;PS &amp;gt;18029799997931744,139752119745773792 | Foreach-Object {                
&amp;gt;&amp;gt;     &amp;quot;{0,60}&amp;quot; -f [Convert]::ToString($_, 2).Replace(&amp;quot;0&amp;quot;,&amp;quot; &amp;quot;)             
&amp;gt;&amp;gt; }                                                                       
&amp;gt;&amp;gt;                                                                         
     1          111        11111      1111111       111                    
   11111     111111111  11111111111     111         111                    &lt;/pre&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
That’s getting pretty close. In fact, many trees look exactly like this when they
come from a box. However, it’s not stacked properly – our original tree rows were
12 wide, and now they are 60. Busting out a &lt;a href="http://www.leeholmes.com/blog/EmailQuotingAndWrappingIn59Bytes.aspx"&gt;gnarly
word wrapping regular expression&lt;/a&gt; I blogged out a while ago, let’s apply it:
&lt;/p&gt;
&lt;blockquote&gt; &lt;pre style="background-color: #012456; color: #eeedf0"&gt;PS &amp;gt;(                                                                      
&amp;gt;&amp;gt;     18029799997931744,139752119745773792 | Foreach-Object {             
&amp;gt;&amp;gt;         &amp;quot;{0,60}&amp;quot; -f [Convert]::ToString($_, 2).Replace(&amp;quot;0&amp;quot;,&amp;quot; &amp;quot;)         
&amp;gt;&amp;gt;     }                                                                   
&amp;gt;&amp;gt; ) -split '(.{12})' | Where-Object { $_ }                                
&amp;gt;&amp;gt;                                                                         
     1                                                                     
    111                                                                    
   11111                                                                   
  1111111                                                                  
    111                                                                    
   11111                                                                   
 111111111                                                                 
11111111111                                                                
    111                                                                    
    111                                                                    &lt;/pre&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
Hey, that rings a bell!
&lt;/p&gt;
&lt;p&gt;
The next step is to add the “Merry Christmas” greeting at the end. Rather than write
it directly or invent some cool scheme to encode the characters, what if we picked
characters from the script itself, so far? If we have access to the script as a string,
we can use PowerShell’s array slicing to pick whatever letters we want out. For example:
&lt;/p&gt;
&lt;blockquote&gt; &lt;pre style="background-color: #012456; color: #eeedf0"&gt;PS &amp;gt;&amp;quot;ABCDEF&amp;quot;[3,4,0,3,1,4,4,5]                                              
D                                                                          
E                                                                          
A                                                                          
D                                                                          
B                                                                          
E                                                                          
E                                                                          
F                                                                          &lt;/pre&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
We don’t actually have access to the script as a string, so instead – let’s pack it
into a string first, and then run it with Invoke-Expression. We’ll drop a bunch of
spaces and use a bunch of aliases to compress things further:
&lt;/p&gt;
&lt;blockquote&gt; 
&lt;p&gt;
'(18029799997931744,139752119745773792|%{&amp;quot;{0,60}&amp;quot;-f [Convert]::ToString($_,
2).Replace(&amp;quot;0&amp;quot;,&amp;quot; &amp;quot;)})-split''(.{12})''|?{$_}'|iex
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
Now, how can we invoke that string, but also have it available for the letter picking
process we still want to do? We could store it in a variable (and reuse that variable,)
but it might be easier to use the Foreach-Object cmdlet to loop over the (single)
string, and then reuse the implicit $_ variable.
&lt;/p&gt;
&lt;blockquote&gt; &lt;pre style="background-color: #012456; color: #eeedf0"&gt;PS &amp;gt;'&amp;quot;Hello&amp;quot;' | Foreach-Object { Invoke-Expression $_; $_[3,2,2] }         
Hello                                                                      
l                                                                          
e                                                                          
e                                                                          &lt;/pre&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
PowerShell naturally emits those last objects one-by-one, so let’s join them into
a string:
&lt;/p&gt;
&lt;blockquote&gt; &lt;pre style="background-color: #012456; color: #eeedf0"&gt;PS &amp;gt;'&amp;quot;Hello&amp;quot;' | Foreach-Object { Invoke-Expression $_; -join $_[3,2,2] }   
Hello                                                                      
lee                                                                        &lt;/pre&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
That looks like the approach we need to pick the letters out of our original script.
I generated a table and reviewed its output:
&lt;/p&gt;
&lt;blockquote&gt; &lt;pre style="background-color: #012456; color: #eeedf0"&gt;PS &amp;gt;$script = '(18029799997931744,139752119745773792|%{&amp;quot;{0,60}&amp;quot;-f [Convert]
::ToString($_, 2).Replace(&amp;quot;0&amp;quot;,&amp;quot; &amp;quot;)})-split''(.{12})''|?{$_}'               
PS &amp;gt;$x = 0; $script.ToCharArray() | % { &amp;quot;$x : $_&amp;quot;; $x++ }                  
0 : (                                                                      
1 : 1                                                                      
2 : 8                                                                      
3 : 0                                                                      
4 : 2                                                                      
5 : 9                                                                      
6 : 7                                                                      
51 : [                                                                     
52 : C                                                                     
53 : o                                                                     
54 : n                                                                     
55 : v                                                                     
56 : e                                                                     
57 : r                                                                     
58 : t                                                                     
59 : ]                                                                     
116 : }                                                                    &lt;/pre&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
Unfortunately, the script output is missing a few chararcters: “M”, and “h”. It’s
also missing a “y”, but using a “v” is a common trick due to its visual similarity.
Where can we pack those letters in, though?
&lt;/p&gt;
&lt;p&gt;
The regular expression looks like the perfect place. It splits on sequences of 12
characters, so we could also ask it to split on the non-existent string “Mh”. It would
have no impact, but would give us the characters we need. Some readers thought that
the “v” instead of a “y” was a typo, so Robert (in the comments) fixed the script
by adding the “y” to this throwaway piece of the regular expression.
&lt;/p&gt;
&lt;blockquote&gt; 
&lt;p&gt;
&lt;em&gt;'(18029799997931744,139752119745773792|%{&amp;quot;{0,60}&amp;quot;-f [Convert]::ToString($_,
2).Replace(&amp;quot;0&amp;quot;,&amp;quot; &amp;quot;)})-split''(.{12}&lt;font color="#ff0000"&gt;|Mhy&lt;/font&gt;)''|?{$_}&lt;/em&gt;
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
After adding the extra text to the script, review the output again and get a big list
of numbers:
&lt;/p&gt;
&lt;blockquote&gt; 
&lt;p&gt;
… –join $_[110,79,66,66,55,91,52,111,66,67,97,101,110,82,97]
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
That’s unbecoming of an obfuscated script. Luckily, those numbers are in the regular
ASCII range, and we can convert them to a string:
&lt;/p&gt;
&lt;blockquote&gt; &lt;pre style="background-color: #012456; color: #eeedf0"&gt;PS &amp;gt;[char[]] (110,79,66,66,55,91,52,111,66,67,97,101,110,82,97)            
n                                                                          
O                                                                          
B                                                                          
B                                                                          
7                                                                          
[                                                                          
4                                                                          
o                                                                          
B                                                                          
C                                                                          
a                                                                          
e                                                                          
n                                                                          
R                                                                          
a                                                                          
PS &amp;gt;[int[]] [char[]] &amp;quot;nOBB7[4oBCaenRa&amp;quot;                                     
110                                                                        
79                                                                         
66                                                                         
66                                                                         
55                                                                         
91                                                                         
52                                                                         
111                                                                        
66                                                                         
67                                                                         
97                                                                         
101                                                                        
110                                                                        
82                                                                         
97                                                                         &lt;/pre&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
PowerShell’s array slicing does automatic integer casting if needed, so we are fine
just converting the string to a sequence of characters:
&lt;/p&gt;
&lt;blockquote&gt; 
&lt;p&gt;
… $_[[char[]]&amp;quot;nOBB7[4oBCaenRa&amp;quot;]}
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
And there you have it: 1200 words to describe 177 characters.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.leeholmes.com/blog/aggbug.ashx?id=770f10b8-ee39-48aa-b627-a70d1b11bc76" /&gt;</description>
      <comments>http://www.leeholmes.com/blog/CommentView,guid,770f10b8-ee39-48aa-b627-a70d1b11bc76.aspx</comments>
    </item>
    <item>
      <trackback:ping>http://www.leeholmes.com/blog/Trackback.aspx?guid=1c1bacab-737d-416b-885a-811a25963bd3</trackback:ping>
      <pingback:server>http://www.leeholmes.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.leeholmes.com/blog/PermaLink,guid,1c1bacab-737d-416b-885a-811a25963bd3.aspx</pingback:target>
      <dc:creator>
      </dc:creator>
      <wfw:comment>http://www.leeholmes.com/blog/CommentView,guid,1c1bacab-737d-416b-885a-811a25963bd3.aspx</wfw:comment>
      <wfw:commentRss>http://www.leeholmes.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=1c1bacab-737d-416b-885a-811a25963bd3</wfw:commentRss>
      <slash:comments>4</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
'(18029799997931744,139752119745773792|%{"{0,60}"-f [Convert]::ToString($_,
2).Replace("0"," ")})-split''(.{12}|Mh)''|?{$_}'|%{iex $_;-join[char[]]$_[[char[]]"nOBB7[4oBCaenRa"]}
</p>
        <img width="0" height="0" src="http://www.leeholmes.com/blog/aggbug.ashx?id=1c1bacab-737d-416b-885a-811a25963bd3" />
      </body>
      <title>Holiday Wishes</title>
      <guid isPermaLink="false">http://www.leeholmes.com/blog/PermaLink,guid,1c1bacab-737d-416b-885a-811a25963bd3.aspx</guid>
      <link>http://www.leeholmes.com/blog/HolidayWishes.aspx</link>
      <pubDate>Fri, 18 Dec 2009 22:17:11 GMT</pubDate>
      <description>&lt;p&gt;
'(18029799997931744,139752119745773792|%{&amp;quot;{0,60}&amp;quot;-f [Convert]::ToString($_,
2).Replace(&amp;quot;0&amp;quot;,&amp;quot; &amp;quot;)})-split''(.{12}|Mh)''|?{$_}'|%{iex $_;-join[char[]]$_[[char[]]&amp;quot;nOBB7[4oBCaenRa&amp;quot;]}
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.leeholmes.com/blog/aggbug.ashx?id=1c1bacab-737d-416b-885a-811a25963bd3" /&gt;</description>
      <comments>http://www.leeholmes.com/blog/CommentView,guid,1c1bacab-737d-416b-885a-811a25963bd3.aspx</comments>
    </item>
    <item>
      <trackback:ping>http://www.leeholmes.com/blog/Trackback.aspx?guid=58d4c1e1-bb86-49c4-98c5-bbf7ba720a37</trackback:ping>
      <pingback:server>http://www.leeholmes.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.leeholmes.com/blog/PermaLink,guid,58d4c1e1-bb86-49c4-98c5-bbf7ba720a37.aspx</pingback:target>
      <dc:creator>
      </dc:creator>
      <wfw:comment>http://www.leeholmes.com/blog/CommentView,guid,58d4c1e1-bb86-49c4-98c5-bbf7ba720a37.aspx</wfw:comment>
      <wfw:commentRss>http://www.leeholmes.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=58d4c1e1-bb86-49c4-98c5-bbf7ba720a37</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Marcel has been posting some interesting articles on using PowerShell to <a href="http://blogs.msdn.com/monad/archive/2005/09/13/465250.aspx">generate
the MD5 hashes of files</a>.  Now, an MD5 hash of a file is just an array of
bytes.  Typical hashing programs display this in a more friendly manner:
</p>
        <p>
          <font face="Courier New">PS:15 C:\Temp &gt;md5sum 71-59-B7.bmp 
<br />
a05805e638741bb767f97c0e88962952 *71-59-B7.bmp</font>
        </p>
        <p>
Although the output of Marcel’s scripts could definitely be crafted to display this
output, they currently output the string representation of a byte array:
</p>
        <p>
          <font face="Courier New">PS:19 C:\Temp &gt;get-md5 (get-childitem 71-59-B7.bmp) 
<br />
160 88 5 230 56 116 27 183 103 249 124 14 136 150 41 82</font>
        </p>
        <p>
One of the comments in response to Marcel’s post was that PowerShell should, by default,
output byte arrays as hex.  This is a good suggestion, and we can go even further
with it.  Let’s write a script to give us a full hex editor-like view of a byte
array:
</p>
        <p>
          <font face="Courier New">PS:20 C:\Temp &gt;get-md5 (get-childitem 71-59-B7.bmp) |
format-hex</font>
        </p>
        <p>
          <br />
          <font face="Courier New">           
0  1  2  3  4  5  6  7  8  9  A 
B  C  D  E  F</font>
        </p>
        <p>
          <br />
          <font face="Courier New">00000000   A0 58 05 E6 38 74 1B B7 67 F9 7C 0E
88 96 29 52   X.æ8t.•gù|.??)R</font>
        </p>
        <p>
Or even better, let’s use it to dump out a very small bitmap – 10 pixels of the colour
(R=0x71 G=0x59 B=0xB7)
</p>
        <p>
          <font face="Courier New">PS:21 C:\Temp &gt;Format-Hex 71-59-B7.bmp</font>
        </p>
        <p>
          <br />
          <font face="Courier New">           
0  1  2  3  4  5  6  7  8  9  A 
B  C  D  E  F</font>
        </p>
        <p>
          <br />
          <font face="Courier New">00000000   42 4D 5E 00 00 00 00 00 00 00 36 00
00 00 28 00  BM^.......6...(. 
<br />
00000010   00 00 0A 00 00 00 01 00 00 00 01 00 20 00 00 00  ............
... 
<br />
00000020   00 00 00 00 00 00 C4 0E 00 00 C4 0E 00 00 00 00  ......Ä...Ä..... 
<br />
00000030   00 00 00 00 00 00 B7 59 71 FF B7 59 71 FF B7 59  ......•Yq.•Yq.•Y 
<br />
00000040   71 FF B7 59 71 FF B7 59 71 FF B7 59 71 FF B7 59  q.•Yq.•Yq.•Yq.•Y 
<br />
00000050   71 FF B7 59 71 FF B7 59 71 FF B7 59 71 FF       
q.•Yq.•Yq.•Yq.</font>
        </p>
        <p>
To make it easier to determine byte offsets, files are usually broken down into 16-byte
rows.  The left-hand section gives the offset of the 16-byte chunk.  The
middle section gives the hex representation of the data at that location.  These
pieces of data are aligned in columns also, corresponding to their location within
the 16-byte chunk.  So column “E” in row 0x40 means a file offset of (0x40 +
0x0E) = 0x4E.  The last section gives an ASCII representation of the data.
</p>
        <p>
In this representation, it becomes possible to see some of the underlying <a href="http://www.fortunecity.com/skyscraper/windows/364/bmpffrmt.html">structure
of the bitmap format</a>:
</p>
        <p>
          <table border="1" align="center">
            <tbody>
              <tr>
                <td>
                  <font size="2">Offset</font>
                </td>
                <td>
                  <font size="2">Length</font>
                </td>
                <td>
                  <font size="2">Comment</font>
                </td>
              </tr>
              <tr>
                <td>
                  <font size="2">0x00</font>
                </td>
                <td>
                  <font size="2">2</font>
                </td>
                <td>
                  <font size="2">“BM,” the magic bitmap header</font>
                </td>
              </tr>
              <tr>
                <td>
                  <font size="2">0x02</font>
                </td>
                <td>
                  <font size="2">4</font>
                </td>
                <td>
                  <font size="2">“0x5E,” the length of the file. Notice that our last data byte is at
0x5D.  Since we started counting from zero, this means that we have 0x5E bytes
of data.</font>
                </td>
              </tr>
              <tr>
                <td>
                  <font size="2">(...)</font>
                </td>
                <td>
                  <font size="2">(...)</font>
                </td>
                <td>
                  <font size="2">(...)</font>
                </td>
              </tr>
              <tr>
                <td>
                  <font size="2">0x0A</font>
                </td>
                <td>
                  <font size="2">4</font>
                </td>
                <td>
                  <font size="2">“0x36”, specifies the absolute start of the bitmap data. Notice that
the data begins at offset (0x30 + 0x06).</font>
                </td>
              </tr>
              <tr>
                <td>
                  <font size="2">0x36</font>
                </td>
                <td>
                  <font size="2">40</font>
                </td>
                <td>
                  <font size="2">10 4-byte pixel representations. In Bitmaps, they are laid out as (B=0xB7
G=0x59 R=0x71 &lt;reserved&gt;)</font>
                </td>
              </tr>
            </tbody>
          </table>
        </p>
        <p>
Now, for the script:
</p>
        <blockquote>
          <div style="border-bottom: black 1px solid; border-left: black 1px solid; padding-bottom: 5px; padding-left: 5px; width: 650px; padding-right: 5px; font-family: consolas,lucida console; font-size: 10pt; overflow: auto; border-top: black 1px solid; border-right: black 1px solid; padding-top: 5px">
            <table border="0" cellspacing="0" cellpadding="5">
              <tbody>
                <tr>
                  <td valign="top">
                    <div style="padding-bottom: 5px; padding-left: 5px; padding-right: 5px; font-family: consolas,lucida console; background: #cecece; font-size: 10pt; padding-top: 5px">001 
<br />
002 
<br />
003 
<br />
004 
<br />
005 
<br />
006 
<br />
007 
<br />
008 
<br />
009 
<br />
010 
<br />
011 
<br />
012 
<br />
013 
<br />
014 
<br />
015 
<br />
016 
<br />
017 
<br />
018 
<br />
019 
<br />
020 
<br />
021 
<br />
022 
<br />
023 
<br />
024 
<br />
025 
<br />
026 
<br />
027 
<br />
028 
<br />
029 
<br />
030 
<br />
031 
<br />
032 
<br />
033 
<br />
034 
<br />
035 
<br />
036 
<br />
037 
<br />
038 
<br />
039 
<br />
040 
<br />
041 
<br />
042 
<br />
043 
<br />
044 
<br />
045 
<br />
046 
<br />
047 
<br />
048 
<br />
049 
<br />
050 
<br />
051 
<br />
052 
<br />
053 
<br />
054 
<br />
055 
<br />
056 
<br />
057 
<br />
058 
<br />
059 
<br />
060 
<br />
061 
<br />
062 
<br />
063 
<br />
064 
<br />
065 
<br />
066 
<br />
067 
<br />
068 
<br />
069 
<br />
070 
<br />
071 
<br />
072 
<br />
073 
<br />
074 
<br />
075 
<br />
076 
<br />
077 
<br />
078 
<br />
079 
<br />
080 
<br />
081 
<br />
082 
<br />
083 
<br />
084 
<br />
085 
<br />
086 
<br />
087 
<br />
088 
<br />
089 
<br />
090 
<br />
091 
<br />
092 
<br />
093 
<br />
094 
<br />
095 
<br />
096 
<br />
097 
<br />
098 
<br />
099 
<br />
100 
<br />
101 
<br />
102 
<br />
103 
<br />
104 
<br />
105 
<br />
106 
<br />
107 
<br />
108 
<br />
109 
<br />
110 
<br />
111 
<br />
112 
<br />
113 
<br />
114 
<br />
115 
<br />
116 
<br />
117 
<br />
118 
<br />
119 
<br />
120 
<br />
121 
<br />
122 
<br />
123 
<br />
124 
<br />
125 
<br />
126 
<br />
127 
<br />
128 
<br />
129 
<br />
130 
<br />
131 
<br /></div>
                  </td>
                  <td valign="top" nowrap="nowrap">
                    <div style="padding-bottom: 5px; padding-left: 5px; padding-right: 5px; font-family: consolas,lucida console; background: #fcfcfc; font-size: 10pt; padding-top: 5px">
                      <span style="color: #006400">##############################################################################</span>
                      <br />
                      <span style="color: #006400">##</span>
                      <br />
                      <span style="color: #006400">## Format-Hex</span>
                      <br />
                      <span style="color: #006400">##</span>
                      <br />
                      <span style="color: #006400">## From Windows PowerShell Cookbook (O'Reilly)</span>
                      <br />
                      <span style="color: #006400">## by Lee Holmes (http://www.leeholmes.com/guide)</span>
                      <br />
                      <span style="color: #006400">##</span>
                      <br />
                      <span style="color: #006400">##############################################################################</span>
                      <br />
                      <br />
                      <span style="color: #006400">&lt;# 
<br /><br />
.SYNOPSIS 
<br />
Outputs a file or pipelined input as a hexadecimal display. To determine the 
<br />
offset of a character in the input, add the number at the far-left of the row 
<br />
with the the number at the top of the column for that character. 
<br />
  
<br />
.EXAMPLE 
<br />
PS &gt;"Hello World" | Format-Hex 
<br /><br />
            0 1 2 3 4 5 6 7
8 9 A B C D E F 
<br />
  
<br />
00000000 48 00 65 00 6C 00 6C 00 6F 00 20 00 57 00 6F 00 H.e.l.l.o. .W.o. 
<br />
00000010 72 00 6C 00 64 00 r.l.d. 
<br />
  
<br />
.EXAMPLE 
<br />
PS &gt;Format-Hex c:\temp\example.bmp 
<br />
   
<br />
#&gt;</span>
                      <br />
                      <br />
                      <span style="color: #a9a9a9">[</span>
                      <span style="color: #add8e6">CmdletBinding</span>
                      <span style="color: #000000">(</span>
                      <span style="color: #000000">DefaultParameterSetName</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">=</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #8b0000">"ByPath"</span>
                      <span style="color: #000000">)</span>
                      <span style="color: #a9a9a9">]</span>
                      <br />
                      <span style="color: #00008b">param</span>
                      <span style="color: #000000">(</span>
                      <br />
                      <span style="color: #000000">    </span>
                      <span style="color: #006400">##
The file to read the content from</span>
                      <br />
                      <span style="color: #000000">    </span>
                      <span style="color: #a9a9a9">[</span>
                      <span style="color: #add8e6">Parameter</span>
                      <span style="color: #000000">(</span>
                      <span style="color: #000000">ParameterSetName</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">=</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #8b0000">"ByPath"</span>
                      <span style="color: #a9a9a9">,</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #000000">Position</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">=</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #800080">0</span>
                      <span style="color: #000000">)</span>
                      <span style="color: #a9a9a9">]</span>
                      <br />
                      <span style="color: #000000">    </span>
                      <span style="color: #008080">[string]</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #ff4500">$Path</span>
                      <span style="color: #a9a9a9">,</span>
                      <br />
                      <span style="color: #000000">    </span>
                      <br />
                      <span style="color: #000000">    </span>
                      <span style="color: #006400">##
The input (bytes or strings) to format as hexadecimal</span>
                      <br />
                      <span style="color: #000000">    </span>
                      <span style="color: #a9a9a9">[</span>
                      <span style="color: #add8e6">Parameter</span>
                      <span style="color: #000000">(</span>
                      <br />
                      <span style="color: #000000">        </span>
                      <span style="color: #000000">ParameterSetName</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">=</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #8b0000">"ByInput"</span>
                      <span style="color: #a9a9a9">,</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #000000">Position</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">=</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #800080">0</span>
                      <span style="color: #a9a9a9">,</span>
                      <br />
                      <span style="color: #000000">        </span>
                      <span style="color: #000000">ValueFromPipeline</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">=</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #ff4500">$true</span>
                      <span style="color: #000000">)</span>
                      <span style="color: #a9a9a9">]</span>
                      <br />
                      <span style="color: #000000">    </span>
                      <span style="color: #008080">[Object]</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #ff4500">$InputObject</span>
                      <br />
                      <span style="color: #000000">)</span>
                      <br />
                      <br />
                      <span style="color: #00008b">begin</span>
                      <span style="color: #000000"> </span>
                      <br />
                      <span style="color: #000000">{</span>
                      <br />
                      <span style="color: #000000">    </span>
                      <span style="color: #006400">##
Create the array to hold the content. If the user specified the</span>
                      <br />
                      <span style="color: #000000">    </span>
                      <span style="color: #006400">##
-Path parameter, read the bytes from the path.</span>
                      <br />
                      <span style="color: #000000">    </span>
                      <span style="color: #008080">[byte[]]</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #ff4500">$inputBytes</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">=</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #ff4500">$null</span>
                      <br />
                      <span style="color: #000000">    </span>
                      <span style="color: #00008b">if</span>
                      <span style="color: #000000">(</span>
                      <span style="color: #ff4500">$Path</span>
                      <span style="color: #000000">)</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #000000">{</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #ff4500">$inputBytes</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">=</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #008080">[IO.File]</span>
                      <span style="color: #a9a9a9">::</span>
                      <span style="color: #000000">ReadAllBytes</span>
                      <span style="color: #000000">(</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #000000">(</span>
                      <span style="color: #0000ff">Resolve-Path</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #ff4500">$Path</span>
                      <span style="color: #000000">)</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #000000">)</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #000000">}</span>
                      <br />
                      <span style="color: #000000">    </span>
                      <br />
                      <span style="color: #000000">    </span>
                      <span style="color: #006400">##
Store our header, and formatting information</span>
                      <br />
                      <span style="color: #000000">    </span>
                      <span style="color: #ff4500">$counter</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">=</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #800080">0</span>
                      <br />
                      <span style="color: #000000">    </span>
                      <span style="color: #ff4500">$header</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">=</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #8b0000">"
0 1 2 3 4 5 6 7 8 9 A B C D E F"</span>
                      <br />
                      <span style="color: #000000">    </span>
                      <span style="color: #ff4500">$nextLine</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">=</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #8b0000">"{0}
"</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">-f</span>
                      <span style="color: #000000">  </span>
                      <span style="color: #008080">[Convert]</span>
                      <span style="color: #a9a9a9">::</span>
                      <span style="color: #000000">ToString</span>
                      <span style="color: #000000">(</span>
                      <br />
                      <span style="color: #000000">        </span>
                      <span style="color: #ff4500">$counter</span>
                      <span style="color: #a9a9a9">,</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #800080">16</span>
                      <span style="color: #000000">)</span>
                      <span style="color: #a9a9a9">.</span>
                      <span style="color: #000000">ToUpper</span>
                      <span style="color: #000000">(</span>
                      <span style="color: #000000">)</span>
                      <span style="color: #a9a9a9">.</span>
                      <span style="color: #000000">PadLeft</span>
                      <span style="color: #000000">(</span>
                      <span style="color: #800080">8</span>
                      <span style="color: #a9a9a9">,</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #8b0000">'0'</span>
                      <span style="color: #000000">)</span>
                      <br />
                      <span style="color: #000000">    </span>
                      <span style="color: #ff4500">$asciiEnd</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">=</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #8b0000">""</span>
                      <br />
                      <br />
                      <span style="color: #000000">    </span>
                      <span style="color: #006400">##
Output the header</span>
                      <br />
                      <span style="color: #000000">    </span>
                      <span style="color: #8b0000">"`r`n$header`r`n"</span>
                      <br />
                      <span style="color: #000000">}</span>
                      <br />
                      <br />
                      <span style="color: #00008b">process</span>
                      <br />
                      <span style="color: #000000">{</span>
                      <br />
                      <span style="color: #000000">    </span>
                      <span style="color: #006400">##
If they specified the -InputObject parameter, retrieve the bytes</span>
                      <br />
                      <span style="color: #000000">    </span>
                      <span style="color: #006400">##
from that input</span>
                      <br />
                      <span style="color: #000000">    </span>
                      <span style="color: #00008b">if</span>
                      <span style="color: #000000">(</span>
                      <span style="color: #ff4500">$InputObject</span>
                      <span style="color: #000000">)</span>
                      <br />
                      <span style="color: #000000">    </span>
                      <span style="color: #000000">{</span>
                      <br />
                      <span style="color: #000000">        </span>
                      <span style="color: #006400">##
If it's an actual byte, add it to the inputBytes array.</span>
                      <br />
                      <span style="color: #000000">        </span>
                      <span style="color: #00008b">if</span>
                      <span style="color: #000000">(</span>
                      <span style="color: #ff4500">$InputObject</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">-is</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #008080">[Byte]</span>
                      <span style="color: #000000">)</span>
                      <br />
                      <span style="color: #000000">        </span>
                      <span style="color: #000000">{</span>
                      <br />
                      <span style="color: #000000">            </span>
                      <span style="color: #ff4500">$inputBytes</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">=</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #ff4500">$InputObject</span>
                      <br />
                      <span style="color: #000000">        </span>
                      <span style="color: #000000">}</span>
                      <br />
                      <span style="color: #000000">        </span>
                      <span style="color: #00008b">else</span>
                      <br />
                      <span style="color: #000000">        </span>
                      <span style="color: #000000">{</span>
                      <br />
                      <span style="color: #000000">            </span>
                      <span style="color: #006400">##
Otherwise, convert it to a string and extract the bytes</span>
                      <br />
                      <span style="color: #000000">            </span>
                      <span style="color: #006400">##
from that.</span>
                      <br />
                      <span style="color: #000000">            </span>
                      <span style="color: #ff4500">$inputString</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">=</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #008080">[string]</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #ff4500">$InputObject</span>
                      <br />
                      <span style="color: #000000">            </span>
                      <span style="color: #ff4500">$inputBytes</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">=</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #008080">[Text.Encoding]</span>
                      <span style="color: #a9a9a9">::</span>
                      <span style="color: #000000">Unicode</span>
                      <span style="color: #a9a9a9">.</span>
                      <span style="color: #000000">GetBytes</span>
                      <span style="color: #000000">(</span>
                      <span style="color: #ff4500">$inputString</span>
                      <span style="color: #000000">)</span>
                      <br />
                      <span style="color: #000000">        </span>
                      <span style="color: #000000">}</span>
                      <br />
                      <span style="color: #000000">    </span>
                      <span style="color: #000000">}</span>
                      <br />
                      <span style="color: #000000">    </span>
                      <br />
                      <span style="color: #000000">    </span>
                      <span style="color: #006400">##
Now go through the input bytes</span>
                      <br />
                      <span style="color: #000000">    </span>
                      <span style="color: #00008b">foreach</span>
                      <span style="color: #000000">(</span>
                      <span style="color: #ff4500">$byte</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #00008b">in</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #ff4500">$inputBytes</span>
                      <span style="color: #000000">)</span>
                      <br />
                      <span style="color: #000000">    </span>
                      <span style="color: #000000">{</span>
                      <br />
                      <span style="color: #000000">        </span>
                      <span style="color: #006400">##
Display each byte, in 2-digit hexidecimal, and add that to the</span>
                      <br />
                      <span style="color: #000000">        </span>
                      <span style="color: #006400">##
left-hand side.</span>
                      <br />
                      <span style="color: #000000">        </span>
                      <span style="color: #ff4500">$nextLine</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">+=</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #8b0000">"{0:X2}
"</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">-f</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #ff4500">$byte</span>
                      <br />
                      <br />
                      <span style="color: #000000">        </span>
                      <span style="color: #006400">##
If the character is printable, add its ascii representation to</span>
                      <br />
                      <span style="color: #000000">        </span>
                      <span style="color: #006400">##
the right-hand side. Otherwise, add a dot to the right hand side.</span>
                      <br />
                      <span style="color: #000000">        </span>
                      <span style="color: #00008b">if</span>
                      <span style="color: #000000">(</span>
                      <span style="color: #000000">(</span>
                      <span style="color: #ff4500">$byte</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">-ge</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #800080">0x20</span>
                      <span style="color: #000000">)</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">-and</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #000000">(</span>
                      <span style="color: #ff4500">$byte</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">-le</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #800080">0xFE</span>
                      <span style="color: #000000">)</span>
                      <span style="color: #000000">)</span>
                      <br />
                      <span style="color: #000000">        </span>
                      <span style="color: #000000">{</span>
                      <br />
                      <span style="color: #000000">           </span>
                      <span style="color: #ff4500">$asciiEnd</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">+=</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #008080">[char]</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #ff4500">$byte</span>
                      <br />
                      <span style="color: #000000">        </span>
                      <span style="color: #000000">}</span>
                      <br />
                      <span style="color: #000000">        </span>
                      <span style="color: #00008b">else</span>
                      <br />
                      <span style="color: #000000">        </span>
                      <span style="color: #000000">{</span>
                      <br />
                      <span style="color: #000000">           </span>
                      <span style="color: #ff4500">$asciiEnd</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">+=</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #8b0000">"."</span>
                      <br />
                      <span style="color: #000000">        </span>
                      <span style="color: #000000">}</span>
                      <br />
                      <br />
                      <span style="color: #000000">        </span>
                      <span style="color: #ff4500">$counter</span>
                      <span style="color: #a9a9a9">++</span>
                      <span style="color: #000000">;</span>
                      <br />
                      <br />
                      <span style="color: #000000">        </span>
                      <span style="color: #006400">##
If we've hit the end of a line, combine the right half with the</span>
                      <br />
                      <span style="color: #000000">        </span>
                      <span style="color: #006400">##
left half, and start a new line.</span>
                      <br />
                      <span style="color: #000000">        </span>
                      <span style="color: #00008b">if</span>
                      <span style="color: #000000">(</span>
                      <span style="color: #000000">(</span>
                      <span style="color: #ff4500">$counter</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">%</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #800080">16</span>
                      <span style="color: #000000">)</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">-eq</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #800080">0</span>
                      <span style="color: #000000">)</span>
                      <br />
                      <span style="color: #000000">        </span>
                      <span style="color: #000000">{</span>
                      <br />
                      <span style="color: #000000">            </span>
                      <br />
                      <span style="color: #000000">            </span>
                      <span style="color: #8b0000">"$nextLine
$asciiEnd"</span>
                      <br />
                      <span style="color: #000000">            </span>
                      <span style="color: #ff4500">$nextLine</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">=</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #8b0000">"{0}
"</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">-f</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #008080">[Convert]</span>
                      <span style="color: #a9a9a9">::</span>
                      <span style="color: #000000">ToString</span>
                      <span style="color: #000000">(</span>
                      <br />
                      <span style="color: #000000">                </span>
                      <span style="color: #ff4500">$counter</span>
                      <span style="color: #a9a9a9">,</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #800080">16</span>
                      <span style="color: #000000">)</span>
                      <span style="color: #a9a9a9">.</span>
                      <span style="color: #000000">ToUpper</span>
                      <span style="color: #000000">(</span>
                      <span style="color: #000000">)</span>
                      <span style="color: #a9a9a9">.</span>
                      <span style="color: #000000">PadLeft</span>
                      <span style="color: #000000">(</span>
                      <span style="color: #800080">8</span>
                      <span style="color: #a9a9a9">,</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #8b0000">'0'</span>
                      <span style="color: #000000">)</span>
                      <br />
                      <span style="color: #000000">            </span>
                      <span style="color: #ff4500">$asciiEnd</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">=</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #8b0000">""</span>
                      <span style="color: #000000">;</span>
                      <br />
                      <span style="color: #000000">        </span>
                      <span style="color: #000000">}</span>
                      <br />
                      <span style="color: #000000">    </span>
                      <span style="color: #000000">}</span>
                      <br />
                      <span style="color: #000000">}</span>
                      <br />
                      <br />
                      <span style="color: #00008b">end</span>
                      <br />
                      <span style="color: #000000">{</span>
                      <br />
                      <span style="color: #000000">    </span>
                      <span style="color: #006400">##
At the end of the file, we might not have had the chance to output</span>
                      <br />
                      <span style="color: #000000">    </span>
                      <span style="color: #006400">##
the end of the line yet. Only do this if we didn't exit on the 16-byte</span>
                      <br />
                      <span style="color: #000000">    </span>
                      <span style="color: #006400">##
boundary, though.</span>
                      <br />
                      <span style="color: #000000">    </span>
                      <span style="color: #00008b">if</span>
                      <span style="color: #000000">(</span>
                      <span style="color: #000000">(</span>
                      <span style="color: #ff4500">$counter</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">%</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #800080">16</span>
                      <span style="color: #000000">)</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">-ne</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #800080">0</span>
                      <span style="color: #000000">)</span>
                      <br />
                      <span style="color: #000000">    </span>
                      <span style="color: #000000">{</span>
                      <br />
                      <span style="color: #000000">       </span>
                      <span style="color: #00008b">while</span>
                      <span style="color: #000000">(</span>
                      <span style="color: #000000">(</span>
                      <span style="color: #ff4500">$counter</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">%</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #800080">16</span>
                      <span style="color: #000000">)</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">-ne</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #800080">0</span>
                      <span style="color: #000000">)</span>
                      <br />
                      <span style="color: #000000">       </span>
                      <span style="color: #000000">{</span>
                      <br />
                      <span style="color: #000000">          </span>
                      <span style="color: #ff4500">$nextLine</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">+=</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #8b0000">"
"</span>
                      <br />
                      <span style="color: #000000">          </span>
                      <span style="color: #ff4500">$asciiEnd</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">+=</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #8b0000">"
"</span>
                      <br />
                      <span style="color: #000000">          </span>
                      <span style="color: #ff4500">$counter</span>
                      <span style="color: #a9a9a9">++</span>
                      <span style="color: #000000">;</span>
                      <br />
                      <span style="color: #000000">       </span>
                      <span style="color: #000000">}</span>
                      <br />
                      <span style="color: #000000">       </span>
                      <span style="color: #8b0000">"$nextLine
$asciiEnd"</span>
                      <br />
                      <span style="color: #000000">    </span>
                      <span style="color: #000000">}</span>
                      <br />
                      <br />
                      <span style="color: #000000">    </span>
                      <span style="color: #8b0000">""</span>
                      <br />
                      <span style="color: #000000">}</span>
                    </div>
                  </td>
                </tr>
              </tbody>
            </table>
          </div>
        </blockquote>
        <p>
 
</p>
        <p>
[<i>Edit: Monad has now been renamed to Windows PowerShell. This script or discussion
may require slight adjustments before it applies directly to newer builds.</i>]
</p>
        <img width="0" height="0" src="http://www.leeholmes.com/blog/aggbug.ashx?id=58d4c1e1-bb86-49c4-98c5-bbf7ba720a37" />
      </body>
      <title>Hex Dumper in PowerShell</title>
      <guid isPermaLink="false">http://www.leeholmes.com/blog/PermaLink,guid,58d4c1e1-bb86-49c4-98c5-bbf7ba720a37.aspx</guid>
      <link>http://www.leeholmes.com/blog/HexDumperInPowerShell.aspx</link>
      <pubDate>Mon, 23 Nov 2009 22:05:11 GMT</pubDate>
      <description>&lt;p&gt;
Marcel has been posting some interesting articles on using PowerShell to &lt;a href="http://blogs.msdn.com/monad/archive/2005/09/13/465250.aspx"&gt;generate
the MD5 hashes of files&lt;/a&gt;.&amp;#160; Now, an MD5 hash of a file is just an array of
bytes.&amp;#160; Typical hashing programs display this in a more friendly manner:
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Courier New"&gt;PS:15 C:\Temp &amp;gt;md5sum 71-59-B7.bmp 
&lt;br /&gt;
a05805e638741bb767f97c0e88962952 *71-59-B7.bmp&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
Although the output of Marcel’s scripts could definitely be crafted to display this
output, they currently output the string representation of a byte array:
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Courier New"&gt;PS:19 C:\Temp &amp;gt;get-md5 (get-childitem 71-59-B7.bmp) 
&lt;br /&gt;
160 88 5 230 56 116 27 183 103 249 124 14 136 150 41 82&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
One of the comments in response to Marcel’s post was that PowerShell should, by default,
output byte arrays as hex.&amp;#160; This is a good suggestion, and we can go even further
with it.&amp;#160; Let’s write a script to give us a full hex editor-like view of a byte
array:
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Courier New"&gt;PS:20 C:\Temp &amp;gt;get-md5 (get-childitem 71-59-B7.bmp) |
format-hex&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;br /&gt;
&lt;font face="Courier New"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;
0&amp;#160; 1&amp;#160; 2&amp;#160; 3&amp;#160; 4&amp;#160; 5&amp;#160; 6&amp;#160; 7&amp;#160; 8&amp;#160; 9&amp;#160; A&amp;#160;
B&amp;#160; C&amp;#160; D&amp;#160; E&amp;#160; F&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;br /&gt;
&lt;font face="Courier New"&gt;00000000&amp;#160;&amp;#160; A0 58 05 E6 38 74 1B B7 67 F9 7C 0E
88 96 29 52&amp;#160;&amp;#160; X.æ8t.•gù|.??)R&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
Or even better, let’s use it to dump out a very small bitmap – 10 pixels of the colour
(R=0x71 G=0x59 B=0xB7)
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Courier New"&gt;PS:21 C:\Temp &amp;gt;Format-Hex 71-59-B7.bmp&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;br /&gt;
&lt;font face="Courier New"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;
0&amp;#160; 1&amp;#160; 2&amp;#160; 3&amp;#160; 4&amp;#160; 5&amp;#160; 6&amp;#160; 7&amp;#160; 8&amp;#160; 9&amp;#160; A&amp;#160;
B&amp;#160; C&amp;#160; D&amp;#160; E&amp;#160; F&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;br /&gt;
&lt;font face="Courier New"&gt;00000000&amp;#160;&amp;#160; 42 4D 5E 00 00 00 00 00 00 00 36 00
00 00 28 00&amp;#160; BM^.......6...(. 
&lt;br /&gt;
00000010&amp;#160;&amp;#160; 00 00 0A 00 00 00 01 00 00 00 01 00 20 00 00 00&amp;#160; ............
... 
&lt;br /&gt;
00000020&amp;#160;&amp;#160; 00 00 00 00 00 00 C4 0E 00 00 C4 0E 00 00 00 00&amp;#160; ......Ä...Ä..... 
&lt;br /&gt;
00000030&amp;#160;&amp;#160; 00 00 00 00 00 00 B7 59 71 FF B7 59 71 FF B7 59&amp;#160; ......•Yq.•Yq.•Y 
&lt;br /&gt;
00000040&amp;#160;&amp;#160; 71 FF B7 59 71 FF B7 59 71 FF B7 59 71 FF B7 59&amp;#160; q.•Yq.•Yq.•Yq.•Y 
&lt;br /&gt;
00000050&amp;#160;&amp;#160; 71 FF B7 59 71 FF B7 59 71 FF B7 59 71 FF&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;
q.•Yq.•Yq.•Yq.&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
To make it easier to determine byte offsets, files are usually broken down into 16-byte
rows.&amp;#160; The left-hand section gives the offset of the 16-byte chunk.&amp;#160; The
middle section gives the hex representation of the data at that location.&amp;#160; These
pieces of data are aligned in columns also, corresponding to their location within
the 16-byte chunk.&amp;#160; So column “E” in row 0x40 means a file offset of (0x40 +
0x0E) = 0x4E.&amp;#160; The last section gives an ASCII representation of the data.
&lt;/p&gt;
&lt;p&gt;
In this representation, it becomes possible to see some of the underlying &lt;a href="http://www.fortunecity.com/skyscraper/windows/364/bmpffrmt.html"&gt;structure
of the bitmap format&lt;/a&gt;:
&lt;/p&gt;
&lt;p&gt;
&lt;table border="1" align="center"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;font size="2"&gt;Offset&lt;/font&gt;&lt;/td&gt;
&lt;td&gt;
&lt;font size="2"&gt;Length&lt;/font&gt;&lt;/td&gt;
&lt;td&gt;
&lt;font size="2"&gt;Comment&lt;/font&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;font size="2"&gt;0x00&lt;/font&gt;&lt;/td&gt;
&lt;td&gt;
&lt;font size="2"&gt;2&lt;/font&gt;&lt;/td&gt;
&lt;td&gt;
&lt;font size="2"&gt;“BM,” the magic bitmap header&lt;/font&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;font size="2"&gt;0x02&lt;/font&gt;&lt;/td&gt;
&lt;td&gt;
&lt;font size="2"&gt;4&lt;/font&gt;&lt;/td&gt;
&lt;td&gt;
&lt;font size="2"&gt;“0x5E,” the length of the file. Notice that our last data byte is at
0x5D.&amp;#160; Since we started counting from zero, this means that we have 0x5E bytes
of data.&lt;/font&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;font size="2"&gt;(...)&lt;/font&gt;&lt;/td&gt;
&lt;td&gt;
&lt;font size="2"&gt;(...)&lt;/font&gt;&lt;/td&gt;
&lt;td&gt;
&lt;font size="2"&gt;(...)&lt;/font&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;font size="2"&gt;0x0A&lt;/font&gt;&lt;/td&gt;
&lt;td&gt;
&lt;font size="2"&gt;4&lt;/font&gt;&lt;/td&gt;
&lt;td&gt;
&lt;font size="2"&gt;“0x36”, specifies the absolute start of the bitmap data. Notice that
the data begins at offset (0x30 + 0x06).&lt;/font&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;font size="2"&gt;0x36&lt;/font&gt;&lt;/td&gt;
&lt;td&gt;
&lt;font size="2"&gt;40&lt;/font&gt;&lt;/td&gt;
&lt;td&gt;
&lt;font size="2"&gt;10 4-byte pixel representations. In Bitmaps, they are laid out as (B=0xB7
G=0x59 R=0x71 &amp;lt;reserved&amp;gt;)&lt;/font&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/p&gt;
&lt;p&gt;
Now, for the script:
&lt;/p&gt;
&lt;blockquote&gt; 
&lt;div style="border-bottom: black 1px solid; border-left: black 1px solid; padding-bottom: 5px; padding-left: 5px; width: 650px; padding-right: 5px; font-family: consolas,lucida console; font-size: 10pt; overflow: auto; border-top: black 1px solid; border-right: black 1px solid; padding-top: 5px"&gt;
&lt;table border="0" cellspacing="0" cellpadding="5"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td valign="top"&gt;
&lt;div style="padding-bottom: 5px; padding-left: 5px; padding-right: 5px; font-family: consolas,lucida console; background: #cecece; font-size: 10pt; padding-top: 5px"&gt;001 
&lt;br /&gt;
002 
&lt;br /&gt;
003 
&lt;br /&gt;
004 
&lt;br /&gt;
005 
&lt;br /&gt;
006 
&lt;br /&gt;
007 
&lt;br /&gt;
008 
&lt;br /&gt;
009 
&lt;br /&gt;
010 
&lt;br /&gt;
011 
&lt;br /&gt;
012 
&lt;br /&gt;
013 
&lt;br /&gt;
014 
&lt;br /&gt;
015 
&lt;br /&gt;
016 
&lt;br /&gt;
017 
&lt;br /&gt;
018 
&lt;br /&gt;
019 
&lt;br /&gt;
020 
&lt;br /&gt;
021 
&lt;br /&gt;
022 
&lt;br /&gt;
023 
&lt;br /&gt;
024 
&lt;br /&gt;
025 
&lt;br /&gt;
026 
&lt;br /&gt;
027 
&lt;br /&gt;
028 
&lt;br /&gt;
029 
&lt;br /&gt;
030 
&lt;br /&gt;
031 
&lt;br /&gt;
032 
&lt;br /&gt;
033 
&lt;br /&gt;
034 
&lt;br /&gt;
035 
&lt;br /&gt;
036 
&lt;br /&gt;
037 
&lt;br /&gt;
038 
&lt;br /&gt;
039 
&lt;br /&gt;
040 
&lt;br /&gt;
041 
&lt;br /&gt;
042 
&lt;br /&gt;
043 
&lt;br /&gt;
044 
&lt;br /&gt;
045 
&lt;br /&gt;
046 
&lt;br /&gt;
047 
&lt;br /&gt;
048 
&lt;br /&gt;
049 
&lt;br /&gt;
050 
&lt;br /&gt;
051 
&lt;br /&gt;
052 
&lt;br /&gt;
053 
&lt;br /&gt;
054 
&lt;br /&gt;
055 
&lt;br /&gt;
056 
&lt;br /&gt;
057 
&lt;br /&gt;
058 
&lt;br /&gt;
059 
&lt;br /&gt;
060 
&lt;br /&gt;
061 
&lt;br /&gt;
062 
&lt;br /&gt;
063 
&lt;br /&gt;
064 
&lt;br /&gt;
065 
&lt;br /&gt;
066 
&lt;br /&gt;
067 
&lt;br /&gt;
068 
&lt;br /&gt;
069 
&lt;br /&gt;
070 
&lt;br /&gt;
071 
&lt;br /&gt;
072 
&lt;br /&gt;
073 
&lt;br /&gt;
074 
&lt;br /&gt;
075 
&lt;br /&gt;
076 
&lt;br /&gt;
077 
&lt;br /&gt;
078 
&lt;br /&gt;
079 
&lt;br /&gt;
080 
&lt;br /&gt;
081 
&lt;br /&gt;
082 
&lt;br /&gt;
083 
&lt;br /&gt;
084 
&lt;br /&gt;
085 
&lt;br /&gt;
086 
&lt;br /&gt;
087 
&lt;br /&gt;
088 
&lt;br /&gt;
089 
&lt;br /&gt;
090 
&lt;br /&gt;
091 
&lt;br /&gt;
092 
&lt;br /&gt;
093 
&lt;br /&gt;
094 
&lt;br /&gt;
095 
&lt;br /&gt;
096 
&lt;br /&gt;
097 
&lt;br /&gt;
098 
&lt;br /&gt;
099 
&lt;br /&gt;
100 
&lt;br /&gt;
101 
&lt;br /&gt;
102 
&lt;br /&gt;
103 
&lt;br /&gt;
104 
&lt;br /&gt;
105 
&lt;br /&gt;
106 
&lt;br /&gt;
107 
&lt;br /&gt;
108 
&lt;br /&gt;
109 
&lt;br /&gt;
110 
&lt;br /&gt;
111 
&lt;br /&gt;
112 
&lt;br /&gt;
113 
&lt;br /&gt;
114 
&lt;br /&gt;
115 
&lt;br /&gt;
116 
&lt;br /&gt;
117 
&lt;br /&gt;
118 
&lt;br /&gt;
119 
&lt;br /&gt;
120 
&lt;br /&gt;
121 
&lt;br /&gt;
122 
&lt;br /&gt;
123 
&lt;br /&gt;
124 
&lt;br /&gt;
125 
&lt;br /&gt;
126 
&lt;br /&gt;
127 
&lt;br /&gt;
128 
&lt;br /&gt;
129 
&lt;br /&gt;
130 
&lt;br /&gt;
131 
&lt;br /&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;td valign="top" nowrap="nowrap"&gt;
&lt;div style="padding-bottom: 5px; padding-left: 5px; padding-right: 5px; font-family: consolas,lucida console; background: #fcfcfc; font-size: 10pt; padding-top: 5px"&gt;&lt;span style="color: #006400"&gt;##############################################################################&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #006400"&gt;##&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #006400"&gt;## Format-Hex&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #006400"&gt;##&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #006400"&gt;## From Windows PowerShell Cookbook (O'Reilly)&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #006400"&gt;## by Lee Holmes (http://www.leeholmes.com/guide)&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #006400"&gt;##&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #006400"&gt;##############################################################################&lt;/span&gt; 
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: #006400"&gt;&amp;lt;# 
&lt;br /&gt;
&lt;br /&gt;
.SYNOPSIS 
&lt;br /&gt;
Outputs a file or pipelined input as a hexadecimal display. To determine the 
&lt;br /&gt;
offset of a character in the input, add the number at the far-left of the row 
&lt;br /&gt;
with the the number at the top of the column for that character. 
&lt;br /&gt;
&amp;#160; 
&lt;br /&gt;
.EXAMPLE 
&lt;br /&gt;
PS &amp;gt;&amp;quot;Hello World&amp;quot; | Format-Hex 
&lt;br /&gt;
&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 0 1 2 3 4 5 6 7
8 9 A B C D E F 
&lt;br /&gt;
&amp;#160; 
&lt;br /&gt;
00000000 48 00 65 00 6C 00 6C 00 6F 00 20 00 57 00 6F 00 H.e.l.l.o. .W.o. 
&lt;br /&gt;
00000010 72 00 6C 00 64 00 r.l.d. 
&lt;br /&gt;
&amp;#160; 
&lt;br /&gt;
.EXAMPLE 
&lt;br /&gt;
PS &amp;gt;Format-Hex c:\temp\example.bmp 
&lt;br /&gt;
&amp;#160;&amp;#160; 
&lt;br /&gt;
#&amp;gt;&lt;/span&gt; 
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: #a9a9a9"&gt;[&lt;/span&gt;&lt;span style="color: #add8e6"&gt;CmdletBinding&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #000000"&gt;DefaultParameterSetName&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #8b0000"&gt;&amp;quot;ByPath&amp;quot;&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;]&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #00008b"&gt;param&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #006400"&gt;##
The file to read the content from&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;[&lt;/span&gt;&lt;span style="color: #add8e6"&gt;Parameter&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #000000"&gt;ParameterSetName&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #8b0000"&gt;&amp;quot;ByPath&amp;quot;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;,&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;Position&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #800080"&gt;0&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;]&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #008080"&gt;[string]&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$Path&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;,&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #006400"&gt;##
The input (bytes or strings) to format as hexadecimal&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;[&lt;/span&gt;&lt;span style="color: #add8e6"&gt;Parameter&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #000000"&gt;ParameterSetName&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #8b0000"&gt;&amp;quot;ByInput&amp;quot;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;,&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;Position&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #800080"&gt;0&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;,&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #000000"&gt;ValueFromPipeline&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$true&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;]&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #008080"&gt;[Object]&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$InputObject&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;)&lt;/span&gt; 
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: #00008b"&gt;begin&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;{&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #006400"&gt;##
Create the array to hold the content. If the user specified the&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #006400"&gt;##
-Path parameter, read the bytes from the path.&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #008080"&gt;[byte[]]&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$inputBytes&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$null&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #00008b"&gt;if&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$Path&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;{&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$inputBytes&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #008080"&gt;[IO.File]&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;::&lt;/span&gt;&lt;span style="color: #000000"&gt;ReadAllBytes&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #0000ff"&gt;Resolve-Path&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$Path&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;}&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #006400"&gt;##
Store our header, and formatting information&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #ff4500"&gt;$counter&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #800080"&gt;0&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #ff4500"&gt;$header&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #8b0000"&gt;&amp;quot;
0 1 2 3 4 5 6 7 8 9 A B C D E F&amp;quot;&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #ff4500"&gt;$nextLine&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #8b0000"&gt;&amp;quot;{0}
&amp;quot;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;-f&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160; &lt;/span&gt;&lt;span style="color: #008080"&gt;[Convert]&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;::&lt;/span&gt;&lt;span style="color: #000000"&gt;ToString&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #ff4500"&gt;$counter&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;,&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #800080"&gt;16&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;.&lt;/span&gt;&lt;span style="color: #000000"&gt;ToUpper&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;.&lt;/span&gt;&lt;span style="color: #000000"&gt;PadLeft&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #800080"&gt;8&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;,&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #8b0000"&gt;'0'&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #ff4500"&gt;$asciiEnd&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #8b0000"&gt;&amp;quot;&amp;quot;&lt;/span&gt; 
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #006400"&gt;##
Output the header&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #8b0000"&gt;&amp;quot;`r`n$header`r`n&amp;quot;&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;}&lt;/span&gt; 
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: #00008b"&gt;process&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;{&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #006400"&gt;##
If they specified the -InputObject parameter, retrieve the bytes&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #006400"&gt;##
from that input&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #00008b"&gt;if&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$InputObject&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #000000"&gt;{&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #006400"&gt;##
If it's an actual byte, add it to the inputBytes array.&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #00008b"&gt;if&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$InputObject&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;-is&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #008080"&gt;[Byte]&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #000000"&gt;{&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #ff4500"&gt;$inputBytes&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$InputObject&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #000000"&gt;}&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #00008b"&gt;else&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #000000"&gt;{&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #006400"&gt;##
Otherwise, convert it to a string and extract the bytes&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #006400"&gt;##
from that.&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #ff4500"&gt;$inputString&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #008080"&gt;[string]&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$InputObject&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #ff4500"&gt;$inputBytes&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #008080"&gt;[Text.Encoding]&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;::&lt;/span&gt;&lt;span style="color: #000000"&gt;Unicode&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;.&lt;/span&gt;&lt;span style="color: #000000"&gt;GetBytes&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$inputString&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #000000"&gt;}&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #000000"&gt;}&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #006400"&gt;##
Now go through the input bytes&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #00008b"&gt;foreach&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$byte&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #00008b"&gt;in&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$inputBytes&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #000000"&gt;{&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #006400"&gt;##
Display each byte, in 2-digit hexidecimal, and add that to the&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #006400"&gt;##
left-hand side.&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #ff4500"&gt;$nextLine&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;+=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #8b0000"&gt;&amp;quot;{0:X2}
&amp;quot;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;-f&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$byte&lt;/span&gt; 
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #006400"&gt;##
If the character is printable, add its ascii representation to&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #006400"&gt;##
the right-hand side. Otherwise, add a dot to the right hand side.&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #00008b"&gt;if&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$byte&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;-ge&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #800080"&gt;0x20&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;-and&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$byte&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;-le&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #800080"&gt;0xFE&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #000000"&gt;{&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #ff4500"&gt;$asciiEnd&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;+=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #008080"&gt;[char]&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$byte&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #000000"&gt;}&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #00008b"&gt;else&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #000000"&gt;{&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #ff4500"&gt;$asciiEnd&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;+=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #8b0000"&gt;&amp;quot;.&amp;quot;&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #000000"&gt;}&lt;/span&gt; 
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #ff4500"&gt;$counter&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;++&lt;/span&gt;&lt;span style="color: #000000"&gt;;&lt;/span&gt; 
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #006400"&gt;##
If we've hit the end of a line, combine the right half with the&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #006400"&gt;##
left half, and start a new line.&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #00008b"&gt;if&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$counter&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;%&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #800080"&gt;16&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;-eq&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #800080"&gt;0&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #000000"&gt;{&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #8b0000"&gt;&amp;quot;$nextLine
$asciiEnd&amp;quot;&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #ff4500"&gt;$nextLine&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #8b0000"&gt;&amp;quot;{0}
&amp;quot;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;-f&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #008080"&gt;[Convert]&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;::&lt;/span&gt;&lt;span style="color: #000000"&gt;ToString&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #ff4500"&gt;$counter&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;,&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #800080"&gt;16&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;.&lt;/span&gt;&lt;span style="color: #000000"&gt;ToUpper&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;.&lt;/span&gt;&lt;span style="color: #000000"&gt;PadLeft&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #800080"&gt;8&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;,&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #8b0000"&gt;'0'&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #ff4500"&gt;$asciiEnd&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #8b0000"&gt;&amp;quot;&amp;quot;&lt;/span&gt;&lt;span style="color: #000000"&gt;;&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #000000"&gt;}&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #000000"&gt;}&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;}&lt;/span&gt; 
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: #00008b"&gt;end&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;{&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #006400"&gt;##
At the end of the file, we might not have had the chance to output&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #006400"&gt;##
the end of the line yet. Only do this if we didn't exit on the 16-byte&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #006400"&gt;##
boundary, though.&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #00008b"&gt;if&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$counter&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;%&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #800080"&gt;16&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;-ne&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #800080"&gt;0&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #000000"&gt;{&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #00008b"&gt;while&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$counter&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;%&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #800080"&gt;16&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;-ne&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #800080"&gt;0&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #000000"&gt;{&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #ff4500"&gt;$nextLine&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;+=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #8b0000"&gt;&amp;quot;
&amp;quot;&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #ff4500"&gt;$asciiEnd&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;+=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #8b0000"&gt;&amp;quot;
&amp;quot;&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #ff4500"&gt;$counter&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;++&lt;/span&gt;&lt;span style="color: #000000"&gt;;&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #000000"&gt;}&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #8b0000"&gt;&amp;quot;$nextLine
$asciiEnd&amp;quot;&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #000000"&gt;}&lt;/span&gt; 
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #8b0000"&gt;&amp;quot;&amp;quot;&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;}&lt;/span&gt; 
&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
&amp;#160;
&lt;/p&gt;
&lt;p&gt;
[&lt;i&gt;Edit: Monad has now been renamed to Windows PowerShell. This script or discussion
may require slight adjustments before it applies directly to newer builds.&lt;/i&gt;]
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.leeholmes.com/blog/aggbug.ashx?id=58d4c1e1-bb86-49c4-98c5-bbf7ba720a37" /&gt;</description>
      <comments>http://www.leeholmes.com/blog/CommentView,guid,58d4c1e1-bb86-49c4-98c5-bbf7ba720a37.aspx</comments>
    </item>
    <item>
      <trackback:ping>http://www.leeholmes.com/blog/Trackback.aspx?guid=8fd96bcb-e391-4389-829b-71f9f67f863d</trackback:ping>
      <pingback:server>http://www.leeholmes.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.leeholmes.com/blog/PermaLink,guid,8fd96bcb-e391-4389-829b-71f9f67f863d.aspx</pingback:target>
      <dc:creator>
      </dc:creator>
      <wfw:comment>http://www.leeholmes.com/blog/CommentView,guid,8fd96bcb-e391-4389-829b-71f9f67f863d.aspx</wfw:comment>
      <wfw:commentRss>http://www.leeholmes.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=8fd96bcb-e391-4389-829b-71f9f67f863d</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
When you’re writing a script that depends on PowerShell Remoting, it’s often helpful
to know that the remoting channel is open and will support the activities of your
script.
</p>
        <p>
PowerShell has a Test-WSMan command, but that only verifies that a WSMan connection
is possible. There are other scenarios you could be impacted by:
</p>
        <ul>
          <li>
Not having permission on the remote machine</li>
          <li>
Misconfiguration of the PowerShell endpoint</li>
          <li>
Corrupted installation</li>
          <li>
(etc)</li>
        </ul>
        <p>
As you dig deeper, you realize that the only way to really test the viability of the
remoting channel is to just do something on it, and verify that you got the results
you expected to. Since the implementation was so simple, we didn’t write a cmdlet
for it. In retrospect, the concept is more difficult than the implementation, so we
probably should have written it anyways. Here’s an example function that tests the
remoting connection to a specific machine.
</p>
        <blockquote>
          <table style="margin-left: 32.25pt; mso-cellspacing: 0in; mso-yfti-tbllook: 1184; mso-padding-alt: 0in 0in 0in 0in" class="MsoNormalTable" border="0" cellspacing="0" cellpadding="0">
            <tbody>
              <tr style="mso-yfti-irow: 0; mso-yfti-firstrow: yes; mso-yfti-lastrow: yes">
                <td style="padding-bottom: 3.75pt; padding-left: 3.75pt; padding-right: 3.75pt; padding-top: 3.75pt" valign="top">
                  <p style="background: #cecece; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" class="MsoNormal">
                    <span style="font-family: consolas; font-size: 10pt">001 
<br />
002 
<br />
003 
<br />
004 
<br />
005 
<br />
006 
<br />
007 
<br />
008 
<br />
009 
<br />
010 
<br />
011 
<br />
012 
<br />
013 
<br />
014 
<br />
015 
<br />
016 
<br />
017 
<br />
018 
<br />
019 
<br />
020 
<br />
021 
<br />
022 
<br />
023 
<br />
024 
<br />
025 
<br />
026 
<br />
027 
<br />
028</span>
                  </p>
                  <p>
                  </p>
                </td>
                <td style="padding-bottom: 3.75pt; padding-left: 3.75pt; padding-right: 3.75pt; padding-top: 3.75pt" valign="top" nowrap="nowrap">
                  <p style="background: #fcfcfc; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" class="MsoNormal">
                    <span style="font-family: consolas; color: darkblue; font-size: 10pt">function</span>
                    <span style="font-family: consolas; color: black; font-size: 10pt"> </span>
                    <span style="font-family: consolas; color: blueviolet; font-size: 10pt">Test-PsRemoting</span>
                    <span style="font-family: consolas; font-size: 10pt">
                      <br />
                      <span style="color: black">{</span>
                      <br />
                      <span style="color: black">    </span>
                      <span style="color: darkblue">param</span>
                      <span style="color: black">(</span>
                      <br />
                      <span style="color: black">        </span>
                      <span style="color: darkgray">[</span>
                      <span style="color: lightblue">Parameter</span>
                      <span style="color: black">(Mandatory </span>
                      <span style="color: darkgray">=</span>
                      <span style="color: black"> </span>
                      <span style="color: orangered">$true</span>
                      <span style="color: black">)</span>
                      <span style="color: darkgray">]</span>
                      <br />
                      <span style="color: black">        </span>
                      <span style="color: orangered">$computername</span>
                      <br />
                      <span style="color: black">    )</span>
                      <br />
                      <span style="color: black">    </span>
                      <br />
                      <span style="color: black">    </span>
                      <span style="color: darkblue">try</span>
                      <br />
                      <span style="color: black">    {</span>
                      <br />
                      <span style="color: black">        </span>
                      <span style="color: orangered">$errorActionPreference</span>
                      <span style="color: black"> </span>
                      <span style="color: darkgray">=</span>
                      <span style="color: black"> </span>
                      <span style="color: darkred">"Stop"</span>
                      <br />
                      <span style="color: black">        </span>
                      <span style="color: orangered">$result</span>
                      <span style="color: black"> </span>
                      <span style="color: darkgray">=</span>
                      <span style="color: black"> </span>
                      <span style="color: blue">Invoke-Command</span>
                      <span style="color: black"> </span>
                      <span style="color: navy">-ComputerName</span>
                      <span style="color: black"> </span>
                      <span style="color: orangered">$computername</span>
                      <span style="color: black"> { </span>
                      <span style="color: purple">1</span>
                      <span style="color: black"> }</span>
                      <br />
                      <span style="color: black">    }</span>
                      <br />
                      <span style="color: black">    </span>
                      <span style="color: darkblue">catch</span>
                      <br />
                      <span style="color: black">    {</span>
                      <br />
                      <span style="color: black">        </span>
                      <span style="color: blue">Write-Verbose</span>
                      <span style="color: black"> </span>
                      <span style="color: orangered">$_</span>
                      <br />
                      <span style="color: black">        </span>
                      <span style="color: darkblue">return</span>
                      <span style="color: black"> </span>
                      <span style="color: orangered">$false</span>
                      <br />
                      <span style="color: black">    }</span>
                      <br />
                      <span style="color: black">    </span>
                      <br />
                      <span style="color: black">    </span>
                      <span style="color: darkgreen">##
I've never seen this happen, but if you want to be</span>
                      <br />
                      <span style="color: black">    </span>
                      <span style="color: darkgreen">##
thorough....</span>
                      <br />
                      <span style="color: black">    </span>
                      <span style="color: darkblue">if</span>
                      <span style="color: black">(</span>
                      <span style="color: orangered">$result</span>
                      <span style="color: black"> </span>
                      <span style="color: darkgray">-ne</span>
                      <span style="color: black"> </span>
                      <span style="color: purple">1</span>
                      <span style="color: black">)</span>
                      <br />
                      <span style="color: black">    {</span>
                      <br />
                      <span style="color: black">        </span>
                      <span style="color: blue">Write-Verbose</span>
                      <span style="color: black"> </span>
                      <span style="color: darkred">"Remoting
to $computerName returned an unexpected result."</span>
                      <br />
                      <span style="color: black">        </span>
                      <span style="color: darkblue">return</span>
                      <span style="color: black"> </span>
                      <span style="color: orangered">$false</span>
                      <br />
                      <span style="color: black">    }</span>
                      <br />
                      <span style="color: black">    </span>
                      <br />
                      <span style="color: black">    </span>
                      <span style="color: orangered">$true</span>
                      <span style="color: black">    </span>
                      <br />
                      <span style="color: black">}</span>
                    </span>
                  </p>
                  <p>
                  </p>
                </td>
              </tr>
            </tbody>
          </table>
        </blockquote>
        <img width="0" height="0" src="http://www.leeholmes.com/blog/aggbug.ashx?id=8fd96bcb-e391-4389-829b-71f9f67f863d" />
      </body>
      <title>Testing for PowerShell Remoting: Test-PsRemoting</title>
      <guid isPermaLink="false">http://www.leeholmes.com/blog/PermaLink,guid,8fd96bcb-e391-4389-829b-71f9f67f863d.aspx</guid>
      <link>http://www.leeholmes.com/blog/TestingForPowerShellRemotingTestPsRemoting.aspx</link>
      <pubDate>Fri, 20 Nov 2009 19:42:09 GMT</pubDate>
      <description>&lt;p&gt;
When you’re writing a script that depends on PowerShell Remoting, it’s often helpful
to know that the remoting channel is open and will support the activities of your
script.
&lt;/p&gt;
&lt;p&gt;
PowerShell has a Test-WSMan command, but that only verifies that a WSMan connection
is possible. There are other scenarios you could be impacted by:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
Not having permission on the remote machine&lt;/li&gt;
&lt;li&gt;
Misconfiguration of the PowerShell endpoint&lt;/li&gt;
&lt;li&gt;
Corrupted installation&lt;/li&gt;
&lt;li&gt;
(etc)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
As you dig deeper, you realize that the only way to really test the viability of the
remoting channel is to just do something on it, and verify that you got the results
you expected to. Since the implementation was so simple, we didn’t write a cmdlet
for it. In retrospect, the concept is more difficult than the implementation, so we
probably should have written it anyways. Here’s an example function that tests the
remoting connection to a specific machine.
&lt;/p&gt;
&lt;blockquote&gt; 
&lt;table style="margin-left: 32.25pt; mso-cellspacing: 0in; mso-yfti-tbllook: 1184; mso-padding-alt: 0in 0in 0in 0in" class="MsoNormalTable" border="0" cellspacing="0" cellpadding="0"&gt;
&lt;tbody&gt;
&lt;tr style="mso-yfti-irow: 0; mso-yfti-firstrow: yes; mso-yfti-lastrow: yes"&gt;
&lt;td style="padding-bottom: 3.75pt; padding-left: 3.75pt; padding-right: 3.75pt; padding-top: 3.75pt" valign="top"&gt;
&lt;p style="background: #cecece; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" class="MsoNormal"&gt;
&lt;span style="font-family: consolas; font-size: 10pt"&gt;001 
&lt;br /&gt;
002 
&lt;br /&gt;
003 
&lt;br /&gt;
004 
&lt;br /&gt;
005 
&lt;br /&gt;
006 
&lt;br /&gt;
007 
&lt;br /&gt;
008 
&lt;br /&gt;
009 
&lt;br /&gt;
010 
&lt;br /&gt;
011 
&lt;br /&gt;
012 
&lt;br /&gt;
013 
&lt;br /&gt;
014 
&lt;br /&gt;
015 
&lt;br /&gt;
016 
&lt;br /&gt;
017 
&lt;br /&gt;
018 
&lt;br /&gt;
019 
&lt;br /&gt;
020 
&lt;br /&gt;
021 
&lt;br /&gt;
022 
&lt;br /&gt;
023 
&lt;br /&gt;
024 
&lt;br /&gt;
025 
&lt;br /&gt;
026 
&lt;br /&gt;
027 
&lt;br /&gt;
028&lt;/span&gt; 
&lt;p&gt;
&lt;/p&gt;
&gt;
&lt;/td&gt;
&lt;td style="padding-bottom: 3.75pt; padding-left: 3.75pt; padding-right: 3.75pt; padding-top: 3.75pt" valign="top" nowrap="nowrap"&gt;
&lt;p style="background: #fcfcfc; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" class="MsoNormal"&gt;
&lt;span style="font-family: consolas; color: darkblue; font-size: 10pt"&gt;function&lt;/span&gt;&lt;span style="font-family: consolas; color: black; font-size: 10pt"&gt;&amp;#160;&lt;/span&gt;&lt;span style="font-family: consolas; color: blueviolet; font-size: 10pt"&gt;Test-PsRemoting&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt"&gt; 
&lt;br /&gt;
&lt;span style="color: black"&gt;{&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: black"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: darkblue"&gt;param&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: black"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: darkgray"&gt;[&lt;/span&gt;&lt;span style="color: lightblue"&gt;Parameter&lt;/span&gt;&lt;span style="color: black"&gt;(Mandatory &lt;/span&gt;&lt;span style="color: darkgray"&gt;=&lt;/span&gt;&lt;span style="color: black"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: orangered"&gt;$true&lt;/span&gt;&lt;span style="color: black"&gt;)&lt;/span&gt;&lt;span style="color: darkgray"&gt;]&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: black"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: orangered"&gt;$computername&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: black"&gt;&amp;#160;&amp;#160;&amp;#160; )&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: black"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: black"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: darkblue"&gt;try&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: black"&gt;&amp;#160;&amp;#160;&amp;#160; {&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: black"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: orangered"&gt;$errorActionPreference&lt;/span&gt;&lt;span style="color: black"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: darkgray"&gt;=&lt;/span&gt;&lt;span style="color: black"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: darkred"&gt;&amp;quot;Stop&amp;quot;&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: black"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: orangered"&gt;$result&lt;/span&gt;&lt;span style="color: black"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: darkgray"&gt;=&lt;/span&gt;&lt;span style="color: black"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: blue"&gt;Invoke-Command&lt;/span&gt;&lt;span style="color: black"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: navy"&gt;-ComputerName&lt;/span&gt;&lt;span style="color: black"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: orangered"&gt;$computername&lt;/span&gt;&lt;span style="color: black"&gt; { &lt;/span&gt;&lt;span style="color: purple"&gt;1&lt;/span&gt;&lt;span style="color: black"&gt; }&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: black"&gt;&amp;#160;&amp;#160;&amp;#160; }&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: black"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: darkblue"&gt;catch&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: black"&gt;&amp;#160;&amp;#160;&amp;#160; {&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: black"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: blue"&gt;Write-Verbose&lt;/span&gt;&lt;span style="color: black"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: orangered"&gt;$_&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: black"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: darkblue"&gt;return&lt;/span&gt;&lt;span style="color: black"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: orangered"&gt;$false&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: black"&gt;&amp;#160;&amp;#160;&amp;#160; }&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: black"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: black"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: darkgreen"&gt;##
I've never seen this happen, but if you want to be&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: black"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: darkgreen"&gt;##
thorough....&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: black"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: darkblue"&gt;if&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: orangered"&gt;$result&lt;/span&gt;&lt;span style="color: black"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: darkgray"&gt;-ne&lt;/span&gt;&lt;span style="color: black"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: purple"&gt;1&lt;/span&gt;&lt;span style="color: black"&gt;)&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: black"&gt;&amp;#160;&amp;#160;&amp;#160; {&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: black"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: blue"&gt;Write-Verbose&lt;/span&gt;&lt;span style="color: black"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: darkred"&gt;&amp;quot;Remoting
to $computerName returned an unexpected result.&amp;quot;&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: black"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: darkblue"&gt;return&lt;/span&gt;&lt;span style="color: black"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: orangered"&gt;$false&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: black"&gt;&amp;#160;&amp;#160;&amp;#160; }&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: black"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: black"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: orangered"&gt;$true&lt;/span&gt;&lt;span style="color: black"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: black"&gt;}&lt;/span&gt; &lt;/span&gt; 
&lt;p&gt;
&lt;/p&gt;
&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/blockquote&gt;&lt;img width="0" height="0" src="http://www.leeholmes.com/blog/aggbug.ashx?id=8fd96bcb-e391-4389-829b-71f9f67f863d" /&gt;</description>
      <comments>http://www.leeholmes.com/blog/CommentView,guid,8fd96bcb-e391-4389-829b-71f9f67f863d.aspx</comments>
    </item>
    <item>
      <trackback:ping>http://www.leeholmes.com/blog/Trackback.aspx?guid=4d388e75-c9c1-4ce0-a5cf-864d05f5acc7</trackback:ping>
      <pingback:server>http://www.leeholmes.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.leeholmes.com/blog/PermaLink,guid,4d388e75-c9c1-4ce0-a5cf-864d05f5acc7.aspx</pingback:target>
      <dc:creator>
      </dc:creator>
      <wfw:comment>http://www.leeholmes.com/blog/CommentView,guid,4d388e75-c9c1-4ce0-a5cf-864d05f5acc7.aspx</wfw:comment>
      <wfw:commentRss>http://www.leeholmes.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=4d388e75-c9c1-4ce0-a5cf-864d05f5acc7</wfw:commentRss>
      <slash:comments>1</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Over the past few years, Pumpkin carving in my family has somehow ended up focusing
on two themes: Math, and Knitting.
</p>
        <p>
A Sierpinski Triangle -- which surprisingly only took a toothpick or two to repair
isolated triangles:
</p>
        <p align="center">
          <img border="0" src="http://www.leeholmes.com/blog/content/binary/sierpinski_pumpkin.jpg" />
        </p>
        <p>
          <a href="http://en.wikipedia.org/wiki/Sierpinski_carpet">Sierpinski Carpet</a> (along
with a wee bit of evil, of course:)
</p>
        <p align="center">
          <img border="0" src="http://www.leeholmes.com/blog/content/binary/sierpinski_carpet_pumpkin.jpg" /> <img border="0" src="http://www.leeholmes.com/blog/content/binary/crossed_trident_pumpkin.jpg" /></p>
        <p>
Not being one to cut 64 of the level-three squares by hand, a cordless drill came
in extremely handy.
</p>
        <p>
Mandelbrot, and Koch snowflake:
</p>
        <p align="center">
          <img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="030" border="0" alt="030" src="http://www.leeholmes.com/blog/content/binary/WindowsLiveWriter/MathematicalPumpkins_9D3F/030_3.jpg" width="404" height="304" /> <img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="112" border="0" alt="112" src="http://www.leeholmes.com/blog/content/binary/WindowsLiveWriter/MathematicalPumpkins_9D3F/112_3.jpg" width="404" height="304" /></p>
        <p>
 
</p>
        <p>
Knitting randoms:
</p>
        <p align="center">
          <img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="106" border="0" alt="106" src="http://www.leeholmes.com/blog/content/binary/WindowsLiveWriter/MathematicalPumpkins_9D3F/106_1.jpg" width="404" height="304" />
          <img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="109" border="0" alt="109" src="http://www.leeholmes.com/blog/content/binary/WindowsLiveWriter/MathematicalPumpkins_9D3F/109_1.jpg" width="404" height="304" />
        </p>
        <p>
And just a cool cat in a window:
</p>
        <p>
          <img style="border-bottom: 0px; border-left: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px" title="Picture 636" border="0" alt="Picture 636" src="http://www.leeholmes.com/blog/content/binary/WindowsLiveWriter/MathematicalPumpkins_9D3F/Picture%20636_1.jpg" width="404" height="304" />
        </p>
        <p>
Unfortunately, when I'm out trick-or-treating, there's nobody around to give candy
to the little monsters.  I leave a note above a bowl on a chair – and now I finally
know why my calligraphy pens include red in the set!
</p>
        <p>
 
</p>
        <p align="center">
          <img border="0" src="http://www.leeholmes.com/blog/content/binary/candy_warning.jpg" />
        </p>
        <img width="0" height="0" src="http://www.leeholmes.com/blog/aggbug.ashx?id=4d388e75-c9c1-4ce0-a5cf-864d05f5acc7" />
      </body>
      <title>Mathematical Pumpkins</title>
      <guid isPermaLink="false">http://www.leeholmes.com/blog/PermaLink,guid,4d388e75-c9c1-4ce0-a5cf-864d05f5acc7.aspx</guid>
      <link>http://www.leeholmes.com/blog/MathematicalPumpkins.aspx</link>
      <pubDate>Thu, 29 Oct 2009 18:10:58 GMT</pubDate>
      <description>&lt;p&gt;
Over the past few years, Pumpkin carving in my family has somehow ended up focusing
on two themes: Math, and Knitting.
&lt;/p&gt;
&lt;p&gt;
A Sierpinski Triangle -- which surprisingly only took a toothpick or two to repair
isolated triangles:
&lt;/p&gt;
&lt;p align="center"&gt;
&lt;img border="0" src="http://www.leeholmes.com/blog/content/binary/sierpinski_pumpkin.jpg" /&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://en.wikipedia.org/wiki/Sierpinski_carpet"&gt;Sierpinski Carpet&lt;/a&gt; (along
with a wee bit of evil, of course:)
&lt;/p&gt;
&lt;p align="center"&gt;
&lt;img border="0" src="http://www.leeholmes.com/blog/content/binary/sierpinski_carpet_pumpkin.jpg" /&gt;&amp;#160;&lt;img border="0" src="http://www.leeholmes.com/blog/content/binary/crossed_trident_pumpkin.jpg" /&gt;
&lt;/p&gt;
&lt;p&gt;
Not being one to cut 64 of the level-three squares by hand, a cordless drill came
in extremely handy.
&lt;/p&gt;
&lt;p&gt;
Mandelbrot, and Koch snowflake:
&lt;/p&gt;
&lt;p align="center"&gt;
&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="030" border="0" alt="030" src="http://www.leeholmes.com/blog/content/binary/WindowsLiveWriter/MathematicalPumpkins_9D3F/030_3.jpg" width="404" height="304" /&gt;&amp;#160;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="112" border="0" alt="112" src="http://www.leeholmes.com/blog/content/binary/WindowsLiveWriter/MathematicalPumpkins_9D3F/112_3.jpg" width="404" height="304" /&gt; 
&lt;/p&gt;
&lt;p&gt;
&amp;#160;
&lt;/p&gt;
&lt;p&gt;
Knitting randoms:
&lt;/p&gt;
&lt;p align="center"&gt;
&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="106" border="0" alt="106" src="http://www.leeholmes.com/blog/content/binary/WindowsLiveWriter/MathematicalPumpkins_9D3F/106_1.jpg" width="404" height="304" /&gt; &lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="109" border="0" alt="109" src="http://www.leeholmes.com/blog/content/binary/WindowsLiveWriter/MathematicalPumpkins_9D3F/109_1.jpg" width="404" height="304" /&gt; 
&lt;/p&gt;
&lt;p&gt;
And just a cool cat in a window:
&lt;/p&gt;
&lt;p&gt;
&lt;img style="border-bottom: 0px; border-left: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px" title="Picture 636" border="0" alt="Picture 636" src="http://www.leeholmes.com/blog/content/binary/WindowsLiveWriter/MathematicalPumpkins_9D3F/Picture%20636_1.jpg" width="404" height="304" /&gt; 
&lt;/p&gt;
&lt;p&gt;
Unfortunately, when I'm out trick-or-treating, there's nobody around to give candy
to the little monsters.&amp;#160; I leave a note above a bowl on a chair – and now I finally
know why my calligraphy pens include red in the set!
&lt;/p&gt;
&lt;p&gt;
&amp;#160;
&lt;/p&gt;
&lt;p align="center"&gt;
&lt;img border="0" src="http://www.leeholmes.com/blog/content/binary/candy_warning.jpg" /&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.leeholmes.com/blog/aggbug.ashx?id=4d388e75-c9c1-4ce0-a5cf-864d05f5acc7" /&gt;</description>
      <comments>http://www.leeholmes.com/blog/CommentView,guid,4d388e75-c9c1-4ce0-a5cf-864d05f5acc7.aspx</comments>
    </item>
    <item>
      <trackback:ping>http://www.leeholmes.com/blog/Trackback.aspx?guid=2da304f2-6be6-4eca-805a-944bcce93b9a</trackback:ping>
      <pingback:server>http://www.leeholmes.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.leeholmes.com/blog/PermaLink,guid,2da304f2-6be6-4eca-805a-944bcce93b9a.aspx</pingback:target>
      <dc:creator>
      </dc:creator>
      <wfw:comment>http://www.leeholmes.com/blog/CommentView,guid,2da304f2-6be6-4eca-805a-944bcce93b9a.aspx</wfw:comment>
      <wfw:commentRss>http://www.leeholmes.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=2da304f2-6be6-4eca-805a-944bcce93b9a</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
One thing you might notice if you have an iPhone connecting to an Inbox via the IMAP
protocol is that messages you delete tend to stick around when viewed from other devices
(such as Outlook, Outlook Web Access, etc.)
</p>
        <p>
This is caused by an out-of-date view of mail management, where your Inbox handles
everything. When you delete an item, some IMAP clients (such as the iPhone) mark them
as deleted, but don’t actually remove the item from the server. Some clients hide
these deleted items. Some show them with a line through them. Some ignore the deleted
flag altogether.
</p>
        <p>
Most email clients (including iPhone) move deleted items to their own sub-folder,
so marking items as deleted just ends up being an annoyance:
</p>
        <p>
          <a title="http://discussions.apple.com/thread.jspa?messageID=4934598" href="http://discussions.apple.com/thread.jspa?messageID=4934598">http://discussions.apple.com/thread.jspa?messageID=4934598</a>
          <br />
          <a title="http://blogs.freshlogicstudios.com/Posts/View.aspx?Id=44a01293-3b32-4ee0-b23c-fac99348e1cd" href="http://blogs.freshlogicstudios.com/Posts/View.aspx?Id=44a01293-3b32-4ee0-b23c-fac99348e1cd">http://blogs.freshlogicstudios.com/Posts/View.aspx?Id=44a01293-3b32-4ee0-b23c-fac99348e1cd</a>
          <br />
          <a title="http://www.robichaux.net/blog/2007/07/iphone_vs_windows_mobile_part_3_mail.php" href="http://www.robichaux.net/blog/2007/07/iphone_vs_windows_mobile_part_3_mail.php">http://www.robichaux.net/blog/2007/07/iphone_vs_windows_mobile_part_3_mail.php</a>
        </p>
        <p>
The solution is the IMAP ‘EXPUNGE’ command. It permanently deletes items that have
been marked for deletion (while of course leaving everything in Deleted Items untouched.)
The iPhone has an option to do this once a day, but it doesn’t seem to work very well
(and a day lag feels like an eternity, anyways.)
</p>
        <p>
The folks at freshlogic have a fine application to run the command against your mail
server. We can improve on it in a few ways by writing it in PowerShell. Our version:
</p>
        <ul>
          <li>
Enables support for securely cached credentials</li>
          <li>
Doesn’t require an always-running application</li>
          <li>
Runs in the background</li>
        </ul>
        <p>
To do this, our script imports our saved password, and then uses <a href="http://www.leeholmes.com/blog/ScriptingNetworkTCPConnectionsInPowerShell.aspx">Send-TcpRequest</a> to
simply connect to the server and send the EXPUNGE command. Finally, we use schtasks.exe
to automate it.
</p>
        <blockquote>
          <div style="border-bottom: black 1px solid; border-left: black 1px solid; padding-bottom: 5px; padding-left: 5px; width: 650px; padding-right: 5px; font-family: consolas,lucida console; font-size: 10pt; overflow: auto; border-top: black 1px solid; border-right: black 1px solid; padding-top: 5px">
            <table border="0" cellspacing="0" cellpadding="5">
              <tbody>
                <tr>
                  <td valign="top">
                    <div style="padding-bottom: 5px; padding-left: 5px; padding-right: 5px; font-family: consolas,lucida console; background: #cecece; font-size: 10pt; padding-top: 5px">001 
<br />
002 
<br />
003 
<br />
004 
<br />
005 
<br />
006 
<br />
007 
<br />
008 
<br />
009 
<br />
010 
<br />
011 
<br />
012 
<br />
013 
<br />
014 
<br />
015 
<br />
016 
<br />
017 
<br />
018 
<br />
019 
<br />
020 
<br />
021 
<br />
022 
<br />
023 
<br />
024 
<br />
025 
<br /></div>
                  </td>
                  <td valign="top" nowrap="nowrap">
                    <div style="padding-bottom: 5px; padding-left: 5px; padding-right: 5px; font-family: consolas,lucida console; background: #fcfcfc; font-size: 10pt; padding-top: 5px">
                      <span style="color: #006400">#
1) Get your password into a securestring:</span>
                      <br />
                      <span style="color: #006400"># $ss = Read-Host -AsSecureString</span>
                      <br />
                      <span style="color: #006400"># 2) Export it to disk</span>
                      <br />
                      <span style="color: #006400"># $ss | ConvertFrom-SecureString | </span>
                      <br />
                      <span style="color: #006400"># Out-File (Join-Path (Split-Path $profile) Sync-MailboxDeletedState.ps1.credential)</span>
                      <br />
                      <span style="color: #006400"># 3) Create the scheduled task</span>
                      <br />
                      <span style="color: #006400"># schtasks /Create /TN MailboxUpdater /SC MINUTE /MO
5 /TR </span>
                      <br />
                      <span style="color: #006400"># "powershell -NoProfile -WindowStyle Hidden -File
'c:\path\to\Sync-MailboxDeletedState.ps1'"</span>
                      <br />
                      <br />
                      <span style="color: #ff4500">$username</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">=</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #8b0000">"user@example.com"</span>
                      <br />
                      <span style="color: #ff4500">$server</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">=</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #8b0000">"imap.example.com"</span>
                      <br />
                      <span style="color: #ff4500">$port</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">=</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #800080">993</span>
                      <br />
                      <br />
                      <span style="color: #ff4500">$passwordPath</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">=</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #0000ff">Join-Path</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #000000">(</span>
                      <span style="color: #0000ff">Split-Path</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #ff4500">$profile</span>
                      <span style="color: #000000">)</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #8a2be2">Sync-MailboxDeletedState.ps1.credential</span>
                      <br />
                      <span style="color: #ff4500">$password</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">=</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #0000ff">Get-Content</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #ff4500">$passwordPath</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">|</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #0000ff">ConvertTo-SecureString</span>
                      <br />
                      <br />
                      <span style="color: #ff4500">$cred</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">=</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #0000ff">New-Object</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #8a2be2">System.Management.Automation.PsCredential</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #ff4500">$username</span>
                      <span style="color: #a9a9a9">,</span>
                      <span style="color: #ff4500">$password</span>
                      <br />
                      <br />
                      <span style="color: #ff4500">$nc</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">=</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #ff4500">$cred</span>
                      <span style="color: #a9a9a9">.</span>
                      <span style="color: #000000">GetNetworkCredential</span>
                      <span style="color: #000000">(</span>
                      <span style="color: #000000">)</span>
                      <br />
                      <span style="color: #ff4500">$commands</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">=</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #8b0000">"A1
LOGIN $($nc.UserName + '@' + $nc.Domain) $($nc.Password)"</span>
                      <span style="color: #a9a9a9">,</span>
                      <br />
                      <span style="color: #000000">            </span>
                      <span style="color: #8b0000">'A2
SELECT INBOX'</span>
                      <span style="color: #a9a9a9">,</span>
                      <br />
                      <span style="color: #000000">            </span>
                      <span style="color: #8b0000">'A3
EXPUNGE'</span>
                      <span style="color: #a9a9a9">,</span>
                      <br />
                      <span style="color: #000000">            </span>
                      <span style="color: #8b0000">'A4
LOGOUT'</span>
                      <br />
                      <br />
                      <span style="color: #ff4500">$commands</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">|</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #0000ff">Send-TcpRequest</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #ff4500">$server</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #ff4500">$port</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #000080">-UseSSL</span>
                    </div>
                  </td>
                </tr>
              </tbody>
            </table>
          </div>
        </blockquote>
        <img width="0" height="0" src="http://www.leeholmes.com/blog/aggbug.ashx?id=2da304f2-6be6-4eca-805a-944bcce93b9a" />
      </body>
      <title>Removing Deleted Items Left by the iPhone</title>
      <guid isPermaLink="false">http://www.leeholmes.com/blog/PermaLink,guid,2da304f2-6be6-4eca-805a-944bcce93b9a.aspx</guid>
      <link>http://www.leeholmes.com/blog/RemovingDeletedItemsLeftByTheIPhone.aspx</link>
      <pubDate>Wed, 28 Oct 2009 03:28:01 GMT</pubDate>
      <description>&lt;p&gt;
One thing you might notice if you have an iPhone connecting to an Inbox via the IMAP
protocol is that messages you delete tend to stick around when viewed from other devices
(such as Outlook, Outlook Web Access, etc.)
&lt;/p&gt;
&lt;p&gt;
This is caused by an out-of-date view of mail management, where your Inbox handles
everything. When you delete an item, some IMAP clients (such as the iPhone) mark them
as deleted, but don’t actually remove the item from the server. Some clients hide
these deleted items. Some show them with a line through them. Some ignore the deleted
flag altogether.
&lt;/p&gt;
&lt;p&gt;
Most email clients (including iPhone) move deleted items to their own sub-folder,
so marking items as deleted just ends up being an annoyance:
&lt;/p&gt;
&lt;p&gt;
&lt;a title="http://discussions.apple.com/thread.jspa?messageID=4934598" href="http://discussions.apple.com/thread.jspa?messageID=4934598"&gt;http://discussions.apple.com/thread.jspa?messageID=4934598&lt;/a&gt; 
&lt;br /&gt;
&lt;a title="http://blogs.freshlogicstudios.com/Posts/View.aspx?Id=44a01293-3b32-4ee0-b23c-fac99348e1cd" href="http://blogs.freshlogicstudios.com/Posts/View.aspx?Id=44a01293-3b32-4ee0-b23c-fac99348e1cd"&gt;http://blogs.freshlogicstudios.com/Posts/View.aspx?Id=44a01293-3b32-4ee0-b23c-fac99348e1cd&lt;/a&gt; 
&lt;br /&gt;
&lt;a title="http://www.robichaux.net/blog/2007/07/iphone_vs_windows_mobile_part_3_mail.php" href="http://www.robichaux.net/blog/2007/07/iphone_vs_windows_mobile_part_3_mail.php"&gt;http://www.robichaux.net/blog/2007/07/iphone_vs_windows_mobile_part_3_mail.php&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
The solution is the IMAP ‘EXPUNGE’ command. It permanently deletes items that have
been marked for deletion (while of course leaving everything in Deleted Items untouched.)
The iPhone has an option to do this once a day, but it doesn’t seem to work very well
(and a day lag feels like an eternity, anyways.)
&lt;/p&gt;
&lt;p&gt;
The folks at freshlogic have a fine application to run the command against your mail
server. We can improve on it in a few ways by writing it in PowerShell. Our version:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
Enables support for securely cached credentials&lt;/li&gt;
&lt;li&gt;
Doesn’t require an always-running application&lt;/li&gt;
&lt;li&gt;
Runs in the background&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
To do this, our script imports our saved password, and then uses &lt;a href="http://www.leeholmes.com/blog/ScriptingNetworkTCPConnectionsInPowerShell.aspx"&gt;Send-TcpRequest&lt;/a&gt; to
simply connect to the server and send the EXPUNGE command. Finally, we use schtasks.exe
to automate it.
&lt;/p&gt;
&lt;blockquote&gt; 
&lt;div style="border-bottom: black 1px solid; border-left: black 1px solid; padding-bottom: 5px; padding-left: 5px; width: 650px; padding-right: 5px; font-family: consolas,lucida console; font-size: 10pt; overflow: auto; border-top: black 1px solid; border-right: black 1px solid; padding-top: 5px"&gt;
&lt;table border="0" cellspacing="0" cellpadding="5"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td valign="top"&gt;
&lt;div style="padding-bottom: 5px; padding-left: 5px; padding-right: 5px; font-family: consolas,lucida console; background: #cecece; font-size: 10pt; padding-top: 5px"&gt;001 
&lt;br /&gt;
002 
&lt;br /&gt;
003 
&lt;br /&gt;
004 
&lt;br /&gt;
005 
&lt;br /&gt;
006 
&lt;br /&gt;
007 
&lt;br /&gt;
008 
&lt;br /&gt;
009 
&lt;br /&gt;
010 
&lt;br /&gt;
011 
&lt;br /&gt;
012 
&lt;br /&gt;
013 
&lt;br /&gt;
014 
&lt;br /&gt;
015 
&lt;br /&gt;
016 
&lt;br /&gt;
017 
&lt;br /&gt;
018 
&lt;br /&gt;
019 
&lt;br /&gt;
020 
&lt;br /&gt;
021 
&lt;br /&gt;
022 
&lt;br /&gt;
023 
&lt;br /&gt;
024 
&lt;br /&gt;
025 
&lt;br /&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;td valign="top" nowrap="nowrap"&gt;
&lt;div style="padding-bottom: 5px; padding-left: 5px; padding-right: 5px; font-family: consolas,lucida console; background: #fcfcfc; font-size: 10pt; padding-top: 5px"&gt;&lt;span style="color: #006400"&gt;#
1) Get your password into a securestring:&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #006400"&gt;# $ss = Read-Host -AsSecureString&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #006400"&gt;# 2) Export it to disk&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #006400"&gt;# $ss | ConvertFrom-SecureString | &lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #006400"&gt;# Out-File (Join-Path (Split-Path $profile) Sync-MailboxDeletedState.ps1.credential)&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #006400"&gt;# 3) Create the scheduled task&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #006400"&gt;# schtasks /Create /TN MailboxUpdater /SC MINUTE /MO
5 /TR &lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #006400"&gt;# &amp;quot;powershell -NoProfile -WindowStyle Hidden -File
'c:\path\to\Sync-MailboxDeletedState.ps1'&amp;quot;&lt;/span&gt; 
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: #ff4500"&gt;$username&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #8b0000"&gt;&amp;quot;user@example.com&amp;quot;&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #ff4500"&gt;$server&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #8b0000"&gt;&amp;quot;imap.example.com&amp;quot;&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #ff4500"&gt;$port&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #800080"&gt;993&lt;/span&gt; 
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: #ff4500"&gt;$passwordPath&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;Join-Path&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #0000ff"&gt;Split-Path&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$profile&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #8a2be2"&gt;Sync-MailboxDeletedState.ps1.credential&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #ff4500"&gt;$password&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;Get-Content&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$passwordPath&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;|&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;ConvertTo-SecureString&lt;/span&gt; 
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: #ff4500"&gt;$cred&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;New-Object&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #8a2be2"&gt;System.Management.Automation.PsCredential&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$username&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;,&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$password&lt;/span&gt; 
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: #ff4500"&gt;$nc&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$cred&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;.&lt;/span&gt;&lt;span style="color: #000000"&gt;GetNetworkCredential&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #ff4500"&gt;$commands&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #8b0000"&gt;&amp;quot;A1
LOGIN $($nc.UserName + '@' + $nc.Domain) $($nc.Password)&amp;quot;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;,&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #8b0000"&gt;'A2
SELECT INBOX'&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;,&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #8b0000"&gt;'A3
EXPUNGE'&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;,&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #8b0000"&gt;'A4
LOGOUT'&lt;/span&gt; 
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: #ff4500"&gt;$commands&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;|&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;Send-TcpRequest&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$server&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$port&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000080"&gt;-UseSSL&lt;/span&gt; 
&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;/blockquote&gt;&lt;img width="0" height="0" src="http://www.leeholmes.com/blog/aggbug.ashx?id=2da304f2-6be6-4eca-805a-944bcce93b9a" /&gt;</description>
      <comments>http://www.leeholmes.com/blog/CommentView,guid,2da304f2-6be6-4eca-805a-944bcce93b9a.aspx</comments>
    </item>
    <item>
      <trackback:ping>http://www.leeholmes.com/blog/Trackback.aspx?guid=dc3839e7-56b3-43b8-9a1f-fbf46cbb3ca6</trackback:ping>
      <pingback:server>http://www.leeholmes.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.leeholmes.com/blog/PermaLink,guid,dc3839e7-56b3-43b8-9a1f-fbf46cbb3ca6.aspx</pingback:target>
      <dc:creator>
      </dc:creator>
      <wfw:comment>http://www.leeholmes.com/blog/CommentView,guid,dc3839e7-56b3-43b8-9a1f-fbf46cbb3ca6.aspx</wfw:comment>
      <wfw:commentRss>http://www.leeholmes.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=dc3839e7-56b3-43b8-9a1f-fbf46cbb3ca6</wfw:commentRss>
      <slash:comments>6</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Awhile back, I introduced a script that allows you interact with remote TCP ports
(such as Telnet.) While useful, it worked only interactively. It would be even more
useful if you were able to script a network or TCP connection.
</p>
        <p>
Let me introduce <font face="Courier New">Send-TcpRequest.ps1</font> v2, which allows
exactly that:
</p>
        <p>
First, a simple scripted HTTP session:
</p>
        <blockquote style="margin-right: 0px" dir="ltr">
          <div style="border-bottom: gray 1px solid; border-left: gray 1px solid; overflow: auto; border-top: gray 1px solid; border-right: gray 1px solid" id="htmlcode">
            <div style="font-family: courier new">$http = @" 
<br />
GET / HTTP/<span style="color: maroon">1</span><span style="color: maroon">.1</span><br />
Host:search.msn.com 
<br />
`n`n 
<br />
"@ 
<br /><br />
$http | Send-TcpRequest search.msn.com <span style="color: maroon">80</span></div>
          </div>
        </blockquote>
        <p>
Second, a scripted POP3 session (Parse-TextObject comes from here: <a href="http://www.leeholmes.com/blog/parsetextObjectAWKWithAVengeance.aspx">http://www.leeholmes.com/blog/parsetextObjectAWKWithAVengeance.aspx</a>):
</p>
        <blockquote style="margin-right: 0px" dir="ltr">
          <div style="border-bottom: gray 1px solid; border-left: gray 1px solid; overflow: auto; border-top: gray 1px solid; border-right: gray 1px solid" id="htmlcode">
            <div style="font-family: courier new">
              <span style="color: blue">if</span>(-not (test-path
Variable:\mailCredential)) 
<br />
{ 
<br />
   $mailCredential = Get-Credential 
<br />
} 
<br />
$address = $mailCredential.UserName 
<br />
$password = $mailCredential.GetNetworkCredential().Password 
<br />
$pop3Commands = <span style="color: maroon">"USER $address"</span>,<span style="color: maroon">"PASS
$password"</span>,<span style="color: maroon">"STAT"</span>,<span style="color: maroon">"QUIT"</span><br />
$output = $pop3Commands | Send-TcpRequest mail.leeholmes.com <span style="color: maroon">110</span><br />
$inbox = $output.Split(<span style="color: maroon">"`n"</span>)[<span style="color: maroon">3</span>] 
<br />
$status = $inbox | Parse-TextObject -PropertyName <span style="color: maroon">"Response"</span>,<span style="color: maroon">"Waiting"</span>,<span style="color: maroon">"BytesTotal"</span>,<span style="color: maroon">"Extra"</span><br /><span style="color: maroon">"{0} messages waiting, totaling {1} bytes."</span> -f
$status.Waiting,$status.BytesTotal
</div>
          </div>
        </blockquote>
        <p>
 
</p>
        <p>
Now, here is Send-TcpRequest.ps1
</p>
        <blockquote>
          <div style="border-bottom: black 1px solid; border-left: black 1px solid; padding-bottom: 5px; padding-left: 5px; width: 650px; padding-right: 5px; font-family: consolas,lucida console; font-size: 10pt; overflow: auto; border-top: black 1px solid; border-right: black 1px solid; padding-top: 5px">
            <table border="0" cellspacing="0" cellpadding="5">
              <tbody>
                <tr>
                  <td valign="top">
                    <div style="padding-bottom: 5px; padding-left: 5px; padding-right: 5px; font-family: consolas,lucida console; background: #cecece; font-size: 10pt; padding-top: 5px">001 
<br />
002 
<br />
003 
<br />
004 
<br />
005 
<br />
006 
<br />
007 
<br />
008 
<br />
009 
<br />
010 
<br />
011 
<br />
012 
<br />
013 
<br />
014 
<br />
015 
<br />
016 
<br />
017 
<br />
018 
<br />
019 
<br />
020 
<br />
021 
<br />
022 
<br />
023 
<br />
024 
<br />
025 
<br />
026 
<br />
027 
<br />
028 
<br />
029 
<br />
030 
<br />
031 
<br />
032 
<br />
033 
<br />
034 
<br />
035 
<br />
036 
<br />
037 
<br />
038 
<br />
039 
<br />
040 
<br />
041 
<br />
042 
<br />
043 
<br />
044 
<br />
045 
<br />
046 
<br />
047 
<br />
048 
<br />
049 
<br />
050 
<br />
051 
<br />
052 
<br />
053 
<br />
054 
<br />
055 
<br />
056 
<br />
057 
<br />
058 
<br />
059 
<br />
060 
<br />
061 
<br />
062 
<br />
063 
<br />
064 
<br />
065 
<br />
066 
<br />
067 
<br />
068 
<br />
069 
<br />
070 
<br />
071 
<br />
072 
<br />
073 
<br />
074 
<br />
075 
<br />
076 
<br />
077 
<br />
078 
<br />
079 
<br />
080 
<br />
081 
<br />
082 
<br />
083 
<br />
084 
<br />
085 
<br />
086 
<br />
087 
<br />
088 
<br />
089 
<br />
090 
<br />
091 
<br />
092 
<br />
093 
<br />
094 
<br />
095 
<br />
096 
<br />
097 
<br />
098 
<br />
099 
<br />
100 
<br />
101 
<br />
102 
<br />
103 
<br />
104 
<br />
105 
<br />
106 
<br />
107 
<br />
108 
<br />
109 
<br />
110 
<br />
111 
<br />
112 
<br />
113 
<br />
114 
<br />
115 
<br />
116 
<br />
117 
<br />
118 
<br />
119 
<br />
120 
<br />
121 
<br />
122 
<br />
123 
<br />
124 
<br />
125 
<br />
126 
<br />
127 
<br />
128 
<br />
129 
<br />
130 
<br />
131 
<br />
132 
<br />
133 
<br />
134 
<br />
135 
<br />
136 
<br />
137 
<br />
138 
<br />
139 
<br />
140 
<br />
141 
<br />
142 
<br />
143 
<br />
144 
<br />
145 
<br />
146 
<br />
147 
<br />
148 
<br />
149 
<br />
150 
<br />
151 
<br />
152 
<br />
153 
<br />
154 
<br />
155 
<br />
156 
<br />
157 
<br />
158 
<br />
159 
<br /></div>
                  </td>
                  <td valign="top" nowrap="nowrap">
                    <div style="padding-bottom: 5px; padding-left: 5px; padding-right: 5px; font-family: consolas,lucida console; background: #fcfcfc; font-size: 10pt; padding-top: 5px">
                      <span style="color: #006400">##############################################################################</span>
                      <br />
                      <span style="color: #006400">## Send-TcpRequest.ps1</span>
                      <br />
                      <span style="color: #006400">##</span>
                      <br />
                      <span style="color: #006400">## From Windows PowerShell Cookbook (O'Reilly)</span>
                      <br />
                      <span style="color: #006400">## by Lee Holmes (http://www.leeholmes.com/guide)</span>
                      <br />
                      <span style="color: #006400">##</span>
                      <br />
                      <span style="color: #006400">## Send a TCP request to a remote computer, and return
the response.</span>
                      <br />
                      <span style="color: #006400">## If you do not supply input to this script (via either
the pipeline, or the</span>
                      <br />
                      <span style="color: #006400">## -InputObject parameter,) the script operates in interactive
mode.</span>
                      <br />
                      <span style="color: #006400">##</span>
                      <br />
                      <span style="color: #006400">## Example:</span>
                      <br />
                      <span style="color: #006400">##</span>
                      <br />
                      <span style="color: #006400">## $http = @"</span>
                      <br />
                      <span style="color: #006400">## GET / HTTP/1.1</span>
                      <br />
                      <span style="color: #006400">## Host:search.msn.com</span>
                      <br />
                      <span style="color: #006400">## `n`n</span>
                      <br />
                      <span style="color: #006400">## "@</span>
                      <br />
                      <span style="color: #006400">## </span>
                      <br />
                      <span style="color: #006400">## $http | Send-TcpRequest search.msn.com 80</span>
                      <br />
                      <span style="color: #006400">##############################################################################</span>
                      <br />
                      <span style="color: #00008b">param</span>
                      <span style="color: #000000">(</span>
                      <br />
                      <span style="color: #000000">        </span>
                      <span style="color: #008080">[string]</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #ff4500">$remoteHost</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">=</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #8b0000">"localhost"</span>
                      <span style="color: #a9a9a9">,</span>
                      <br />
                      <span style="color: #000000">        </span>
                      <span style="color: #008080">[int]</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #ff4500">$port</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">=</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #800080">80</span>
                      <span style="color: #a9a9a9">,</span>
                      <br />
                      <span style="color: #000000">        </span>
                      <span style="color: #008080">[switch]</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #ff4500">$UseSSL</span>
                      <span style="color: #a9a9a9">,</span>
                      <br />
                      <span style="color: #000000">        </span>
                      <span style="color: #008080">[string]</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #ff4500">$inputObject</span>
                      <span style="color: #a9a9a9">,</span>
                      <br />
                      <span style="color: #000000">        </span>
                      <span style="color: #008080">[int]</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #ff4500">$commandDelay</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">=</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #800080">100</span>
                      <br />
                      <span style="color: #000000">     </span>
                      <span style="color: #000000">)</span>
                      <br />
                      <br />
                      <span style="color: #008080">[string]</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #ff4500">$output</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">=</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #8b0000">""</span>
                      <br />
                      <br />
                      <span style="color: #006400">## Store the input into an array that we can scan over.
If there was no input,</span>
                      <br />
                      <span style="color: #006400">## then we will be in interactive mode.</span>
                      <br />
                      <span style="color: #ff4500">$currentInput</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">=</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #ff4500">$inputObject</span>
                      <br />
                      <span style="color: #00008b">if</span>
                      <span style="color: #000000">(</span>
                      <span style="color: #a9a9a9">-not</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #ff4500">$currentInput</span>
                      <span style="color: #000000">)</span>
                      <br />
                      <span style="color: #000000">{</span>
                      <br />
                      <span style="color: #000000">    </span>
                      <span style="color: #ff4500">$SCRIPT:currentInput</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">=</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #000000">@(</span>
                      <span style="color: #ff4500">$input</span>
                      <span style="color: #000000">)</span>
                      <br />
                      <span style="color: #000000">}</span>
                      <br />
                      <span style="color: #ff4500">$scriptedMode</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">=</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #008080">[bool]</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #ff4500">$currentInput</span>
                      <br />
                      <br />
                      <span style="color: #00008b">function</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #8a2be2">Main</span>
                      <br />
                      <span style="color: #000000">{</span>
                      <br />
                      <span style="color: #000000">    </span>
                      <span style="color: #006400">##
Open the socket, and connect to the computer on the specified port</span>
                      <br />
                      <span style="color: #000000">    </span>
                      <span style="color: #00008b">if</span>
                      <span style="color: #000000">(</span>
                      <span style="color: #a9a9a9">-not</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #ff4500">$scriptedMode</span>
                      <span style="color: #000000">)</span>
                      <br />
                      <span style="color: #000000">    </span>
                      <span style="color: #000000">{</span>
                      <br />
                      <span style="color: #000000">        </span>
                      <span style="color: #0000ff">write-host</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #8b0000">"Connecting
to $remoteHost on port $port"</span>
                      <br />
                      <span style="color: #000000">    </span>
                      <span style="color: #000000">}</span>
                      <br />
                      <br />
                      <span style="color: #000000">    </span>
                      <span style="color: #00008b">trap</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #000000">{</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #0000ff">Write-Error</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #8b0000">"Could
not connect to remote computer: $_"</span>
                      <span style="color: #000000">;</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #00008b">exit</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #000000">}</span>
                      <br />
                      <span style="color: #000000">    </span>
                      <span style="color: #ff4500">$socket</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">=</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #0000ff">new-object</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #8a2be2">System.Net.Sockets.TcpClient</span>
                      <span style="color: #000000">(</span>
                      <span style="color: #ff4500">$remoteHost</span>
                      <span style="color: #a9a9a9">,</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #ff4500">$port</span>
                      <span style="color: #000000">)</span>
                      <br />
                      <br />
                      <span style="color: #000000">    </span>
                      <span style="color: #00008b">if</span>
                      <span style="color: #000000">(</span>
                      <span style="color: #a9a9a9">-not</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #ff4500">$scriptedMode</span>
                      <span style="color: #000000">)</span>
                      <br />
                      <span style="color: #000000">    </span>
                      <span style="color: #000000">{</span>
                      <br />
                      <span style="color: #000000">        </span>
                      <span style="color: #0000ff">write-host</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #8b0000">"Connected.
Press ^D followed by [ENTER] to exit.`n"</span>
                      <br />
                      <span style="color: #000000">    </span>
                      <span style="color: #000000">}</span>
                      <br />
                      <br />
                      <span style="color: #000000">    </span>
                      <span style="color: #ff4500">$stream</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">=</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #ff4500">$socket</span>
                      <span style="color: #a9a9a9">.</span>
                      <span style="color: #000000">GetStream</span>
                      <span style="color: #000000">(</span>
                      <span style="color: #000000">)</span>
                      <br />
                      <span style="color: #000000">    </span>
                      <br />
                      <span style="color: #000000">    </span>
                      <span style="color: #00008b">if</span>
                      <span style="color: #000000">(</span>
                      <span style="color: #ff4500">$UseSSL</span>
                      <span style="color: #000000">)</span>
                      <br />
                      <span style="color: #000000">    </span>
                      <span style="color: #000000">{</span>
                      <br />
                      <span style="color: #000000">        </span>
                      <span style="color: #ff4500">$sslStream</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">=</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #0000ff">New-Object</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #8a2be2">System.Net.Security.SslStream</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #ff4500">$stream</span>
                      <span style="color: #a9a9a9">,</span>
                      <span style="color: #ff4500">$false</span>
                      <br />
                      <span style="color: #000000">        </span>
                      <span style="color: #ff4500">$sslStream</span>
                      <span style="color: #a9a9a9">.</span>
                      <span style="color: #000000">AuthenticateAsClient</span>
                      <span style="color: #000000">(</span>
                      <span style="color: #ff4500">$remoteHost</span>
                      <span style="color: #000000">)</span>
                      <br />
                      <span style="color: #000000">        </span>
                      <span style="color: #ff4500">$stream</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">=</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #ff4500">$sslStream</span>
                      <br />
                      <span style="color: #000000">    </span>
                      <span style="color: #000000">}</span>
                      <br />
                      <br />
                      <span style="color: #000000">    </span>
                      <span style="color: #ff4500">$writer</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">=</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #0000ff">new-object</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #8a2be2">System.IO.StreamWriter</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #ff4500">$stream</span>
                      <br />
                      <br />
                      <span style="color: #000000">    </span>
                      <span style="color: #00008b">while</span>
                      <span style="color: #000000">(</span>
                      <span style="color: #ff4500">$true</span>
                      <span style="color: #000000">)</span>
                      <br />
                      <span style="color: #000000">    </span>
                      <span style="color: #000000">{</span>
                      <br />
                      <span style="color: #000000">        </span>
                      <span style="color: #006400">##
Receive the output that has buffered so far</span>
                      <br />
                      <span style="color: #000000">        </span>
                      <span style="color: #ff4500">$SCRIPT:output</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">+=</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #0000ff">GetOutput</span>
                      <br />
                      <br />
                      <span style="color: #000000">        </span>
                      <span style="color: #006400">##
If we're in scripted mode, send the commands,</span>
                      <br />
                      <span style="color: #000000">        </span>
                      <span style="color: #006400">##
receive the output, and exit.</span>
                      <br />
                      <span style="color: #000000">        </span>
                      <span style="color: #00008b">if</span>
                      <span style="color: #000000">(</span>
                      <span style="color: #ff4500">$scriptedMode</span>
                      <span style="color: #000000">)</span>
                      <br />
                      <span style="color: #000000">        </span>
                      <span style="color: #000000">{</span>
                      <br />
                      <span style="color: #000000">            </span>
                      <span style="color: #00008b">foreach</span>
                      <span style="color: #000000">(</span>
                      <span style="color: #ff4500">$line</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #00008b">in</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #ff4500">$currentInput</span>
                      <span style="color: #000000">)</span>
                      <br />
                      <span style="color: #000000">            </span>
                      <span style="color: #000000">{</span>
                      <br />
                      <span style="color: #000000">                </span>
                      <span style="color: #ff4500">$writer</span>
                      <span style="color: #a9a9a9">.</span>
                      <span style="color: #000000">WriteLine</span>
                      <span style="color: #000000">(</span>
                      <span style="color: #ff4500">$line</span>
                      <span style="color: #000000">)</span>
                      <br />
                      <span style="color: #000000">                </span>
                      <span style="color: #ff4500">$writer</span>
                      <span style="color: #a9a9a9">.</span>
                      <span style="color: #000000">Flush</span>
                      <span style="color: #000000">(</span>
                      <span style="color: #000000">)</span>
                      <br />
                      <span style="color: #000000">                </span>
                      <span style="color: #0000ff">Start-Sleep</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #000080">-m</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #ff4500">$commandDelay</span>
                      <br />
                      <span style="color: #000000">                </span>
                      <span style="color: #ff4500">$SCRIPT:output</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">+=</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #0000ff">GetOutput</span>
                      <br />
                      <span style="color: #000000">            </span>
                      <span style="color: #000000">}</span>
                      <br />
                      <br />
                      <span style="color: #000000">            </span>
                      <span style="color: #00008b">break</span>
                      <br />
                      <span style="color: #000000">        </span>
                      <span style="color: #000000">}</span>
                      <br />
                      <span style="color: #000000">        </span>
                      <span style="color: #006400">##
If we're in interactive mode, write the buffered</span>
                      <br />
                      <span style="color: #000000">        </span>
                      <span style="color: #006400">##
output, and respond to input.</span>
                      <br />
                      <span style="color: #000000">        </span>
                      <span style="color: #00008b">else</span>
                      <br />
                      <span style="color: #000000">        </span>
                      <span style="color: #000000">{</span>
                      <br />
                      <span style="color: #000000">            </span>
                      <span style="color: #00008b">if</span>
                      <span style="color: #000000">(</span>
                      <span style="color: #ff4500">$output</span>
                      <span style="color: #000000">)</span>
                      <span style="color: #000000"> </span>
                      <br />
                      <span style="color: #000000">            </span>
                      <span style="color: #000000">{</span>
                      <br />
                      <span style="color: #000000">                </span>
                      <span style="color: #00008b">foreach</span>
                      <span style="color: #000000">(</span>
                      <span style="color: #ff4500">$line</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #00008b">in</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #ff4500">$output</span>
                      <span style="color: #a9a9a9">.</span>
                      <span style="color: #000000">Split</span>
                      <span style="color: #000000">(</span>
                      <span style="color: #8b0000">"`n"</span>
                      <span style="color: #000000">)</span>
                      <span style="color: #000000">)</span>
                      <br />
                      <span style="color: #000000">                </span>
                      <span style="color: #000000">{</span>
                      <br />
                      <span style="color: #000000">                    </span>
                      <span style="color: #0000ff">write-host</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #ff4500">$line</span>
                      <br />
                      <span style="color: #000000">                </span>
                      <span style="color: #000000">}</span>
                      <br />
                      <span style="color: #000000">                </span>
                      <span style="color: #ff4500">$SCRIPT:output</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">=</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #8b0000">""</span>
                      <br />
                      <span style="color: #000000">            </span>
                      <span style="color: #000000">}</span>
                      <br />
                      <br />
                      <span style="color: #000000">            </span>
                      <span style="color: #006400">##
Read the user's command, quitting if they hit ^D</span>
                      <br />
                      <span style="color: #000000">            </span>
                      <span style="color: #ff4500">$command</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">=</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #0000ff">read-host</span>
                      <br />
                      <span style="color: #000000">            </span>
                      <span style="color: #00008b">if</span>
                      <span style="color: #000000">(</span>
                      <span style="color: #ff4500">$command</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">-eq</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #000000">(</span>
                      <span style="color: #008080">[char]</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #800080">4</span>
                      <span style="color: #000000">)</span>
                      <span style="color: #000000">)</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #000000">{</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #00008b">break</span>
                      <span style="color: #000000">;</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #000000">}</span>
                      <br />
                      <br />
                      <span style="color: #000000">            </span>
                      <span style="color: #006400">##
Otherwise, Write their command to the remote host </span>
                      <br />
                      <span style="color: #000000">            </span>
                      <span style="color: #ff4500">$writer</span>
                      <span style="color: #a9a9a9">.</span>
                      <span style="color: #000000">WriteLine</span>
                      <span style="color: #000000">(</span>
                      <span style="color: #ff4500">$command</span>
                      <span style="color: #000000">)</span>
                      <br />
                      <span style="color: #000000">            </span>
                      <span style="color: #ff4500">$writer</span>
                      <span style="color: #a9a9a9">.</span>
                      <span style="color: #000000">Flush</span>
                      <span style="color: #000000">(</span>
                      <span style="color: #000000">)</span>
                      <br />
                      <span style="color: #000000">        </span>
                      <span style="color: #000000">}</span>
                      <br />
                      <span style="color: #000000">    </span>
                      <span style="color: #000000">}</span>
                      <br />
                      <br />
                      <span style="color: #000000">    </span>
                      <span style="color: #006400">##
Close the streams</span>
                      <br />
                      <span style="color: #000000">    </span>
                      <span style="color: #ff4500">$writer</span>
                      <span style="color: #a9a9a9">.</span>
                      <span style="color: #000000">Close</span>
                      <span style="color: #000000">(</span>
                      <span style="color: #000000">)</span>
                      <br />
                      <span style="color: #000000">    </span>
                      <span style="color: #ff4500">$stream</span>
                      <span style="color: #a9a9a9">.</span>
                      <span style="color: #000000">Close</span>
                      <span style="color: #000000">(</span>
                      <span style="color: #000000">)</span>
                      <br />
                      <br />
                      <span style="color: #000000">    </span>
                      <span style="color: #006400">##
If we're in scripted mode, return the output</span>
                      <br />
                      <span style="color: #000000">    </span>
                      <span style="color: #00008b">if</span>
                      <span style="color: #000000">(</span>
                      <span style="color: #ff4500">$scriptedMode</span>
                      <span style="color: #000000">)</span>
                      <br />
                      <span style="color: #000000">    </span>
                      <span style="color: #000000">{</span>
                      <br />
                      <span style="color: #000000">        </span>
                      <span style="color: #ff4500">$output</span>
                      <br />
                      <span style="color: #000000">    </span>
                      <span style="color: #000000">}</span>
                      <br />
                      <span style="color: #000000">}</span>
                      <br />
                      <br />
                      <span style="color: #006400">## Read output from a remote host</span>
                      <br />
                      <span style="color: #00008b">function</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #8a2be2">GetOutput</span>
                      <br />
                      <span style="color: #000000">{</span>
                      <br />
                      <span style="color: #000000">    </span>
                      <span style="color: #006400">##
Create a buffer to receive the response</span>
                      <br />
                      <span style="color: #000000">    </span>
                      <span style="color: #ff4500">$buffer</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">=</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #0000ff">new-object</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #8a2be2">System.Byte[]</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #800080">1024</span>
                      <br />
                      <span style="color: #000000">    </span>
                      <span style="color: #ff4500">$encoding</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">=</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #0000ff">new-object</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #8a2be2">System.Text.AsciiEncoding</span>
                      <br />
                      <br />
                      <span style="color: #000000">    </span>
                      <span style="color: #ff4500">$outputBuffer</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">=</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #8b0000">""</span>
                      <br />
                      <span style="color: #000000">    </span>
                      <span style="color: #ff4500">$foundMore</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">=</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #ff4500">$false</span>
                      <br />
                      <br />
                      <span style="color: #000000">    </span>
                      <span style="color: #006400">##
Read all the data available from the stream, writing it to the</span>
                      <br />
                      <span style="color: #000000">    </span>
                      <span style="color: #006400">##
output buffer when done.</span>
                      <br />
                      <span style="color: #000000">    </span>
                      <span style="color: #00008b">do</span>
                      <br />
                      <span style="color: #000000">    </span>
                      <span style="color: #000000">{</span>
                      <br />
                      <span style="color: #000000">        </span>
                      <span style="color: #006400">##
Allow data to buffer for a bit</span>
                      <br />
                      <span style="color: #000000">        </span>
                      <span style="color: #0000ff">start-sleep</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #000080">-m</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #800080">1000</span>
                      <br />
                      <br />
                      <span style="color: #000000">        </span>
                      <span style="color: #006400">##
Read what data is available</span>
                      <br />
                      <span style="color: #000000">        </span>
                      <span style="color: #ff4500">$foundmore</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">=</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #ff4500">$false</span>
                      <br />
                      <span style="color: #000000">        </span>
                      <span style="color: #ff4500">$stream</span>
                      <span style="color: #a9a9a9">.</span>
                      <span style="color: #000000">ReadTimeout</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">=</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #800080">1000</span>
                      <br />
                      <br />
                      <span style="color: #000000">        </span>
                      <span style="color: #00008b">do</span>
                      <br />
                      <span style="color: #000000">        </span>
                      <span style="color: #000000">{</span>
                      <br />
                      <span style="color: #000000">            </span>
                      <span style="color: #00008b">try</span>
                      <br />
                      <span style="color: #000000">            </span>
                      <span style="color: #000000">{</span>
                      <br />
                      <span style="color: #000000">                </span>
                      <span style="color: #ff4500">$read</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">=</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #ff4500">$stream</span>
                      <span style="color: #a9a9a9">.</span>
                      <span style="color: #000000">Read</span>
                      <span style="color: #000000">(</span>
                      <span style="color: #ff4500">$buffer</span>
                      <span style="color: #a9a9a9">,</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #800080">0</span>
                      <span style="color: #a9a9a9">,</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #800080">1024</span>
                      <span style="color: #000000">)</span>
                      <br />
                      <br />
                      <span style="color: #000000">                </span>
                      <span style="color: #00008b">if</span>
                      <span style="color: #000000">(</span>
                      <span style="color: #ff4500">$read</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">-gt</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #800080">0</span>
                      <span style="color: #000000">)</span>
                      <br />
                      <span style="color: #000000">                </span>
                      <span style="color: #000000">{</span>
                      <br />
                      <span style="color: #000000">                    </span>
                      <span style="color: #ff4500">$foundmore</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">=</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #ff4500">$true</span>
                      <br />
                      <span style="color: #000000">                    </span>
                      <span style="color: #ff4500">$outputBuffer</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">+=</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #000000">(</span>
                      <span style="color: #ff4500">$encoding</span>
                      <span style="color: #a9a9a9">.</span>
                      <span style="color: #000000">GetString</span>
                      <span style="color: #000000">(</span>
                      <span style="color: #ff4500">$buffer</span>
                      <span style="color: #a9a9a9">,</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #800080">0</span>
                      <span style="color: #a9a9a9">,</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #ff4500">$read</span>
                      <span style="color: #000000">)</span>
                      <span style="color: #000000">)</span>
                      <br />
                      <span style="color: #000000">                </span>
                      <span style="color: #000000">}</span>
                      <br />
                      <span style="color: #000000">            </span>
                      <span style="color: #000000">}</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #00008b">catch</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #000000">{</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #ff4500">$foundMore</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">=</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #ff4500">$false</span>
                      <span style="color: #000000">;</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #ff4500">$read</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">=</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #800080">0</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #000000">}</span>
                      <br />
                      <span style="color: #000000">        </span>
                      <span style="color: #000000">}</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #00008b">while</span>
                      <span style="color: #000000">(</span>
                      <span style="color: #ff4500">$read</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">-gt</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #800080">0</span>
                      <span style="color: #000000">)</span>
                      <br />
                      <span style="color: #000000">    </span>
                      <span style="color: #000000">}</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #00008b">while</span>
                      <span style="color: #000000">(</span>
                      <span style="color: #ff4500">$foundmore</span>
                      <span style="color: #000000">)</span>
                      <br />
                      <br />
                      <span style="color: #000000">    </span>
                      <span style="color: #ff4500">$outputBuffer</span>
                      <br />
                      <span style="color: #000000">}</span>
                      <br />
                      <br />
                      <span style="color: #a9a9a9">.</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #0000ff">Main</span>
                    </div>
                  </td>
                </tr>
              </tbody>
            </table>
          </div>
        </blockquote>
        <p>
[Edit: Thanks to Marco for pointing out a few issues that come up when you try to
retrieve massive amounts of data (such as a newsgroup listing). I've updated the script
to fix those.] 
<br />
[Edit2: Updated to call it Send-TcpRequest, and support SSL]
</p>
        <img width="0" height="0" src="http://www.leeholmes.com/blog/aggbug.ashx?id=dc3839e7-56b3-43b8-9a1f-fbf46cbb3ca6" />
      </body>
      <title>Scripting Network / TCP Connections in PowerShell</title>
      <guid isPermaLink="false">http://www.leeholmes.com/blog/PermaLink,guid,dc3839e7-56b3-43b8-9a1f-fbf46cbb3ca6.aspx</guid>
      <link>http://www.leeholmes.com/blog/ScriptingNetworkTCPConnectionsInPowerShell.aspx</link>
      <pubDate>Wed, 28 Oct 2009 02:51:58 GMT</pubDate>
      <description>&lt;p&gt;
Awhile back, I introduced a script that allows you interact with remote TCP ports
(such as Telnet.) While useful, it worked only interactively. It would be even more
useful if you were able to script a network or TCP connection.
&lt;/p&gt;
&lt;p&gt;
Let me introduce &lt;font face="Courier New"&gt;Send-TcpRequest.ps1&lt;/font&gt; v2, which allows
exactly that:
&lt;/p&gt;
&lt;p&gt;
First, a simple scripted HTTP session:
&lt;/p&gt;
&lt;blockquote style="margin-right: 0px" dir="ltr"&gt; 
&lt;div style="border-bottom: gray 1px solid; border-left: gray 1px solid; overflow: auto; border-top: gray 1px solid; border-right: gray 1px solid" id="htmlcode"&gt;
&lt;div style="font-family: courier new"&gt;$http = @&amp;quot; 
&lt;br /&gt;
GET / HTTP/&lt;span style="color: maroon"&gt;1&lt;/span&gt;&lt;span style="color: maroon"&gt;.1&lt;/span&gt; 
&lt;br /&gt;
Host:search.msn.com 
&lt;br /&gt;
`n`n 
&lt;br /&gt;
&amp;quot;@ 
&lt;br /&gt;
&lt;br /&gt;
$http | Send-TcpRequest search.msn.com &lt;span style="color: maroon"&gt;80&lt;/span&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
Second, a scripted POP3 session (Parse-TextObject comes from here: &lt;a href="http://www.leeholmes.com/blog/parsetextObjectAWKWithAVengeance.aspx"&gt;http://www.leeholmes.com/blog/parsetextObjectAWKWithAVengeance.aspx&lt;/a&gt;):
&lt;/p&gt;
&lt;blockquote style="margin-right: 0px" dir="ltr"&gt; 
&lt;div style="border-bottom: gray 1px solid; border-left: gray 1px solid; overflow: auto; border-top: gray 1px solid; border-right: gray 1px solid" id="htmlcode"&gt;
&lt;div style="font-family: courier new"&gt;&lt;span style="color: blue"&gt;if&lt;/span&gt;(-not (test-path
Variable:\mailCredential)) 
&lt;br /&gt;
{ 
&lt;br /&gt;
&amp;#160;&amp;#160; $mailCredential = Get-Credential 
&lt;br /&gt;
} 
&lt;br /&gt;
$address = $mailCredential.UserName 
&lt;br /&gt;
$password = $mailCredential.GetNetworkCredential().Password 
&lt;br /&gt;
$pop3Commands = &lt;span style="color: maroon"&gt;&amp;quot;USER $address&amp;quot;&lt;/span&gt;,&lt;span style="color: maroon"&gt;&amp;quot;PASS
$password&amp;quot;&lt;/span&gt;,&lt;span style="color: maroon"&gt;&amp;quot;STAT&amp;quot;&lt;/span&gt;,&lt;span style="color: maroon"&gt;&amp;quot;QUIT&amp;quot;&lt;/span&gt; 
&lt;br /&gt;
$output = $pop3Commands | Send-TcpRequest mail.leeholmes.com &lt;span style="color: maroon"&gt;110&lt;/span&gt; 
&lt;br /&gt;
$inbox = $output.Split(&lt;span style="color: maroon"&gt;&amp;quot;`n&amp;quot;&lt;/span&gt;)[&lt;span style="color: maroon"&gt;3&lt;/span&gt;] 
&lt;br /&gt;
$status = $inbox | Parse-TextObject -PropertyName &lt;span style="color: maroon"&gt;&amp;quot;Response&amp;quot;&lt;/span&gt;,&lt;span style="color: maroon"&gt;&amp;quot;Waiting&amp;quot;&lt;/span&gt;,&lt;span style="color: maroon"&gt;&amp;quot;BytesTotal&amp;quot;&lt;/span&gt;,&lt;span style="color: maroon"&gt;&amp;quot;Extra&amp;quot;&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: maroon"&gt;&amp;quot;{0} messages waiting, totaling {1} bytes.&amp;quot;&lt;/span&gt; -f
$status.Waiting,$status.BytesTotal
&lt;/div&gt;
&lt;/div&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
&amp;#160;
&lt;/p&gt;
&lt;p&gt;
Now, here is Send-TcpRequest.ps1
&lt;/p&gt;
&lt;blockquote&gt; 
&lt;div style="border-bottom: black 1px solid; border-left: black 1px solid; padding-bottom: 5px; padding-left: 5px; width: 650px; padding-right: 5px; font-family: consolas,lucida console; font-size: 10pt; overflow: auto; border-top: black 1px solid; border-right: black 1px solid; padding-top: 5px"&gt;
&lt;table border="0" cellspacing="0" cellpadding="5"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td valign="top"&gt;
&lt;div style="padding-bottom: 5px; padding-left: 5px; padding-right: 5px; font-family: consolas,lucida console; background: #cecece; font-size: 10pt; padding-top: 5px"&gt;001 
&lt;br /&gt;
002 
&lt;br /&gt;
003 
&lt;br /&gt;
004 
&lt;br /&gt;
005 
&lt;br /&gt;
006 
&lt;br /&gt;
007 
&lt;br /&gt;
008 
&lt;br /&gt;
009 
&lt;br /&gt;
010 
&lt;br /&gt;
011 
&lt;br /&gt;
012 
&lt;br /&gt;
013 
&lt;br /&gt;
014 
&lt;br /&gt;
015 
&lt;br /&gt;
016 
&lt;br /&gt;
017 
&lt;br /&gt;
018 
&lt;br /&gt;
019 
&lt;br /&gt;
020 
&lt;br /&gt;
021 
&lt;br /&gt;
022 
&lt;br /&gt;
023 
&lt;br /&gt;
024 
&lt;br /&gt;
025 
&lt;br /&gt;
026 
&lt;br /&gt;
027 
&lt;br /&gt;
028 
&lt;br /&gt;
029 
&lt;br /&gt;
030 
&lt;br /&gt;
031 
&lt;br /&gt;
032 
&lt;br /&gt;
033 
&lt;br /&gt;
034 
&lt;br /&gt;
035 
&lt;br /&gt;
036 
&lt;br /&gt;
037 
&lt;br /&gt;
038 
&lt;br /&gt;
039 
&lt;br /&gt;
040 
&lt;br /&gt;
041 
&lt;br /&gt;
042 
&lt;br /&gt;
043 
&lt;br /&gt;
044 
&lt;br /&gt;
045 
&lt;br /&gt;
046 
&lt;br /&gt;
047 
&lt;br /&gt;
048 
&lt;br /&gt;
049 
&lt;br /&gt;
050 
&lt;br /&gt;
051 
&lt;br /&gt;
052 
&lt;br /&gt;
053 
&lt;br /&gt;
054 
&lt;br /&gt;
055 
&lt;br /&gt;
056 
&lt;br /&gt;
057 
&lt;br /&gt;
058 
&lt;br /&gt;
059 
&lt;br /&gt;
060 
&lt;br /&gt;
061 
&lt;br /&gt;
062 
&lt;br /&gt;
063 
&lt;br /&gt;
064 
&lt;br /&gt;
065 
&lt;br /&gt;
066 
&lt;br /&gt;
067 
&lt;br /&gt;
068 
&lt;br /&gt;
069 
&lt;br /&gt;
070 
&lt;br /&gt;
071 
&lt;br /&gt;
072 
&lt;br /&gt;
073 
&lt;br /&gt;
074 
&lt;br /&gt;
075 
&lt;br /&gt;
076 
&lt;br /&gt;
077 
&lt;br /&gt;
078 
&lt;br /&gt;
079 
&lt;br /&gt;
080 
&lt;br /&gt;
081 
&lt;br /&gt;
082 
&lt;br /&gt;
083 
&lt;br /&gt;
084 
&lt;br /&gt;
085 
&lt;br /&gt;
086 
&lt;br /&gt;
087 
&lt;br /&gt;
088 
&lt;br /&gt;
089 
&lt;br /&gt;
090 
&lt;br /&gt;
091 
&lt;br /&gt;
092 
&lt;br /&gt;
093 
&lt;br /&gt;
094 
&lt;br /&gt;
095 
&lt;br /&gt;
096 
&lt;br /&gt;
097 
&lt;br /&gt;
098 
&lt;br /&gt;
099 
&lt;br /&gt;
100 
&lt;br /&gt;
101 
&lt;br /&gt;
102 
&lt;br /&gt;
103 
&lt;br /&gt;
104 
&lt;br /&gt;
105 
&lt;br /&gt;
106 
&lt;br /&gt;
107 
&lt;br /&gt;
108 
&lt;br /&gt;
109 
&lt;br /&gt;
110 
&lt;br /&gt;
111 
&lt;br /&gt;
112 
&lt;br /&gt;
113 
&lt;br /&gt;
114 
&lt;br /&gt;
115 
&lt;br /&gt;
116 
&lt;br /&gt;
117 
&lt;br /&gt;
118 
&lt;br /&gt;
119 
&lt;br /&gt;
120 
&lt;br /&gt;
121 
&lt;br /&gt;
122 
&lt;br /&gt;
123 
&lt;br /&gt;
124 
&lt;br /&gt;
125 
&lt;br /&gt;
126 
&lt;br /&gt;
127 
&lt;br /&gt;
128 
&lt;br /&gt;
129 
&lt;br /&gt;
130 
&lt;br /&gt;
131 
&lt;br /&gt;
132 
&lt;br /&gt;
133 
&lt;br /&gt;
134 
&lt;br /&gt;
135 
&lt;br /&gt;
136 
&lt;br /&gt;
137 
&lt;br /&gt;
138 
&lt;br /&gt;
139 
&lt;br /&gt;
140 
&lt;br /&gt;
141 
&lt;br /&gt;
142 
&lt;br /&gt;
143 
&lt;br /&gt;
144 
&lt;br /&gt;
145 
&lt;br /&gt;
146 
&lt;br /&gt;
147 
&lt;br /&gt;
148 
&lt;br /&gt;
149 
&lt;br /&gt;
150 
&lt;br /&gt;
151 
&lt;br /&gt;
152 
&lt;br /&gt;
153 
&lt;br /&gt;
154 
&lt;br /&gt;
155 
&lt;br /&gt;
156 
&lt;br /&gt;
157 
&lt;br /&gt;
158 
&lt;br /&gt;
159 
&lt;br /&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;td valign="top" nowrap="nowrap"&gt;
&lt;div style="padding-bottom: 5px; padding-left: 5px; padding-right: 5px; font-family: consolas,lucida console; background: #fcfcfc; font-size: 10pt; padding-top: 5px"&gt;&lt;span style="color: #006400"&gt;##############################################################################&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #006400"&gt;## Send-TcpRequest.ps1&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #006400"&gt;##&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #006400"&gt;## From Windows PowerShell Cookbook (O'Reilly)&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #006400"&gt;## by Lee Holmes (http://www.leeholmes.com/guide)&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #006400"&gt;##&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #006400"&gt;## Send a TCP request to a remote computer, and return
the response.&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #006400"&gt;## If you do not supply input to this script (via either
the pipeline, or the&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #006400"&gt;## -InputObject parameter,) the script operates in interactive
mode.&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #006400"&gt;##&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #006400"&gt;## Example:&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #006400"&gt;##&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #006400"&gt;## $http = @&amp;quot;&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #006400"&gt;## GET / HTTP/1.1&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #006400"&gt;## Host:search.msn.com&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #006400"&gt;## `n`n&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #006400"&gt;## &amp;quot;@&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #006400"&gt;## &lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #006400"&gt;## $http | Send-TcpRequest search.msn.com 80&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #006400"&gt;##############################################################################&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #00008b"&gt;param&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #008080"&gt;[string]&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$remoteHost&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #8b0000"&gt;&amp;quot;localhost&amp;quot;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;,&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #008080"&gt;[int]&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$port&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #800080"&gt;80&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;,&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #008080"&gt;[switch]&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$UseSSL&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;,&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #008080"&gt;[string]&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$inputObject&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;,&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #008080"&gt;[int]&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$commandDelay&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #800080"&gt;100&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;/span&gt; 
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: #008080"&gt;[string]&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$output&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #8b0000"&gt;&amp;quot;&amp;quot;&lt;/span&gt; 
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: #006400"&gt;## Store the input into an array that we can scan over.
If there was no input,&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #006400"&gt;## then we will be in interactive mode.&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #ff4500"&gt;$currentInput&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$inputObject&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #00008b"&gt;if&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;-not&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$currentInput&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;{&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #ff4500"&gt;$SCRIPT:currentInput&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;@(&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$input&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;}&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #ff4500"&gt;$scriptedMode&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #008080"&gt;[bool]&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$currentInput&lt;/span&gt; 
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: #00008b"&gt;function&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #8a2be2"&gt;Main&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;{&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #006400"&gt;##
Open the socket, and connect to the computer on the specified port&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #00008b"&gt;if&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;-not&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$scriptedMode&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #000000"&gt;{&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #0000ff"&gt;write-host&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #8b0000"&gt;&amp;quot;Connecting
to $remoteHost on port $port&amp;quot;&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #000000"&gt;}&lt;/span&gt; 
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #00008b"&gt;trap&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;{&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;Write-Error&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #8b0000"&gt;&amp;quot;Could
not connect to remote computer: $_&amp;quot;&lt;/span&gt;&lt;span style="color: #000000"&gt;;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #00008b"&gt;exit&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;}&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #ff4500"&gt;$socket&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;new-object&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #8a2be2"&gt;System.Net.Sockets.TcpClient&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$remoteHost&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;,&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$port&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;/span&gt; 
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #00008b"&gt;if&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;-not&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$scriptedMode&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #000000"&gt;{&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #0000ff"&gt;write-host&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #8b0000"&gt;&amp;quot;Connected.
Press ^D followed by [ENTER] to exit.`n&amp;quot;&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #000000"&gt;}&lt;/span&gt; 
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #ff4500"&gt;$stream&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$socket&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;.&lt;/span&gt;&lt;span style="color: #000000"&gt;GetStream&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #00008b"&gt;if&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$UseSSL&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #000000"&gt;{&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #ff4500"&gt;$sslStream&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;New-Object&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #8a2be2"&gt;System.Net.Security.SslStream&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$stream&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;,&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$false&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #ff4500"&gt;$sslStream&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;.&lt;/span&gt;&lt;span style="color: #000000"&gt;AuthenticateAsClient&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$remoteHost&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #ff4500"&gt;$stream&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$sslStream&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #000000"&gt;}&lt;/span&gt; 
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #ff4500"&gt;$writer&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;new-object&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #8a2be2"&gt;System.IO.StreamWriter&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$stream&lt;/span&gt; 
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #00008b"&gt;while&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$true&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #000000"&gt;{&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #006400"&gt;##
Receive the output that has buffered so far&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #ff4500"&gt;$SCRIPT:output&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;+=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;GetOutput&lt;/span&gt; 
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #006400"&gt;##
If we're in scripted mode, send the commands,&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #006400"&gt;##
receive the output, and exit.&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #00008b"&gt;if&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$scriptedMode&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #000000"&gt;{&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #00008b"&gt;foreach&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$line&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #00008b"&gt;in&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$currentInput&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #000000"&gt;{&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #ff4500"&gt;$writer&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;.&lt;/span&gt;&lt;span style="color: #000000"&gt;WriteLine&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$line&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #ff4500"&gt;$writer&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;.&lt;/span&gt;&lt;span style="color: #000000"&gt;Flush&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #0000ff"&gt;Start-Sleep&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000080"&gt;-m&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$commandDelay&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #ff4500"&gt;$SCRIPT:output&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;+=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;GetOutput&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #000000"&gt;}&lt;/span&gt; 
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #00008b"&gt;break&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #000000"&gt;}&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #006400"&gt;##
If we're in interactive mode, write the buffered&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #006400"&gt;##
output, and respond to input.&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #00008b"&gt;else&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #000000"&gt;{&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #00008b"&gt;if&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$output&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #000000"&gt;{&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #00008b"&gt;foreach&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$line&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #00008b"&gt;in&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$output&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;.&lt;/span&gt;&lt;span style="color: #000000"&gt;Split&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #8b0000"&gt;&amp;quot;`n&amp;quot;&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #000000"&gt;{&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #0000ff"&gt;write-host&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$line&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #000000"&gt;}&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #ff4500"&gt;$SCRIPT:output&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #8b0000"&gt;&amp;quot;&amp;quot;&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #000000"&gt;}&lt;/span&gt; 
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #006400"&gt;##
Read the user's command, quitting if they hit ^D&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #ff4500"&gt;$command&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;read-host&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #00008b"&gt;if&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$command&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;-eq&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #008080"&gt;[char]&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #800080"&gt;4&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;{&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #00008b"&gt;break&lt;/span&gt;&lt;span style="color: #000000"&gt;;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;}&lt;/span&gt; 
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #006400"&gt;##
Otherwise, Write their command to the remote host &lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #ff4500"&gt;$writer&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;.&lt;/span&gt;&lt;span style="color: #000000"&gt;WriteLine&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$command&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #ff4500"&gt;$writer&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;.&lt;/span&gt;&lt;span style="color: #000000"&gt;Flush&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #000000"&gt;}&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #000000"&gt;}&lt;/span&gt; 
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #006400"&gt;##
Close the streams&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #ff4500"&gt;$writer&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;.&lt;/span&gt;&lt;span style="color: #000000"&gt;Close&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #ff4500"&gt;$stream&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;.&lt;/span&gt;&lt;span style="color: #000000"&gt;Close&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;/span&gt; 
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #006400"&gt;##
If we're in scripted mode, return the output&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #00008b"&gt;if&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$scriptedMode&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #000000"&gt;{&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #ff4500"&gt;$output&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #000000"&gt;}&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;}&lt;/span&gt; 
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: #006400"&gt;## Read output from a remote host&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #00008b"&gt;function&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #8a2be2"&gt;GetOutput&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;{&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #006400"&gt;##
Create a buffer to receive the response&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #ff4500"&gt;$buffer&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;new-object&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #8a2be2"&gt;System.Byte[]&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #800080"&gt;1024&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #ff4500"&gt;$encoding&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;new-object&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #8a2be2"&gt;System.Text.AsciiEncoding&lt;/span&gt; 
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #ff4500"&gt;$outputBuffer&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #8b0000"&gt;&amp;quot;&amp;quot;&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #ff4500"&gt;$foundMore&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$false&lt;/span&gt; 
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #006400"&gt;##
Read all the data available from the stream, writing it to the&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #006400"&gt;##
output buffer when done.&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #00008b"&gt;do&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #000000"&gt;{&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #006400"&gt;##
Allow data to buffer for a bit&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #0000ff"&gt;start-sleep&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000080"&gt;-m&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #800080"&gt;1000&lt;/span&gt; 
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #006400"&gt;##
Read what data is available&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #ff4500"&gt;$foundmore&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$false&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #ff4500"&gt;$stream&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;.&lt;/span&gt;&lt;span style="color: #000000"&gt;ReadTimeout&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #800080"&gt;1000&lt;/span&gt; 
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #00008b"&gt;do&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #000000"&gt;{&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #00008b"&gt;try&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #000000"&gt;{&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #ff4500"&gt;$read&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$stream&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;.&lt;/span&gt;&lt;span style="color: #000000"&gt;Read&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$buffer&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;,&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #800080"&gt;0&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;,&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #800080"&gt;1024&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;/span&gt; 
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #00008b"&gt;if&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$read&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;-gt&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #800080"&gt;0&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #000000"&gt;{&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #ff4500"&gt;$foundmore&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$true&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #ff4500"&gt;$outputBuffer&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;+=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$encoding&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;.&lt;/span&gt;&lt;span style="color: #000000"&gt;GetString&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$buffer&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;,&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #800080"&gt;0&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;,&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$read&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #000000"&gt;}&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #000000"&gt;}&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #00008b"&gt;catch&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;{&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$foundMore&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$false&lt;/span&gt;&lt;span style="color: #000000"&gt;;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$read&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #800080"&gt;0&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;}&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #000000"&gt;}&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #00008b"&gt;while&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$read&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;-gt&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #800080"&gt;0&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #000000"&gt;}&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #00008b"&gt;while&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$foundmore&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;/span&gt; 
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #ff4500"&gt;$outputBuffer&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;}&lt;/span&gt; 
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: #a9a9a9"&gt;.&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;Main&lt;/span&gt; 
&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
[Edit: Thanks to Marco for pointing out a few issues that come up when you try to
retrieve massive amounts of data (such as a newsgroup listing). I've updated the script
to fix those.] 
&lt;br /&gt;
[Edit2: Updated to call it Send-TcpRequest, and support SSL]
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.leeholmes.com/blog/aggbug.ashx?id=dc3839e7-56b3-43b8-9a1f-fbf46cbb3ca6" /&gt;</description>
      <comments>http://www.leeholmes.com/blog/CommentView,guid,dc3839e7-56b3-43b8-9a1f-fbf46cbb3ca6.aspx</comments>
    </item>
    <item>
      <trackback:ping>http://www.leeholmes.com/blog/Trackback.aspx?guid=9afc7ec1-1cc2-443a-80c0-4a1e577cbd39</trackback:ping>
      <pingback:server>http://www.leeholmes.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.leeholmes.com/blog/PermaLink,guid,9afc7ec1-1cc2-443a-80c0-4a1e577cbd39.aspx</pingback:target>
      <dc:creator>
      </dc:creator>
      <wfw:comment>http://www.leeholmes.com/blog/CommentView,guid,9afc7ec1-1cc2-443a-80c0-4a1e577cbd39.aspx</wfw:comment>
      <wfw:commentRss>http://www.leeholmes.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=9afc7ec1-1cc2-443a-80c0-4a1e577cbd39</wfw:commentRss>
      <title>PowerShell Activity Tracker</title>
      <guid isPermaLink="false">http://www.leeholmes.com/blog/PermaLink,guid,9afc7ec1-1cc2-443a-80c0-4a1e577cbd39.aspx</guid>
      <link>http://www.leeholmes.com/blog/PowerShellActivityTracker.aspx</link>
      <pubDate>Tue, 20 Oct 2009 17:07:26 GMT</pubDate>
      <description>&lt;p&gt;
&amp;#160;
&lt;/p&gt;
&lt;p&gt;
Download: &lt;a title="http://www.leeholmes.com/projects/ActivityTracker/ActivityTracker.zip" href="http://www.leeholmes.com/projects/ActivityTracker/ActivityTracker.zip"&gt;http://www.leeholmes.com/projects/ActivityTracker/ActivityTracker.zip&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Over the summer, &lt;a href="http://blogs.technet.com/heyscriptingguy/default.aspx"&gt;The
Scripting Guys&lt;/a&gt; ran an excellent series for the 2009 Summer Scripting Games. They
asked me to be a guest commentator for an event, and it turns out that it was something
I’d been toying with in one version or another for some time.
&lt;/p&gt;
&lt;p&gt;
The topic of this event was an &lt;em&gt;Activity Tracker&lt;/em&gt;. In your work life, it is
incredibly helpful to know how you spend your time. Personally, it greatly helps improve
your estimation skills: did you really spend as much time on the project as you thought
you would? Professionally, it helps you remember important events for a given time
period. For example, pulling status reports together for a manager, or reviewing your
year’s accomplishments in preparation for your yearly review.
&lt;/p&gt;
&lt;p&gt;
I’ve been using an activity tracker in one way or the other for several years now,
and definitely consider it a core tool / technique. 
&lt;/p&gt;
&lt;p&gt;
&amp;#160;
&lt;/p&gt;
&lt;h1&gt;Activity Tracker 
&lt;p&gt;
&lt;/p&gt;
&lt;/h1&gt;
&lt;p class="MsoNormal"&gt;
&lt;i style="mso-bidi-font-style: normal"&gt;A light-weight personal productivity tool 
&lt;p&gt;
&lt;/p&gt;
&lt;/i&gt;
&lt;/p&gt;
&lt;p class="MsoNormal"&gt;
Activity Tracker helps you analyze your time by infrequently asking the simple question:
“&lt;i style="mso-bidi-font-style: normal"&gt;What are you doing?&lt;/i&gt;” 
&lt;p&gt;
&lt;/p&gt;
&gt;
&lt;p style="text-align: center" class="MsoNormal" align="center"&gt;
&lt;span style="mso-no-proof: yes"&gt;&lt;a href="http://www.leeholmes.com/blog/content/binary/WindowsLiveWriter/PowerShellActivityTracker_8E60/clip_image002_2.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="clip_image002" border="0" alt="clip_image002" src="http://www.leeholmes.com/blog/content/binary/WindowsLiveWriter/PowerShellActivityTracker_8E60/clip_image002_thumb.jpg" width="602" height="304" v:shapes="Picture_x0020_4" /&gt;&lt;/a&gt;&lt;/span&gt; 
&lt;p&gt;
&lt;/p&gt;
&gt;
&lt;h1&gt;Installation 
&lt;p&gt;
&lt;/p&gt;
&lt;/h1&gt;
&lt;p style="text-indent: -0.25in; mso-list: l0 level1 lfo1" class="MsoListParagraphCxSpFirst"&gt;
&lt;span style="mso-bidi-font-family: calibri; mso-bidi-theme-font: minor-latin"&gt;&lt;span style="mso-list: ignore"&gt;1)&lt;span style="font: 7pt &amp;quot;Times New Roman&amp;quot;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;Copy
Start-ActivityTracker.ps1 to your local computer 
&lt;p&gt;
&lt;/p&gt;
&gt;
&lt;p style="text-indent: -0.25in; mso-list: l0 level1 lfo1" class="MsoListParagraphCxSpMiddle"&gt;
&lt;span style="mso-bidi-font-family: calibri; mso-bidi-theme-font: minor-latin"&gt;&lt;span style="mso-list: ignore"&gt;2)&lt;span style="font: 7pt &amp;quot;Times New Roman&amp;quot;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;Install
the PowerBoots UI scripting library into your Modules directory (&lt;a href="http://powerboots.codeplex.com"&gt;http://powerboots.codeplex.com&lt;/a&gt;).
Note: PowerBoots includes a “Functions” directory. Delete everything in it before
launching the first time. 
&lt;p&gt;
&lt;/p&gt;
&gt;
&lt;p style="text-indent: -0.25in; mso-list: l0 level1 lfo1" class="MsoListParagraphCxSpMiddle"&gt;
&lt;span style="mso-bidi-font-family: calibri; mso-bidi-theme-font: minor-latin"&gt;&lt;span style="mso-list: ignore"&gt;3)&lt;span style="font: 7pt &amp;quot;Times New Roman&amp;quot;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;Place
a shortcut to the following command in your Startup folder: 
&lt;br /&gt;
&lt;span style="line-height: 115%; font-family: &amp;quot;Courier New&amp;quot;; font-size: 8pt"&gt;C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe
-noprofile -command Start-ActivityTracker -AsApplication&lt;/span&gt; 
&lt;p&gt;
&lt;/p&gt;
&gt;
&lt;p style="text-indent: -0.25in; mso-list: l0 level1 lfo1" class="MsoListParagraphCxSpLast"&gt;
&lt;span style="mso-bidi-font-family: calibri; mso-bidi-theme-font: minor-latin"&gt;&lt;span style="mso-list: ignore"&gt;4)&lt;span style="font: 7pt &amp;quot;Times New Roman&amp;quot;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;(First
time only) Launch the shortcut from your Startup folder 
&lt;p&gt;
&lt;/p&gt;
&gt;
&lt;h1&gt;How it Works 
&lt;p&gt;
&lt;/p&gt;
&lt;/h1&gt;
&lt;p class="MsoNormal"&gt;
Activity Tracker follows the same principles as a traditional software sampling profiler,
but instead samples humans. By randomly recording your current task, Activity Tracker
lets you analyze your answers as a fairly faithful proxy for how you actually spent
your time. If 20% of your answers were “Status Meeting,” then you spent close to 20%
of your time in status meetings. 
&lt;p&gt;
&lt;/p&gt;
&gt;
&lt;h3&gt;An Alternative to Sampling 
&lt;p&gt;
&lt;/p&gt;
&lt;/h3&gt;
&lt;p class="MsoNormal"&gt;
An alternative to the sampling approach is an instrumentation approach: faithfully
recording your transition between tasks. Activity Tracker avoids this design, since
asking humans to faithfully record transitions between tasks is enormously error-prone.
For example, you might not log a task transition for a task that you consider inconsequential
(for example, “Checking email”,) when in fact that task may account for a significant
portion of your day. Some software attempts to address the human element by tracking
window titles, but the level of data captured by window titles often does not map
well to the task they support. 
&lt;p&gt;
&lt;/p&gt;
&gt;
&lt;h1&gt;Using Activity Tracker 
&lt;p&gt;
&lt;/p&gt;
&lt;/h1&gt;
&lt;p class="MsoNormal"&gt;
Activity Tracker is a PowerShell script. It spawns a new instance of PowerShell to
run itself, but also lets you specify the –AsApplication flag if you want it to have
a unique name for the resulting exe. This new executable is simply a copy of PowerShell.exe. 
&lt;p&gt;
&lt;/p&gt;
&gt;
&lt;p class="MsoNormal"&gt;
Once launched, Activity Tracker sits in the background. Once in awhile (randomly,
between 5 and 25 minutes,) it asks you the question, “&lt;i style="mso-bidi-font-style: normal"&gt;What
are you doing?&lt;/i&gt;” It stores your previous answers in a list until you exit the program,
which lets you easily re-use your answers to previous questions. 
&lt;p&gt;
&lt;/p&gt;
&gt;
&lt;p class="MsoNormal"&gt;
When you press OK, it adds your answer (along with the current window title) to a
file in “My Documents\ActivityTracker” – one file per week. The file is named to correspond
to the date on the first day of the week. 
&lt;p&gt;
&lt;/p&gt;
&gt;
&lt;p class="MsoNormal"&gt;
If you don’t answer within four minutes, it dismisses the dialog and checks your Outlook
calendar. If you are in a meeting, it records the title of that meeting. If you aren’t
in a meeting, it records nothing. This lets you keep the Activity Tracker running
when you go home for the day without polluting your journal files. 
&lt;p&gt;
&lt;/p&gt;
&gt;
&lt;h1&gt;Slicing and Dicing 
&lt;p&gt;
&lt;/p&gt;
&lt;/h1&gt;
&lt;p class="MsoNormal"&gt;
The Activity Tracker records its output as a simple CSV file. Knowing that, you can
slice and dice results to your heart’s content. For example, to easily get a summary
of your week: 
&lt;p&gt;
&lt;/p&gt;
&gt;
&lt;pre style="background: #012456"&gt;&lt;span style="color: #eeedf0"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 
&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #eeedf0"&gt;PS &amp;gt;Import-Csv temp.csv | Group Activity
| Sort -Descending Count&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 
&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #eeedf0"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 
&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #eeedf0"&gt;Count Name&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;Group&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 
&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #eeedf0"&gt;----- ----&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;-----&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 
&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #eeedf0"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160; &lt;/span&gt;23
Hubble Space Telecsope... {@{Date=5/20/2009 8:24:19 AM; WindowTi... 
&lt;br /&gt;
&lt;/span&gt;&lt;span style="color: #eeedf0"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;8
Meeting: Design review&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;{@{Date=5/20/2009
1:10:21 PM; WindowTi... 
&lt;br /&gt;
&lt;/span&gt;&lt;span style="color: #eeedf0"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;5
Meeting: Team meeting&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;{@{Date=5/20/2009
3:10:20 PM; WindowTi... 
&lt;br /&gt;
&lt;/span&gt;&lt;span style="color: #eeedf0"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;4
Email&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;{@{Date=5/20/2009
8:04:26 AM; WindowTi... 
&lt;br /&gt;
&lt;/span&gt;&lt;span style="color: #eeedf0"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;3
Scripting games&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;{@{Date=5/19/2009
6:09:16 PM; WindowTi... 
&lt;br /&gt;
&lt;/span&gt;&lt;span style="color: #eeedf0"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&amp;lt;?xml:namespace
prefix = o /&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/pre&gt;
&lt;p class="MsoNormal"&gt;
&lt;p&gt;
&amp;#160;
&lt;/p&gt;
&gt;
&lt;p class="MsoNormal"&gt;
To count how many hours you spent on a task, simply divide by four. 
&lt;p&gt;
&lt;/p&gt;
&gt;
&lt;h1&gt;Dependencies 
&lt;p&gt;
&lt;/p&gt;
&lt;/h1&gt;
&lt;p class="MsoNormal"&gt;
Activity tracker uses the PowerBoots UI scripting library: &lt;a href="http://powerboots.codeplex.com/"&gt;http://powerboots.codeplex.com/&lt;/a&gt;. 
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.leeholmes.com/blog/aggbug.ashx?id=9afc7ec1-1cc2-443a-80c0-4a1e577cbd39" /&gt;</description>
      <comments>http://www.leeholmes.com/blog/CommentView,guid,9afc7ec1-1cc2-443a-80c0-4a1e577cbd39.aspx</comments>
    </item>
    <item>
      <trackback:ping>http://www.leeholmes.com/blog/Trackback.aspx?guid=7be38aa2-cf9f-4b19-b9e9-04e7357e496d</trackback:ping>
      <pingback:server>http://www.leeholmes.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.leeholmes.com/blog/PermaLink,guid,7be38aa2-cf9f-4b19-b9e9-04e7357e496d.aspx</pingback:target>
      <dc:creator>
      </dc:creator>
      <wfw:comment>http://www.leeholmes.com/blog/CommentView,guid,7be38aa2-cf9f-4b19-b9e9-04e7357e496d.aspx</wfw:comment>
      <wfw:commentRss>http://www.leeholmes.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=7be38aa2-cf9f-4b19-b9e9-04e7357e496d</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
When playing with cryptography challenges (don’t we all?,) you end up leaning on a
bunch of common tasks. For example, substituting all text in a string with a set of
replacements (substitution ciphers,) XORing strings together, applying dictionary-based
algorithms, investigating word frequency, and more.
</p>
        <p>
PowerShell lends itself really well to these challenges, and I’ve developed a small
cryptography library along the way. Here it is. Your job, as a cryptographer, is to
uncover the hidden comments :) (Hint: don’t spend very long. Some problems are unbreakable.)
</p>
        <p>
For example, here’s the script I used (interactively) to solve an “XOR Cipher” at <a title="http://cryptolib.com/challenges.php" href="http://cryptolib.com/challenges.php">http://cryptolib.com/challenges.php</a>.
</p>
        <blockquote>
          <div style="border-bottom: black 1px solid; border-left: black 1px solid; padding-bottom: 5px; padding-left: 5px; width: 650px; padding-right: 5px; font-family: consolas,lucida console; font-size: 10pt; overflow: auto; border-top: black 1px solid; border-right: black 1px solid; padding-top: 5px">
            <table border="0" cellspacing="0" cellpadding="5">
              <tbody>
                <tr>
                  <td valign="top">
                    <div style="padding-bottom: 5px; padding-left: 5px; padding-right: 5px; font-family: consolas,lucida console; background: #cecece; font-size: 10pt; padding-top: 5px">001 
<br />
002 
<br />
003 
<br />
004 
<br />
005 
<br />
006 
<br />
007 
<br />
008 
<br />
009 
<br />
010 
<br />
011 
<br />
012 
<br />
013 
<br />
014 
<br />
015 
<br />
016 
<br />
017 
<br />
018 
<br />
019 
<br />
020 
<br />
021 
<br />
022 
<br />
023 
<br />
024 
<br />
025 
<br />
026 
<br />
027 
<br />
028 
<br />
029 
<br />
030 
<br />
031 
<br />
032 
<br />
033 
<br />
034 
<br />
035 
<br />
036 
<br />
037 
<br />
038 
<br />
039 
<br />
040 
<br />
041 
<br />
042 
<br />
043 
<br />
044 
<br />
045 
<br />
046 
<br />
047 
<br />
048 
<br />
049 
<br />
050 
<br />
051 
<br />
052 
<br />
053 
<br />
054 
<br />
055 
<br />
056 
<br />
057 
<br />
058 
<br />
059 
<br />
060 
<br />
061 
<br />
062 
<br />
063 
<br />
064 
<br />
065 
<br />
066 
<br />
067 
<br />
068 
<br />
069 
<br /></div>
                  </td>
                  <td valign="top" nowrap="nowrap">
                    <div style="padding-bottom: 5px; padding-left: 5px; padding-right: 5px; font-family: consolas,lucida console; background: #fcfcfc; font-size: 10pt; padding-top: 5px">
                      <span style="color: #ff4500">$cipherHex1</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">=</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #8b0000">@" 
<br />
3526532A122A183D4D0E4A2E3713101954013E2B3E2246235728 
<br />
573553064832781F164A481F2A2B396350341E2B5E3A5E1C4861 
<br />
301C11544F1D22363863413F192A4A36520A0D2D2D13044A001A 
<br />
252025335E2F142F5A355A 
<br />
"@</span>
                      <br />
                      <br />
                      <span style="color: #ff4500">$cipherHex2</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">=</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #8b0000">@" 
<br />
32335734163A5136510E41612818114A4912252C2722462F1820 
<br />
4B7956014E283C180D4D001522312724573416225C794C074C2C 
<br />
3D0E435A4F063B29383012251B214C315A1C41283618435E5212 
<br />
2531342D556612205B2B461F592837131019481225212F225B2A 
<br />
"@</span>
                      <br />
                      <br />
                      <span style="color: #ff4500">$words</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">=</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #000000">@{</span>
                      <span style="color: #000000">}</span>
                      <br />
                      <span style="color: #0000ff">Get-Content</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #8a2be2">dictfull.txt</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">|</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #0000ff">%</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #000000">{</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #ff4500">$words</span>
                      <span style="color: #a9a9a9">[</span>
                      <span style="color: #ff4500">$_</span>
                      <span style="color: #a9a9a9">]</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">=</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #ff4500">$true</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #000000">}</span>
                      <br />
                      <br />
                      <span style="color: #006400">## Turn the cipher text into a single string</span>
                      <br />
                      <span style="color: #ff4500">$cipherText1</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">=</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #ff4500">$cipherHex1</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">-replace</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #8b0000">"`r`n"</span>
                      <span style="color: #a9a9a9">,</span>
                      <span style="color: #8b0000">""</span>
                      <br />
                      <span style="color: #ff4500">$cipherText2</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">=</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #ff4500">$cipherHex2</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">-replace</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #8b0000">"`r`n"</span>
                      <span style="color: #a9a9a9">,</span>
                      <span style="color: #8b0000">""</span>
                      <br />
                      <br />
                      <span style="color: #006400">## Convert hex to decimal</span>
                      <br />
                      <span style="color: #ff4500">$cipherBytes1</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">=</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #ff4500">$cipherText1</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">-split</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #8b0000">'(..)'</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">|</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #0000ff">?</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #000000">{</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #ff4500">$_</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #000000">}</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">|</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #0000ff">%</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #000000">{</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #008080">[Convert]</span>
                      <span style="color: #a9a9a9">::</span>
                      <span style="color: #000000">ToInt32</span>
                      <span style="color: #000000">(</span>
                      <span style="color: #ff4500">$_</span>
                      <span style="color: #a9a9a9">,</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #800080">16</span>
                      <span style="color: #000000">)</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #000000">}</span>
                      <br />
                      <span style="color: #ff4500">$cipherBytes2</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">=</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #ff4500">$cipherText2</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">-split</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #8b0000">"(..)"</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">|</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #0000ff">?</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #000000">{</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #ff4500">$_</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #000000">}</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">|</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #0000ff">%</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #000000">{</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #008080">[Convert]</span>
                      <span style="color: #a9a9a9">::</span>
                      <span style="color: #000000">ToInt32</span>
                      <span style="color: #000000">(</span>
                      <span style="color: #ff4500">$_</span>
                      <span style="color: #a9a9a9">,</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #800080">16</span>
                      <span style="color: #000000">)</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #000000">}</span>
                      <br />
                      <br />
                      <span style="color: #006400">## Drop the key by XORing the two cipher texts together</span>
                      <br />
                      <span style="color: #ff4500">$plainTextCombined</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">=</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #0000ff">XORBytes</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #ff4500">$cipherBytes1</span>
                      <span style="color: #a9a9a9">[</span>
                      <span style="color: #800080">0</span>
                      <span style="color: #a9a9a9">..</span>
                      <span style="color: #800080">19</span>
                      <span style="color: #a9a9a9">]</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #ff4500">$cipherBytes2</span>
                      <span style="color: #a9a9a9">[</span>
                      <span style="color: #800080">0</span>
                      <span style="color: #a9a9a9">..</span>
                      <span style="color: #800080">19</span>
                      <span style="color: #a9a9a9">]</span>
                      <br />
                      <br />
                      <span style="color: #006400">## Initialize the key</span>
                      <br />
                      <span style="color: #ff4500">$key</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">=</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">,</span>
                      <span style="color: #800080">0x20</span>
                      <span style="color: #a9a9a9">*</span>
                      <span style="color: #800080">20</span>
                      <br />
                      <br />
                      <span style="color: #006400">## First break comes by scanning through the entire dictionary,
guessing the</span>
                      <br />
                      <span style="color: #006400">## first word of one plaintext, then seeing if that corresponds
to a key that makes</span>
                      <br />
                      <span style="color: #006400">## the second plaintext look reasonable</span>
                      <br />
                      <span style="color: #ff4500">$output</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">=</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #000000">$(</span>
                      <span style="color: #00008b">foreach</span>
                      <span style="color: #000000">(</span>
                      <span style="color: #ff4500">$word</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #00008b">in</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #ff4500">$words</span>
                      <span style="color: #a9a9a9">.</span>
                      <span style="color: #000000">GetEnumerator</span>
                      <span style="color: #000000">(</span>
                      <span style="color: #000000">)</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">|</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #0000ff">%</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #000000">{</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #ff4500">$_</span>
                      <span style="color: #a9a9a9">.</span>
                      <span style="color: #000000">Key</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #000000">}</span>
                      <span style="color: #000000">)</span>
                      <br />
                      <span style="color: #000000">{</span>
                      <br />
                      <span style="color: #000000">    </span>
                      <span style="color: #ff4500">$testString</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">=</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #0000ff">XORBytes</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #ff4500">$plainTextCombined</span>
                      <span style="color: #a9a9a9">[</span>
                      <span style="color: #800080">0</span>
                      <span style="color: #a9a9a9">..</span>
                      <span style="color: #000000">(</span>
                      <span style="color: #ff4500">$word</span>
                      <span style="color: #a9a9a9">.</span>
                      <span style="color: #000000">Length</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">-</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #800080">1</span>
                      <span style="color: #000000">)</span>
                      <span style="color: #a9a9a9">]</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #000000">(</span>
                      <span style="color: #ff4500">$word</span>
                      <span style="color: #a9a9a9">.</span>
                      <span style="color: #000000">ToCharArray</span>
                      <span style="color: #000000">(</span>
                      <span style="color: #000000">)</span>
                      <span style="color: #000000">)</span>
                      <br />
                      <span style="color: #000000">    </span>
                      <span style="color: #000000">(</span>
                      <span style="color: #a9a9a9">-join</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #008080">[char[]]</span>
                      <span style="color: #ff4500">$testString</span>
                      <span style="color: #000000">)</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">+</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #8b0000">"
: $word"</span>
                      <br />
                      <span style="color: #000000">}</span>
                      <br />
                      <span style="color: #000000">)</span>
                      <br />
                      <br />
                      <span style="color: #006400">## Output the list to a file, then clean the file to
include only alpha-numeric</span>
                      <br />
                      <span style="color: #006400">## characters.</span>
                      <br />
                      <span style="color: #ff4500">$output</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">&gt;</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #8a2be2">first_word.txt</span>
                      <br />
                      <span style="color: #ff4500">$alphaOnly</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">=</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #0000ff">gc</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #8a2be2">first_word.txt</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">|</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #0000ff">select-string</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #8b0000">'^[a-zA-Z
]+ : .*$'</span>
                      <br />
                      <span style="color: #ff4500">$alphaOnly</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">&gt;</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #8a2be2">first_word_alpha.txt</span>
                      <br />
                      <br />
                      <span style="color: #006400">## The first break comes from seeing that "healed
dr" corresponds to "operation".</span>
                      <br />
                      <span style="color: #006400">## Make a guess of that as the first 9 elements of the
key.</span>
                      <br />
                      <span style="color: #ff4500">$key</span>
                      <span style="color: #a9a9a9">[</span>
                      <span style="color: #800080">0</span>
                      <span style="color: #a9a9a9">]</span>
                      <span style="color: #a9a9a9">,</span>
                      <span style="color: #ff4500">$key</span>
                      <span style="color: #a9a9a9">[</span>
                      <span style="color: #800080">1</span>
                      <span style="color: #a9a9a9">]</span>
                      <span style="color: #a9a9a9">,</span>
                      <span style="color: #ff4500">$key</span>
                      <span style="color: #a9a9a9">[</span>
                      <span style="color: #800080">2</span>
                      <span style="color: #a9a9a9">]</span>
                      <span style="color: #a9a9a9">,</span>
                      <span style="color: #ff4500">$key</span>
                      <span style="color: #a9a9a9">[</span>
                      <span style="color: #800080">3</span>
                      <span style="color: #a9a9a9">]</span>
                      <span style="color: #a9a9a9">,</span>
                      <span style="color: #ff4500">$key</span>
                      <span style="color: #a9a9a9">[</span>
                      <span style="color: #800080">4</span>
                      <span style="color: #a9a9a9">]</span>
                      <span style="color: #a9a9a9">,</span>
                      <span style="color: #ff4500">$key</span>
                      <span style="color: #a9a9a9">[</span>
                      <span style="color: #800080">5</span>
                      <span style="color: #a9a9a9">]</span>
                      <span style="color: #a9a9a9">,</span>
                      <span style="color: #ff4500">$key</span>
                      <span style="color: #a9a9a9">[</span>
                      <span style="color: #800080">6</span>
                      <span style="color: #a9a9a9">]</span>
                      <span style="color: #a9a9a9">,</span>
                      <span style="color: #ff4500">$key</span>
                      <span style="color: #a9a9a9">[</span>
                      <span style="color: #800080">7</span>
                      <span style="color: #a9a9a9">]</span>
                      <span style="color: #a9a9a9">,</span>
                      <span style="color: #ff4500">$key</span>
                      <span style="color: #a9a9a9">[</span>
                      <span style="color: #800080">8</span>
                      <span style="color: #a9a9a9">]</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">=</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #0000ff">XORBytes</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #000000">(</span>
                      <span style="color: #8b0000">"healed
dr"</span>
                      <span style="color: #a9a9a9">.</span>
                      <span style="color: #000000">ToCharArray</span>
                      <span style="color: #000000">(</span>
                      <span style="color: #000000">)</span>
                      <span style="color: #000000">)</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #ff4500">$cipherBytes1</span>
                      <span style="color: #a9a9a9">[</span>
                      <span style="color: #800080">0</span>
                      <span style="color: #a9a9a9">..</span>
                      <span style="color: #800080">8</span>
                      <span style="color: #a9a9a9">]</span>
                      <br />
                      <br />
                      <span style="color: #006400">## These other magic values come from looking at the
output and making educated guesses</span>
                      <br />
                      <span style="color: #ff4500">$key</span>
                      <span style="color: #a9a9a9">[</span>
                      <span style="color: #800080">9</span>
                      <span style="color: #a9a9a9">]</span>
                      <span style="color: #a9a9a9">,</span>
                      <span style="color: #ff4500">$key</span>
                      <span style="color: #a9a9a9">[</span>
                      <span style="color: #800080">10</span>
                      <span style="color: #a9a9a9">]</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">=</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #0000ff">XORBytes</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #000000">(</span>
                      <span style="color: #8b0000">"se"</span>
                      <span style="color: #a9a9a9">.</span>
                      <span style="color: #000000">ToCharArray</span>
                      <span style="color: #000000">(</span>
                      <span style="color: #000000">)</span>
                      <span style="color: #000000">)</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #ff4500">$cipherBytes1</span>
                      <span style="color: #a9a9a9">[</span>
                      <span style="color: #800080">49</span>
                      <span style="color: #a9a9a9">..</span>
                      <span style="color: #800080">50</span>
                      <span style="color: #a9a9a9">]</span>
                      <br />
                      <span style="color: #ff4500">$key</span>
                      <span style="color: #a9a9a9">[</span>
                      <span style="color: #800080">11</span>
                      <span style="color: #a9a9a9">]</span>
                      <span style="color: #a9a9a9">,</span>
                      <span style="color: #ff4500">$key</span>
                      <span style="color: #a9a9a9">[</span>
                      <span style="color: #800080">12</span>
                      <span style="color: #a9a9a9">]</span>
                      <span style="color: #a9a9a9">,</span>
                      <span style="color: #ff4500">$key</span>
                      <span style="color: #a9a9a9">[</span>
                      <span style="color: #800080">13</span>
                      <span style="color: #a9a9a9">]</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">=</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #0000ff">XORBytes</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #000000">(</span>
                      <span style="color: #8b0000">"ion"</span>
                      <span style="color: #a9a9a9">.</span>
                      <span style="color: #000000">ToCharArray</span>
                      <span style="color: #000000">(</span>
                      <span style="color: #000000">)</span>
                      <span style="color: #000000">)</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #ff4500">$cipherBytes2</span>
                      <span style="color: #a9a9a9">[</span>
                      <span style="color: #800080">91</span>
                      <span style="color: #a9a9a9">..</span>
                      <span style="color: #800080">93</span>
                      <span style="color: #a9a9a9">]</span>
                      <br />
                      <span style="color: #ff4500">$key</span>
                      <span style="color: #a9a9a9">[</span>
                      <span style="color: #800080">14</span>
                      <span style="color: #a9a9a9">]</span>
                      <span style="color: #a9a9a9">,</span>
                      <span style="color: #ff4500">$key</span>
                      <span style="color: #a9a9a9">[</span>
                      <span style="color: #800080">15</span>
                      <span style="color: #a9a9a9">]</span>
                      <span style="color: #a9a9a9">,</span>
                      <span style="color: #ff4500">$key</span>
                      <span style="color: #a9a9a9">[</span>
                      <span style="color: #800080">16</span>
                      <span style="color: #a9a9a9">]</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">=</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #0000ff">XORBytes</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #000000">(</span>
                      <span style="color: #8b0000">"gs
"</span>
                      <span style="color: #a9a9a9">.</span>
                      <span style="color: #000000">ToCharArray</span>
                      <span style="color: #000000">(</span>
                      <span style="color: #000000">)</span>
                      <span style="color: #000000">)</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #ff4500">$cipherBytes1</span>
                      <span style="color: #a9a9a9">[</span>
                      <span style="color: #800080">74</span>
                      <span style="color: #a9a9a9">..</span>
                      <span style="color: #800080">76</span>
                      <span style="color: #a9a9a9">]</span>
                      <br />
                      <span style="color: #ff4500">$key</span>
                      <span style="color: #a9a9a9">[</span>
                      <span style="color: #800080">17</span>
                      <span style="color: #a9a9a9">]</span>
                      <span style="color: #a9a9a9">,</span>
                      <span style="color: #ff4500">$key</span>
                      <span style="color: #a9a9a9">[</span>
                      <span style="color: #800080">18</span>
                      <span style="color: #a9a9a9">]</span>
                      <span style="color: #a9a9a9">,</span>
                      <span style="color: #ff4500">$key</span>
                      <span style="color: #a9a9a9">[</span>
                      <span style="color: #800080">19</span>
                      <span style="color: #a9a9a9">]</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">=</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #0000ff">XORBytes</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #000000">(</span>
                      <span style="color: #8b0000">"Fit"</span>
                      <span style="color: #a9a9a9">.</span>
                      <span style="color: #000000">ToCharArray</span>
                      <span style="color: #000000">(</span>
                      <span style="color: #000000">)</span>
                      <span style="color: #000000">)</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #ff4500">$cipherBytes2</span>
                      <span style="color: #a9a9a9">[</span>
                      <span style="color: #800080">37</span>
                      <span style="color: #a9a9a9">..</span>
                      <span style="color: #800080">39</span>
                      <span style="color: #a9a9a9">]</span>
                      <br />
                      <br />
                      <span style="color: #006400">## Display the currently-guessed plain texts alongside
eachother,</span>
                      <br />
                      <span style="color: #006400">## including the key and index into the cipher text. </span>
                      <br />
                      <span style="color: #00008b">for</span>
                      <span style="color: #000000">(</span>
                      <span style="color: #ff4500">$counter</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">=</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #800080">0</span>
                      <span style="color: #000000">;</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #ff4500">$counter</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">-lt</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #ff4500">$cipherBytes2</span>
                      <span style="color: #a9a9a9">.</span>
                      <span style="color: #000000">Count</span>
                      <span style="color: #000000">;</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #ff4500">$counter</span>
                      <span style="color: #a9a9a9">++</span>
                      <span style="color: #000000">)</span>
                      <br />
                      <span style="color: #000000">{</span>
                      <br />
                      <span style="color: #000000">    </span>
                      <span style="color: #ff4500">$keyChar</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">=</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #ff4500">$key</span>
                      <span style="color: #a9a9a9">[</span>
                      <span style="color: #ff4500">$counter</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">%</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #800080">20</span>
                      <span style="color: #a9a9a9">]</span>
                      <br />
                      <span style="color: #000000">    </span>
                      <span style="color: #8b0000">"{0}
{1} {2} {3}"</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">-f</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #ff4500">$counter</span>
                      <span style="color: #a9a9a9">,</span>
                      <span style="color: #000000">(</span>
                      <span style="color: #008080">[char]</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #ff4500">$keyChar</span>
                      <span style="color: #000000">)</span>
                      <span style="color: #a9a9a9">,</span>
                      <span style="color: #000000">(</span>
                      <span style="color: #008080">[char]</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #000000">(</span>
                      <span style="color: #ff4500">$cipherBytes1</span>
                      <span style="color: #a9a9a9">[</span>
                      <span style="color: #ff4500">$counter</span>
                      <span style="color: #a9a9a9">]</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">-bxor</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #ff4500">$keyChar</span>
                      <span style="color: #000000">)</span>
                      <span style="color: #000000">)</span>
                      <span style="color: #a9a9a9">,</span>
                      <span style="color: #000000">(</span>
                      <span style="color: #008080">[char]</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #000000">(</span>
                      <span style="color: #ff4500">$cipherBytes2</span>
                      <span style="color: #a9a9a9">[</span>
                      <span style="color: #ff4500">$counter</span>
                      <span style="color: #a9a9a9">]</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">-bxor</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #ff4500">$keyChar</span>
                      <span style="color: #000000">)</span>
                      <span style="color: #000000">)</span>
                      <br />
                      <span style="color: #000000">}</span>
                      <br />
                      <br />
                      <span style="color: #a9a9a9">-join</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #008080">[char[]]</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #000000">(</span>
                      <span style="color: #0000ff">XORBytes</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #ff4500">$key</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #ff4500">$cipherBytes1</span>
                      <span style="color: #000000">)</span>
                      <br />
                      <span style="color: #a9a9a9">-join</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #008080">[char[]]</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #000000">(</span>
                      <span style="color: #0000ff">XORBytes</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #ff4500">$key</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #ff4500">$cipherBytes2</span>
                      <span style="color: #000000">)</span>
                      <br />
                      <span style="color: #a9a9a9">-join</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #008080">[char[]]</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #ff4500">$key</span>
                      <br />
                    </div>
                  </td>
                </tr>
              </tbody>
            </table>
          </div>
        </blockquote>
        <p>
 
</p>
        <p>
And the library:
</p>
        <blockquote>
          <div style="border-bottom: black 1px solid; border-left: black 1px solid; padding-bottom: 5px; padding-left: 5px; width: 650px; padding-right: 5px; font-family: consolas,lucida console; font-size: 10pt; overflow: auto; border-top: black 1px solid; border-right: black 1px solid; padding-top: 5px">
            <table border="0" cellspacing="0" cellpadding="5">
              <tbody>
                <tr>
                  <td valign="top">
                    <div style="padding-bottom: 5px; padding-left: 5px; padding-right: 5px; font-family: consolas,lucida console; background: #cecece; font-size: 10pt; padding-top: 5px">001 
<br />
002 
<br />
003 
<br />
004 
<br />
005 
<br />
006 
<br />
007 
<br />
008 
<br />
009 
<br />
010 
<br />
011 
<br />
012 
<br />
013 
<br />
014 
<br />
015 
<br />
016 
<br />
017 
<br />
018 
<br />
019 
<br />
020 
<br />
021 
<br />
022 
<br />
023 
<br />
024 
<br />
025 
<br />
026 
<br />
027 
<br />
028 
<br />
029 
<br />
030 
<br />
031 
<br />
032 
<br />
033 
<br />
034 
<br />
035 
<br />
036 
<br />
037 
<br />
038 
<br />
039 
<br />
040 
<br />
041 
<br />
042 
<br />
043 
<br />
044 
<br />
045 
<br />
046 
<br />
047 
<br />
048 
<br />
049 
<br />
050 
<br />
051 
<br />
052 
<br />
053 
<br />
054 
<br />
055 
<br />
056 
<br />
057 
<br />
058 
<br />
059 
<br />
060 
<br />
061 
<br />
062 
<br />
063 
<br />
064 
<br />
065 
<br />
066 
<br />
067 
<br />
068 
<br />
069 
<br />
070 
<br />
071 
<br />
072 
<br />
073 
<br />
074 
<br />
075 
<br />
076 
<br />
077 
<br />
078 
<br />
079 
<br />
080 
<br />
081 
<br />
082 
<br />
083 
<br />
084 
<br />
085 
<br />
086 
<br />
087 
<br />
088 
<br />
089 
<br />
090 
<br />
091 
<br />
092 
<br />
093 
<br />
094 
<br />
095 
<br />
096 
<br />
097 
<br />
098 
<br />
099 
<br />
100 
<br />
101 
<br />
102 
<br />
103 
<br />
104 
<br />
105 
<br />
106 
<br />
107 
<br />
108 
<br />
109 
<br />
110 
<br />
111 
<br />
112 
<br />
113 
<br />
114 
<br />
115 
<br />
116 
<br />
117 
<br />
118 
<br />
119 
<br />
120 
<br />
121 
<br />
122 
<br />
123 
<br />
124 
<br />
125 
<br />
126 
<br />
127 
<br />
128 
<br />
129 
<br />
130 
<br />
131 
<br />
132 
<br />
133 
<br />
134 
<br />
135 
<br />
136 
<br />
137 
<br />
138 
<br />
139 
<br />
140 
<br />
141 
<br />
142 
<br />
143 
<br />
144 
<br />
145 
<br />
146 
<br />
147 
<br />
148 
<br />
149 
<br />
150 
<br />
151 
<br />
152 
<br />
153 
<br />
154 
<br />
155 
<br />
156 
<br />
157 
<br />
158 
<br />
159 
<br />
160 
<br />
161 
<br />
162 
<br />
163 
<br />
164 
<br />
165 
<br />
166 
<br />
167 
<br />
168 
<br />
169 
<br />
170 
<br />
171 
<br />
172 
<br />
173 
<br />
174 
<br />
175 
<br />
176 
<br />
177 
<br />
178 
<br />
179 
<br />
180 
<br />
181 
<br />
182 
<br />
183 
<br />
184 
<br />
185 
<br />
186 
<br />
187 
<br />
188 
<br /></div>
                  </td>
                  <td valign="top" nowrap="nowrap">
                    <div style="padding-bottom: 5px; padding-left: 5px; padding-right: 5px; font-family: consolas,lucida console; background: #fcfcfc; font-size: 10pt; padding-top: 5px">
                      <span style="color: #00008b">function</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #8a2be2">Get-SubstitutedText</span>
                      <span style="color: #000000">(</span>
                      <span style="color: #ff4500">$cipherText</span>
                      <span style="color: #a9a9a9">,</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #ff4500">$substitutions</span>
                      <span style="color: #000000">)</span>
                      <br />
                      <span style="color: #000000">{</span>
                      <br />
                      <span style="color: #000000">    </span>
                      <span style="color: #ff4500">$content</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">=</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #000000">$(</span>
                      <span style="color: #00008b">foreach</span>
                      <span style="color: #000000">(</span>
                      <span style="color: #ff4500">$char</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #00008b">in</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #008080">[char[]]</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #ff4500">$cipherText</span>
                      <span style="color: #000000">)</span>
                      <br />
                      <span style="color: #000000">    </span>
                      <span style="color: #000000">{</span>
                      <br />
                      <span style="color: #000000">        </span>
                      <span style="color: #00008b">if</span>
                      <span style="color: #000000">(</span>
                      <span style="color: #ff4500">$substitutions</span>
                      <span style="color: #a9a9a9">[</span>
                      <span style="color: #8b0000">"$char"</span>
                      <span style="color: #a9a9a9">]</span>
                      <span style="color: #000000">)</span>
                      <br />
                      <span style="color: #000000">        </span>
                      <span style="color: #000000">{</span>
                      <br />
                      <span style="color: #000000">            </span>
                      <span style="color: #ff4500">$substitutions</span>
                      <span style="color: #a9a9a9">[</span>
                      <span style="color: #8b0000">"$char"</span>
                      <span style="color: #a9a9a9">]</span>
                      <br />
                      <span style="color: #000000">        </span>
                      <span style="color: #000000">}</span>
                      <br />
                      <span style="color: #000000">        </span>
                      <span style="color: #00008b">else</span>
                      <br />
                      <span style="color: #000000">        </span>
                      <span style="color: #000000">{</span>
                      <br />
                      <span style="color: #000000">            </span>
                      <span style="color: #8b0000">"."</span>
                      <br />
                      <span style="color: #000000">        </span>
                      <span style="color: #000000">}</span>
                      <br />
                      <span style="color: #000000">    </span>
                      <span style="color: #000000">}</span>
                      <br />
                      <span style="color: #000000">    </span>
                      <span style="color: #000000">)</span>
                      <br />
                      <span style="color: #000000">    </span>
                      <br />
                      <span style="color: #000000">    </span>
                      <span style="color: #a9a9a9">-join</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #ff4500">$content</span>
                      <br />
                      <span style="color: #000000">}</span>
                      <br />
                      <br />
                      <span style="color: #00008b">function</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #8a2be2">XORBytes</span>
                      <span style="color: #000000">(</span>
                      <span style="color: #ff4500">$passwordBytes</span>
                      <span style="color: #a9a9a9">,</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #ff4500">$cipherBytes2</span>
                      <span style="color: #000000">)</span>
                      <br />
                      <span style="color: #000000">{</span>
                      <br />
                      <span style="color: #000000">    </span>
                      <span style="color: #ff4500">$combinedBytes</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">=</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #000000">@(</span>
                      <span style="color: #000000">)</span>
                      <br />
                      <span style="color: #000000">    </span>
                      <span style="color: #00008b">for</span>
                      <span style="color: #000000">(</span>
                      <span style="color: #ff4500">$counter</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">=</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #800080">0</span>
                      <span style="color: #000000">;</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #ff4500">$counter</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">-lt</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #ff4500">$cipherBytes2</span>
                      <span style="color: #a9a9a9">.</span>
                      <span style="color: #000000">Length</span>
                      <span style="color: #000000">;</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #ff4500">$counter</span>
                      <span style="color: #a9a9a9">++</span>
                      <span style="color: #000000">)</span>
                      <br />
                      <span style="color: #000000">    </span>
                      <span style="color: #000000">{</span>
                      <br />
                      <span style="color: #000000">        </span>
                      <span style="color: #ff4500">$combinedBytes</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">+=</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #ff4500">$passwordBytes</span>
                      <span style="color: #a9a9a9">[</span>
                      <span style="color: #ff4500">$counter</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">%</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #ff4500">$passwordBytes</span>
                      <span style="color: #a9a9a9">.</span>
                      <span style="color: #000000">Length</span>
                      <span style="color: #a9a9a9">]</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">-bxor</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #ff4500">$cipherBytes2</span>
                      <span style="color: #a9a9a9">[</span>
                      <span style="color: #ff4500">$counter</span>
                      <span style="color: #a9a9a9">]</span>
                      <br />
                      <span style="color: #000000">    </span>
                      <span style="color: #000000">}</span>
                      <br />
                      <span style="color: #000000">    </span>
                      <br />
                      <span style="color: #000000">    </span>
                      <span style="color: #ff4500">$combinedBytes</span>
                      <br />
                      <span style="color: #000000">}</span>
                      <br />
                      <br />
                      <span style="color: #00008b">function</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #8a2be2">Search-DictionaryForWord</span>
                      <span style="color: #000000">(</span>
                      <span style="color: #ff4500">$pattern</span>
                      <span style="color: #a9a9a9">,</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #ff4500">$floating</span>
                      <span style="color: #000000">)</span>
                      <br />
                      <span style="color: #000000">{</span>
                      <br />
                      <span style="color: #000000">    </span>
                      <span style="color: #00008b">if</span>
                      <span style="color: #000000">(</span>
                      <span style="color: #a9a9a9">-not</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #ff4500">$floating</span>
                      <span style="color: #000000">)</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #000000">{</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #ff4500">$pattern</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">=</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #8b0000">"^$pattern`$"</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #000000">}</span>
                      <br />
                      <span style="color: #000000">    </span>
                      <span style="color: #0000ff">Select-String</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #ff4500">$pattern</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #8a2be2">wordlist.txt</span>
                      <br />
                      <span style="color: #000000">}</span>
                      <br />
                      <br />
                      <span style="color: #00008b">function</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #8a2be2">Search-DictionaryForPattern</span>
                      <span style="color: #000000">(</span>
                      <span style="color: #ff4500">$pattern</span>
                      <span style="color: #a9a9a9">,</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #ff4500">$floating</span>
                      <span style="color: #000000">)</span>
                      <br />
                      <span style="color: #000000">{</span>
                      <br />
                      <span style="color: #000000">    </span>
                      <span style="color: #ff4500">$substituted</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">=</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #8b0000">""</span>
                      <br />
                      <span style="color: #000000">    </span>
                      <span style="color: #ff4500">$toFind</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">=</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #8b0000">""</span>
                      <br />
                      <span style="color: #000000">    </span>
                      <br />
                      <span style="color: #000000">    </span>
                      <span style="color: #00008b">if</span>
                      <span style="color: #000000">(</span>
                      <span style="color: #a9a9a9">-not</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #ff4500">$floating</span>
                      <span style="color: #000000">)</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #000000">{</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #ff4500">$toFind</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">+=</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #8b0000">"^"</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #000000">}</span>
                      <br />
                      <span style="color: #000000">    </span>
                      <br />
                      <span style="color: #000000">    </span>
                      <span style="color: #00008b">foreach</span>
                      <span style="color: #000000">(</span>
                      <span style="color: #ff4500">$char</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #00008b">in</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #ff4500">$pattern</span>
                      <span style="color: #a9a9a9">.</span>
                      <span style="color: #000000">ToLower</span>
                      <span style="color: #000000">(</span>
                      <span style="color: #000000">)</span>
                      <span style="color: #a9a9a9">.</span>
                      <span style="color: #000000">ToCharArray</span>
                      <span style="color: #000000">(</span>
                      <span style="color: #000000">)</span>
                      <span style="color: #000000">)</span>
                      <br />
                      <span style="color: #000000">    </span>
                      <span style="color: #000000">{</span>
                      <br />
                      <span style="color: #000000">        </span>
                      <span style="color: #00008b">if</span>
                      <span style="color: #000000">(</span>
                      <span style="color: #ff4500">$char</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">-eq</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #8b0000">"."</span>
                      <span style="color: #000000">)</span>
                      <br />
                      <span style="color: #000000">        </span>
                      <span style="color: #000000">{</span>
                      <br />
                      <span style="color: #000000">            </span>
                      <span style="color: #ff4500">$toFind</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">+=</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #8b0000">"."</span>
                      <br />
                      <span style="color: #000000">            </span>
                      <span style="color: #00008b">continue</span>
                      <br />
                      <span style="color: #000000">        </span>
                      <span style="color: #000000">}</span>
                      <br />
                      <span style="color: #000000">        </span>
                      <br />
                      <span style="color: #000000">        </span>
                      <span style="color: #ff4500">$subIndex</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">=</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #ff4500">$substituted</span>
                      <span style="color: #a9a9a9">.</span>
                      <span style="color: #000000">IndexOf</span>
                      <span style="color: #000000">(</span>
                      <span style="color: #ff4500">$char</span>
                      <span style="color: #000000">)</span>
                      <br />
                      <span style="color: #000000">        </span>
                      <br />
                      <span style="color: #000000">        </span>
                      <span style="color: #00008b">if</span>
                      <span style="color: #000000">(</span>
                      <span style="color: #ff4500">$subIndex</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">-ge</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #800080">0</span>
                      <span style="color: #000000">)</span>
                      <br />
                      <span style="color: #000000">        </span>
                      <span style="color: #000000">{</span>
                      <br />
                      <span style="color: #000000">            </span>
                      <span style="color: #ff4500">$toFind</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">+=</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #8b0000">"\"</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">+</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #000000">(</span>
                      <span style="color: #ff4500">$subIndex</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">+</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #800080">1</span>
                      <span style="color: #000000">)</span>
                      <br />
                      <span style="color: #000000">        </span>
                      <span style="color: #000000">}</span>
                      <br />
                      <span style="color: #000000">        </span>
                      <span style="color: #00008b">else</span>
                      <br />
                      <span style="color: #000000">        </span>
                      <span style="color: #000000">{</span>
                      <br />
                      <span style="color: #000000">            </span>
                      <span style="color: #00008b">if</span>
                      <span style="color: #000000">(</span>
                      <span style="color: #a9a9a9">-not</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #ff4500">$substituted</span>
                      <span style="color: #000000">)</span>
                      <br />
                      <span style="color: #000000">            </span>
                      <span style="color: #000000">{</span>
                      <br />
                      <span style="color: #000000">                </span>
                      <span style="color: #ff4500">$toFind</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">+=</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #8b0000">"(.)"</span>
                      <br />
                      <span style="color: #000000">            </span>
                      <span style="color: #000000">}</span>
                      <br />
                      <span style="color: #000000">            </span>
                      <span style="color: #00008b">else</span>
                      <br />
                      <span style="color: #000000">            </span>
                      <span style="color: #000000">{</span>
                      <br />
                      <span style="color: #000000">                </span>
                      <span style="color: #ff4500">$toFind</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">+=</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #8b0000">"([^$substituted])"</span>
                      <br />
                      <span style="color: #000000">            </span>
                      <span style="color: #000000">}</span>
                      <br />
                      <span style="color: #000000">            </span>
                      <span style="color: #ff4500">$substituted</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">+=</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #ff4500">$char</span>
                      <br />
                      <span style="color: #000000">        </span>
                      <span style="color: #000000">}</span>
                      <br />
                      <span style="color: #000000">    </span>
                      <span style="color: #000000">}</span>
                      <br />
                      <span style="color: #000000">    </span>
                      <br />
                      <span style="color: #000000">    </span>
                      <span style="color: #00008b">if</span>
                      <span style="color: #000000">(</span>
                      <span style="color: #a9a9a9">-not</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #ff4500">$floating</span>
                      <span style="color: #000000">)</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #000000">{</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #ff4500">$toFind</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">+=</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #8b0000">'$'</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #000000">}</span>
                      <br />
                      <span style="color: #000000">    </span>
                      <span style="color: #0000ff">Write-Verbose</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #ff4500">$toFind</span>
                      <br />
                      <span style="color: #000000">    </span>
                      <span style="color: #0000ff">Select-String</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #ff4500">$toFind</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #8a2be2">wordlist.txt</span>
                      <br />
                      <span style="color: #000000">}</span>
                      <br />
                      <br />
                      <br />
                      <span style="color: #00008b">function</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #8a2be2">Measure-LetterFrequency</span>
                      <span style="color: #000000">(</span>
                      <span style="color: #ff4500">$cipherText</span>
                      <span style="color: #000000">)</span>
                      <br />
                      <span style="color: #000000">{</span>
                      <br />
                      <span style="color: #000000">    </span>
                      <span style="color: #ff4500">$frequentLetters</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">=</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #8b0000">"
etnoriasfindhdlcumwfgypbvkjxqz"</span>
                      <br />
                      <br />
                      <span style="color: #000000">    </span>
                      <span style="color: #8b0000">"`nLetter
Frequencies:`n"</span>
                      <br />
                      <span style="color: #000000">    </span>
                      <span style="color: #ff4500">$groups</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">=</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #008080">[char[]]</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #ff4500">$cipherText</span>
                      <span style="color: #a9a9a9">.</span>
                      <span style="color: #000000">ToLower</span>
                      <span style="color: #000000">(</span>
                      <span style="color: #000000">)</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">|</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #0000ff">group</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">|</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #0000ff">Sort</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #000080">-Desc</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #8a2be2">Count</span>
                      <br />
                      <br />
                      <span style="color: #000000">    </span>
                      <span style="color: #ff4500">$groupNumber</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">=</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #800080">0</span>
                      <br />
                      <span style="color: #000000">    </span>
                      <span style="color: #000000">$(</span>
                      <span style="color: #00008b">foreach</span>
                      <span style="color: #000000">(</span>
                      <span style="color: #ff4500">$group</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #00008b">in</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #ff4500">$groups</span>
                      <span style="color: #000000">)</span>
                      <br />
                      <span style="color: #000000">    </span>
                      <span style="color: #000000">{</span>
                      <br />
                      <span style="color: #000000">        </span>
                      <span style="color: #ff4500">$group</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">|</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #0000ff">Select</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #8a2be2">Name</span>
                      <span style="color: #a9a9a9">,</span>
                      <br />
                      <span style="color: #000000">            </span>
                      <span style="color: #000000">@{</span>
                      <br />
                      <span style="color: #000000">                </span>
                      <span style="color: #000000">Name</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">=</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #8b0000">"Replacement"</span>
                      <span style="color: #000000">;</span>
                      <br />
                      <span style="color: #000000">                </span>
                      <span style="color: #000000">Expression</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">=</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #000000">{</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #ff4500">$frequentLetters</span>
                      <span style="color: #a9a9a9">[</span>
                      <span style="color: #ff4500">$groupNumber</span>
                      <span style="color: #a9a9a9">]</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #000000">}</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #000000">}</span>
                      <span style="color: #a9a9a9">,</span>
                      <br />
                      <span style="color: #000000">            </span>
                      <span style="color: #8a2be2">Count</span>
                      <span style="color: #a9a9a9">,</span>
                      <br />
                      <span style="color: #000000">            </span>
                      <span style="color: #000000">@{</span>
                      <br />
                      <span style="color: #000000">                </span>
                      <span style="color: #000000">Name</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">=</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #8b0000">"Percent"</span>
                      <span style="color: #000000">;</span>
                      <br />
                      <span style="color: #000000">                </span>
                      <span style="color: #000000">Expression</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">=</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #000000">{</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #8b0000">"{0:..%}"</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">-f</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #000000">(</span>
                      <span style="color: #ff4500">$_</span>
                      <span style="color: #a9a9a9">.</span>
                      <span style="color: #000000">Count</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">/</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #ff4500">$cipherText</span>
                      <span style="color: #a9a9a9">.</span>
                      <span style="color: #000000">Length</span>
                      <span style="color: #000000">)</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #000000">}</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #000000">}</span>
                      <br />
                      <span style="color: #000000">        </span>
                      <span style="color: #ff4500">$groupNumber</span>
                      <span style="color: #a9a9a9">++</span>
                      <span style="color: #000000">   </span>
                      <br />
                      <span style="color: #000000">    </span>
                      <span style="color: #000000">}</span>
                      <span style="color: #000000">)</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">|</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #0000ff">ft</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #000080">-auto</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">|</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #0000ff">out-string</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">|</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #0000ff">%</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #000000">{</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #ff4500">$_</span>
                      <span style="color: #a9a9a9">.</span>
                      <span style="color: #000000">Trim</span>
                      <span style="color: #000000">(</span>
                      <span style="color: #000000">)</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #000000">}</span>
                      <br />
                      <span style="color: #000000">}</span>
                      <br />
                      <br />
                      <span style="color: #00008b">function</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #8a2be2">Measure-BigraphFrequency</span>
                      <span style="color: #000000">(</span>
                      <span style="color: #ff4500">$cipherText</span>
                      <span style="color: #000000">)</span>
                      <br />
                      <span style="color: #000000">{</span>
                      <br />
                      <span style="color: #000000">    </span>
                      <span style="color: #ff4500">$frequentBigraphs</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">=</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #8b0000">"th"</span>
                      <span style="color: #a9a9a9">,</span>
                      <span style="color: #8b0000">"he"</span>
                      <span style="color: #a9a9a9">,</span>
                      <span style="color: #8b0000">"an"</span>
                      <span style="color: #a9a9a9">,</span>
                      <span style="color: #8b0000">"in"</span>
                      <span style="color: #a9a9a9">,</span>
                      <span style="color: #8b0000">"er"</span>
                      <span style="color: #a9a9a9">,</span>
                      <span style="color: #8b0000">"on"</span>
                      <span style="color: #a9a9a9">,</span>
                      <span style="color: #8b0000">"re"</span>
                      <span style="color: #a9a9a9">,</span>
                      <br />
                      <span style="color: #000000">        </span>
                      <span style="color: #8b0000">"ed"</span>
                      <span style="color: #a9a9a9">,</span>
                      <span style="color: #8b0000">"nd"</span>
                      <span style="color: #a9a9a9">,</span>
                      <span style="color: #8b0000">"ha"</span>
                      <span style="color: #a9a9a9">,</span>
                      <span style="color: #8b0000">"at"</span>
                      <span style="color: #a9a9a9">,</span>
                      <span style="color: #8b0000">"en"</span>
                      <span style="color: #a9a9a9">,</span>
                      <span style="color: #8b0000">"es"</span>
                      <span style="color: #a9a9a9">,</span>
                      <span style="color: #8b0000">"of"</span>
                      <span style="color: #a9a9a9">,</span>
                      <span style="color: #8b0000">"nt"</span>
                      <span style="color: #a9a9a9">,</span>
                      <span style="color: #8b0000">"ea"</span>
                      <span style="color: #a9a9a9">,</span>
                      <span style="color: #8b0000">"ti"</span>
                      <span style="color: #a9a9a9">,</span>
                      <br />
                      <span style="color: #000000">        </span>
                      <span style="color: #8b0000">"to"</span>
                      <span style="color: #a9a9a9">,</span>
                      <span style="color: #8b0000">"io"</span>
                      <span style="color: #a9a9a9">,</span>
                      <span style="color: #8b0000">"le"</span>
                      <span style="color: #a9a9a9">,</span>
                      <span style="color: #8b0000">"is"</span>
                      <span style="color: #a9a9a9">,</span>
                      <span style="color: #8b0000">"ou"</span>
                      <span style="color: #a9a9a9">,</span>
                      <span style="color: #8b0000">"ar"</span>
                      <span style="color: #a9a9a9">,</span>
                      <span style="color: #8b0000">"as"</span>
                      <span style="color: #a9a9a9">,</span>
                      <span style="color: #8b0000">"de"</span>
                      <span style="color: #a9a9a9">,</span>
                      <span style="color: #8b0000">"rt"</span>
                      <span style="color: #a9a9a9">,</span>
                      <span style="color: #8b0000">"ve"</span>
                      <br />
                      <span style="color: #000000">        </span>
                      <br />
                      <span style="color: #000000">    </span>
                      <span style="color: #ff4500">$cipherText</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">=</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #ff4500">$cipherText</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">-replace</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #8b0000">"
"</span>
                      <span style="color: #a9a9a9">,</span>
                      <span style="color: #8b0000">""</span>
                      <br />
                      <span style="color: #000000">    </span>
                      <span style="color: #ff4500">$cipherText</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">=</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #ff4500">$cipherText</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">-replace</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #8b0000">"\W"</span>
                      <span style="color: #a9a9a9">,</span>
                      <span style="color: #8b0000">""</span>
                      <br />
                      <br />
                      <span style="color: #000000">    </span>
                      <span style="color: #8b0000">"`nBigraph
Frequencies:`n"</span>
                      <br />
                      <span style="color: #000000">    </span>
                      <span style="color: #ff4500">$groups</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">=</span>
                      <span style="color: #000000"> </span>
                      <br />
                      <span style="color: #000000">        </span>
                      <span style="color: #000000">@(</span>
                      <span style="color: #000000">(</span>
                      <span style="color: #ff4500">$cipherText</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">-split</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #8b0000">'(..)'</span>
                      <span style="color: #000000">)</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">+</span>
                      <br />
                      <span style="color: #000000">          </span>
                      <span style="color: #000000">(</span>
                      <span style="color: #ff4500">$cipherText</span>
                      <span style="color: #a9a9a9">.</span>
                      <span style="color: #000000">Remove</span>
                      <span style="color: #000000">(</span>
                      <span style="color: #800080">0</span>
                      <span style="color: #a9a9a9">,</span>
                      <span style="color: #800080">1</span>
                      <span style="color: #000000">)</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">-split</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #8b0000">'(..)'</span>
                      <span style="color: #000000">)</span>
                      <span style="color: #000000">)</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">|</span>
                      <br />
                      <span style="color: #000000">          </span>
                      <span style="color: #0000ff">?</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #000000">{</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #ff4500">$_</span>
                      <span style="color: #a9a9a9">.</span>
                      <span style="color: #000000">Trim</span>
                      <span style="color: #000000">(</span>
                      <span style="color: #000000">)</span>
                      <span style="color: #a9a9a9">.</span>
                      <span style="color: #000000">Length</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">-eq</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #800080">2</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #000000">}</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">|</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #0000ff">group</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">|</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #0000ff">Sort</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #000080">-Desc</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #8a2be2">Count</span>
                      <br />
                      <br />
                      <span style="color: #000000">    </span>
                      <span style="color: #ff4500">$groupNumber</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">=</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #800080">0</span>
                      <br />
                      <span style="color: #000000">    </span>
                      <span style="color: #000000">$(</span>
                      <span style="color: #00008b">foreach</span>
                      <span style="color: #000000">(</span>
                      <span style="color: #ff4500">$group</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #00008b">in</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #ff4500">$groups</span>
                      <span style="color: #000000">)</span>
                      <br />
                      <span style="color: #000000">    </span>
                      <span style="color: #000000">{</span>
                      <br />
                      <span style="color: #000000">        </span>
                      <span style="color: #ff4500">$group</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">|</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #0000ff">Select</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #8a2be2">Name</span>
                      <span style="color: #a9a9a9">,</span>
                      <br />
                      <span style="color: #000000">            </span>
                      <span style="color: #000000">@{</span>
                      <br />
                      <span style="color: #000000">                </span>
                      <span style="color: #000000">Name</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">=</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #8b0000">"Replacement"</span>
                      <span style="color: #000000">;</span>
                      <br />
                      <span style="color: #000000">                </span>
                      <span style="color: #000000">Expression</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">=</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #000000">{</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #ff4500">$frequentBigraphs</span>
                      <span style="color: #a9a9a9">[</span>
                      <span style="color: #ff4500">$groupNumber</span>
                      <span style="color: #a9a9a9">]</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #000000">}</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #000000">}</span>
                      <span style="color: #a9a9a9">,</span>
                      <br />
                      <span style="color: #000000">            </span>
                      <span style="color: #8a2be2">Count</span>
                      <br />
                      <span style="color: #000000">        </span>
                      <span style="color: #ff4500">$groupNumber</span>
                      <span style="color: #a9a9a9">++</span>
                      <span style="color: #000000">   </span>
                      <br />
                      <span style="color: #000000">    </span>
                      <span style="color: #000000">}</span>
                      <span style="color: #000000">)</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">|</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #0000ff">ft</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #000080">-auto</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">|</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #0000ff">out-string</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">|</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #0000ff">%</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #000000">{</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #ff4500">$_</span>
                      <span style="color: #a9a9a9">.</span>
                      <span style="color: #000000">Trim</span>
                      <span style="color: #000000">(</span>
                      <span style="color: #000000">)</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #000000">}</span>
                      <br />
                      <span style="color: #000000">}</span>
                      <br />
                      <br />
                      <span style="color: #00008b">function</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #8a2be2">Measure-DoubleLetterFrequency</span>
                      <span style="color: #000000">(</span>
                      <span style="color: #ff4500">$cipherText</span>
                      <span style="color: #000000">)</span>
                      <br />
                      <span style="color: #000000">{</span>
                      <br />
                      <span style="color: #000000">    </span>
                      <span style="color: #ff4500">$frequentDoubles</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">=</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #8b0000">"ss"</span>
                      <span style="color: #a9a9a9">,</span>
                      <span style="color: #8b0000">"ee"</span>
                      <span style="color: #a9a9a9">,</span>
                      <span style="color: #8b0000">"tt"</span>
                      <span style="color: #a9a9a9">,</span>
                      <span style="color: #8b0000">"ff"</span>
                      <span style="color: #a9a9a9">,</span>
                      <span style="color: #8b0000">"ll"</span>
                      <span style="color: #a9a9a9">,</span>
                      <span style="color: #8b0000">"mm"</span>
                      <span style="color: #a9a9a9">,</span>
                      <span style="color: #8b0000">"oo"</span>
                      <br />
                      <span style="color: #000000">        </span>
                      <br />
                      <span style="color: #000000">    </span>
                      <span style="color: #8b0000">"`nDouble
Frequencies:`n"</span>
                      <br />
                      <span style="color: #000000">    </span>
                      <span style="color: #ff4500">$groups</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">=</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #008080">[Regex]</span>
                      <span style="color: #a9a9a9">::</span>
                      <span style="color: #000000">Matches</span>
                      <span style="color: #000000">(</span>
                      <span style="color: #ff4500">$cipherText</span>
                      <span style="color: #a9a9a9">,</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #8b0000">'(.)\1'</span>
                      <span style="color: #000000">)</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">|</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #0000ff">%</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #000000">{</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #ff4500">$_</span>
                      <span style="color: #a9a9a9">.</span>
                      <span style="color: #000000">Value</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #000000">}</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">|</span>
                      <br />
                      <span style="color: #000000">        </span>
                      <span style="color: #0000ff">group</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">|</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #0000ff">Sort</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #000080">-Desc</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #8a2be2">Count</span>
                      <br />
                      <br />
                      <span style="color: #000000">    </span>
                      <span style="color: #ff4500">$groupNumber</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">=</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #800080">0</span>
                      <br />
                      <span style="color: #000000">    </span>
                      <span style="color: #000000">$(</span>
                      <span style="color: #00008b">foreach</span>
                      <span style="color: #000000">(</span>
                      <span style="color: #ff4500">$group</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #00008b">in</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #ff4500">$groups</span>
                      <span style="color: #000000">)</span>
                      <br />
                      <span style="color: #000000">    </span>
                      <span style="color: #000000">{</span>
                      <br />
                      <span style="color: #000000">        </span>
                      <span style="color: #ff4500">$group</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">|</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #0000ff">Select</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #8a2be2">Name</span>
                      <span style="color: #a9a9a9">,</span>
                      <br />
                      <span style="color: #000000">            </span>
                      <span style="color: #000000">@{</span>
                      <br />
                      <span style="color: #000000">                </span>
                      <span style="color: #000000">Name</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">=</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #8b0000">"Replacement"</span>
                      <span style="color: #000000">;</span>
                      <br />
                      <span style="color: #000000">                </span>
                      <span style="color: #000000">Expression</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">=</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #000000">{</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #ff4500">$frequentDoubles</span>
                      <span style="color: #a9a9a9">[</span>
                      <span style="color: #ff4500">$groupNumber</span>
                      <span style="color: #a9a9a9">]</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #000000">}</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #000000">}</span>
                      <span style="color: #a9a9a9">,</span>
                      <br />
                      <span style="color: #000000">            </span>
                      <span style="color: #8a2be2">Count</span>
                      <br />
                      <span style="color: #000000">        </span>
                      <span style="color: #ff4500">$groupNumber</span>
                      <span style="color: #a9a9a9">++</span>
                      <span style="color: #000000">   </span>
                      <br />
                      <span style="color: #000000">    </span>
                      <span style="color: #000000">}</span>
                      <span style="color: #000000">)</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">|</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #0000ff">ft</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #000080">-auto</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">|</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #0000ff">out-string</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">|</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #0000ff">%</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #000000">{</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #ff4500">$_</span>
                      <span style="color: #a9a9a9">.</span>
                      <span style="color: #000000">Trim</span>
                      <span style="color: #000000">(</span>
                      <span style="color: #000000">)</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #000000">}</span>
                      <br />
                      <span style="color: #000000">    </span>
                      <br />
                      <span style="color: #000000">    </span>
                      <span style="color: #8b0000">"`nOther
groups:"</span>
                      <br />
                      <span style="color: #000000">    </span>
                      <span style="color: #8b0000">"$($frequentDoubles[$groupNumber..($frequentDoubles.Length
- 1)])"</span>
                      <br />
                      <span style="color: #000000">}</span>
                      <br />
                      <br />
                      <span style="color: #00008b">function</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #8a2be2">Measure-InitialFrequency</span>
                      <span style="color: #000000">(</span>
                      <span style="color: #ff4500">$cipherText</span>
                      <span style="color: #000000">)</span>
                      <br />
                      <span style="color: #000000">{</span>
                      <br />
                      <span style="color: #000000">    </span>
                      <span style="color: #ff4500">$frequentInitialLetters</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">=</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #8b0000">"toawbcdsfmrhiyeglnoujk"</span>
                      <br />
                      <br />
                      <span style="color: #000000">    </span>
                      <span style="color: #8b0000">"`nInitial
letters:`n"</span>
                      <br />
                      <span style="color: #000000">    </span>
                      <span style="color: #ff4500">$groups</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">=</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">-split</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #ff4500">$cipherText</span>
                      <span style="color: #a9a9a9">.</span>
                      <span style="color: #000000">ToLower</span>
                      <span style="color: #000000">(</span>
                      <span style="color: #000000">)</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">|</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #0000ff">%</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #000000">{</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #000000">(</span>
                      <span style="color: #008080">[char[]]</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #ff4500">$_</span>
                      <span style="color: #000000">)</span>
                      <span style="color: #a9a9a9">[</span>
                      <span style="color: #800080">0</span>
                      <span style="color: #a9a9a9">]</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #000000">}</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">|</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #0000ff">group</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">|</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #0000ff">Sort</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #000080">-Desc</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #8a2be2">Count</span>
                      <br />
                      <br />
                      <span style="color: #000000">    </span>
                      <span style="color: #ff4500">$groupNumber</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">=</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #800080">0</span>
                      <br />
                      <span style="color: #000000">    </span>
                      <span style="color: #000000">$(</span>
                      <span style="color: #00008b">foreach</span>
                      <span style="color: #000000">(</span>
                      <span style="color: #ff4500">$group</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #00008b">in</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #ff4500">$groups</span>
                      <span style="color: #000000">)</span>
                      <br />
                      <span style="color: #000000">    </span>
                      <span style="color: #000000">{</span>
                      <br />
                      <span style="color: #000000">        </span>
                      <span style="color: #ff4500">$group</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">|</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #0000ff">Select</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #8a2be2">Name</span>
                      <span style="color: #a9a9a9">,</span>
                      <br />
                      <span style="color: #000000">            </span>
                      <span style="color: #000000">@{</span>
                      <br />
                      <span style="color: #000000">                </span>
                      <span style="color: #000000">Name</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">=</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #8b0000">"Replacement"</span>
                      <span style="color: #000000">;</span>
                      <br />
                      <span style="color: #000000">                </span>
                      <span style="color: #000000">Expression</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">=</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #000000">{</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #ff4500">$frequentInitialLetters</span>
                      <span style="color: #a9a9a9">[</span>
                      <span style="color: #ff4500">$groupNumber</span>
                      <span style="color: #a9a9a9">]</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #000000">}</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #000000">}</span>
                      <span style="color: #a9a9a9">,</span>
                      <br />
                      <span style="color: #000000">            </span>
                      <span style="color: #8a2be2">Count</span>
                      <span style="color: #a9a9a9">,</span>
                      <br />
                      <span style="color: #000000">            </span>
                      <span style="color: #000000">@{</span>
                      <br />
                      <span style="color: #000000">                </span>
                      <span style="color: #000000">Name</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">=</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #8b0000">"Percent"</span>
                      <span style="color: #000000">;</span>
                      <br />
                      <span style="color: #000000">                </span>
                      <span style="color: #000000">Expression</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">=</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #000000">{</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #8b0000">"{0:..%}"</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">-f</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #000000">(</span>
                      <span style="color: #ff4500">$_</span>
                      <span style="color: #a9a9a9">.</span>
                      <span style="color: #000000">Count</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">/</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #ff4500">$groups</span>
                      <span style="color: #a9a9a9">.</span>
                      <span style="color: #000000">Count</span>
                      <span style="color: #000000">)</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #000000">}</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #000000">}</span>
                      <br />
                      <span style="color: #000000">        </span>
                      <span style="color: #ff4500">$groupNumber</span>
                      <span style="color: #a9a9a9">++</span>
                      <span style="color: #000000">   </span>
                      <br />
                      <span style="color: #000000">    </span>
                      <span style="color: #000000">}</span>
                      <span style="color: #000000">)</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">|</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #0000ff">ft</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #000080">-auto</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">|</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #0000ff">out-string</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">|</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #0000ff">%</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #000000">{</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #ff4500">$_</span>
                      <span style="color: #a9a9a9">.</span>
                      <span style="color: #000000">Trim</span>
                      <span style="color: #000000">(</span>
                      <span style="color: #000000">)</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #000000">}</span>
                      <br />
                      <span style="color: #000000">}</span>
                      <br />
                      <br />
                      <span style="color: #00008b">function</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #8a2be2">combo</span>
                      <span style="color: #000000">(</span>
                      <span style="color: #ff4500">$string</span>
                      <span style="color: #000000">)</span>
                      <br />
                      <span style="color: #000000">{</span>
                      <br />
                      <span style="color: #000000">    </span>
                      <span style="color: #00008b">if</span>
                      <span style="color: #000000">(</span>
                      <span style="color: #ff4500">$string</span>
                      <span style="color: #a9a9a9">.</span>
                      <span style="color: #000000">Length</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">-eq</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #800080">2</span>
                      <span style="color: #000000">)</span>
                      <br />
                      <span style="color: #000000">    </span>
                      <span style="color: #000000">{</span>
                      <br />
                      <span style="color: #000000">        </span>
                      <span style="color: #ff4500">$string</span>
                      <br />
                      <span style="color: #000000">        </span>
                      <span style="color: #ff4500">$string</span>
                      <span style="color: #a9a9a9">[</span>
                      <span style="color: #800080">-1</span>
                      <span style="color: #a9a9a9">]</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">+</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #ff4500">$string</span>
                      <span style="color: #a9a9a9">[</span>
                      <span style="color: #800080">0</span>
                      <span style="color: #a9a9a9">]</span>
                      <br />
                      <span style="color: #000000">    </span>
                      <span style="color: #000000">}</span>
                      <br />
                      <span style="color: #000000">    </span>
                      <span style="color: #00008b">else</span>
                      <br />
                      <span style="color: #000000">    </span>
                      <span style="color: #000000">{</span>
                      <br />
                      <span style="color: #000000">        </span>
                      <span style="color: #00008b">foreach</span>
                      <span style="color: #000000">(</span>
                      <span style="color: #ff4500">$element</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #00008b">in</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #ff4500">$string</span>
                      <span style="color: #a9a9a9">.</span>
                      <span style="color: #000000">ToCharArray</span>
                      <span style="color: #000000">(</span>
                      <span style="color: #000000">)</span>
                      <span style="color: #000000">)</span>
                      <br />
                      <span style="color: #000000">        </span>
                      <span style="color: #000000">{</span>
                      <br />
                      <span style="color: #000000">            </span>
                      <span style="color: #0000ff">combo</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #000000">(</span>
                      <span style="color: #ff4500">$string</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">-replace</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #ff4500">$element</span>
                      <span style="color: #a9a9a9">,</span>
                      <span style="color: #8b0000">''</span>
                      <span style="color: #000000">)</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">|</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #0000ff">foreach</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #000000">{</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #ff4500">$element</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">+</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #ff4500">$_</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #000000">}</span>
                      <br />
                      <span style="color: #000000">            </span>
                      <span style="color: #0000ff">combo</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #000000">(</span>
                      <span style="color: #ff4500">$string</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">-replace</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #ff4500">$element</span>
                      <span style="color: #a9a9a9">,</span>
                      <span style="color: #8b0000">''</span>
                      <span style="color: #000000">)</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">|</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #0000ff">foreach</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #000000">{</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #ff4500">$_</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #000000">}</span>
                      <br />
                      <span style="color: #000000">        </span>
                      <span style="color: #000000">}</span>
                      <br />
                      <span style="color: #000000">    </span>
                      <span style="color: #000000">}</span>
                      <br />
                      <span style="color: #000000">    </span>
                      <br />
                      <span style="color: #000000">}</span>
                      <br />
                    </div>
                  </td>
                </tr>
              </tbody>
            </table>
          </div>
        </blockquote>
        <img width="0" height="0" src="http://www.leeholmes.com/blog/aggbug.ashx?id=7be38aa2-cf9f-4b19-b9e9-04e7357e496d" />
      </body>
      <title>PowerShell Cryptography Library</title>
      <guid isPermaLink="false">http://www.leeholmes.com/blog/PermaLink,guid,7be38aa2-cf9f-4b19-b9e9-04e7357e496d.aspx</guid>
      <link>http://www.leeholmes.com/blog/PowerShellCryptographyLibrary.aspx</link>
      <pubDate>Mon, 19 Oct 2009 20:28:22 GMT</pubDate>
      <description>&lt;p&gt;
When playing with cryptography challenges (don’t we all?,) you end up leaning on a
bunch of common tasks. For example, substituting all text in a string with a set of
replacements (substitution ciphers,) XORing strings together, applying dictionary-based
algorithms, investigating word frequency, and more.
&lt;/p&gt;
&lt;p&gt;
PowerShell lends itself really well to these challenges, and I’ve developed a small
cryptography library along the way. Here it is. Your job, as a cryptographer, is to
uncover the hidden comments :) (Hint: don’t spend very long. Some problems are unbreakable.)
&lt;/p&gt;
&lt;p&gt;
For example, here’s the script I used (interactively) to solve an “XOR Cipher” at &lt;a title="http://cryptolib.com/challenges.php" href="http://cryptolib.com/challenges.php"&gt;http://cryptolib.com/challenges.php&lt;/a&gt;.
&lt;/p&gt;
&lt;blockquote&gt; 
&lt;div style="border-bottom: black 1px solid; border-left: black 1px solid; padding-bottom: 5px; padding-left: 5px; width: 650px; padding-right: 5px; font-family: consolas,lucida console; font-size: 10pt; overflow: auto; border-top: black 1px solid; border-right: black 1px solid; padding-top: 5px"&gt;
&lt;table border="0" cellspacing="0" cellpadding="5"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td valign="top"&gt;
&lt;div style="padding-bottom: 5px; padding-left: 5px; padding-right: 5px; font-family: consolas,lucida console; background: #cecece; font-size: 10pt; padding-top: 5px"&gt;001 
&lt;br /&gt;
002 
&lt;br /&gt;
003 
&lt;br /&gt;
004 
&lt;br /&gt;
005 
&lt;br /&gt;
006 
&lt;br /&gt;
007 
&lt;br /&gt;
008 
&lt;br /&gt;
009 
&lt;br /&gt;
010 
&lt;br /&gt;
011 
&lt;br /&gt;
012 
&lt;br /&gt;
013 
&lt;br /&gt;
014 
&lt;br /&gt;
015 
&lt;br /&gt;
016 
&lt;br /&gt;
017 
&lt;br /&gt;
018 
&lt;br /&gt;
019 
&lt;br /&gt;
020 
&lt;br /&gt;
021 
&lt;br /&gt;
022 
&lt;br /&gt;
023 
&lt;br /&gt;
024 
&lt;br /&gt;
025 
&lt;br /&gt;
026 
&lt;br /&gt;
027 
&lt;br /&gt;
028 
&lt;br /&gt;
029 
&lt;br /&gt;
030 
&lt;br /&gt;
031 
&lt;br /&gt;
032 
&lt;br /&gt;
033 
&lt;br /&gt;
034 
&lt;br /&gt;
035 
&lt;br /&gt;
036 
&lt;br /&gt;
037 
&lt;br /&gt;
038 
&lt;br /&gt;
039 
&lt;br /&gt;
040 
&lt;br /&gt;
041 
&lt;br /&gt;
042 
&lt;br /&gt;
043 
&lt;br /&gt;
044 
&lt;br /&gt;
045 
&lt;br /&gt;
046 
&lt;br /&gt;
047 
&lt;br /&gt;
048 
&lt;br /&gt;
049 
&lt;br /&gt;
050 
&lt;br /&gt;
051 
&lt;br /&gt;
052 
&lt;br /&gt;
053 
&lt;br /&gt;
054 
&lt;br /&gt;
055 
&lt;br /&gt;
056 
&lt;br /&gt;
057 
&lt;br /&gt;
058 
&lt;br /&gt;
059 
&lt;br /&gt;
060 
&lt;br /&gt;
061 
&lt;br /&gt;
062 
&lt;br /&gt;
063 
&lt;br /&gt;
064 
&lt;br /&gt;
065 
&lt;br /&gt;
066 
&lt;br /&gt;
067 
&lt;br /&gt;
068 
&lt;br /&gt;
069 
&lt;br /&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;td valign="top" nowrap="nowrap"&gt;
&lt;div style="padding-bottom: 5px; padding-left: 5px; padding-right: 5px; font-family: consolas,lucida console; background: #fcfcfc; font-size: 10pt; padding-top: 5px"&gt;&lt;span style="color: #ff4500"&gt;$cipherHex1&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #8b0000"&gt;@&amp;quot; 
&lt;br /&gt;
3526532A122A183D4D0E4A2E3713101954013E2B3E2246235728 
&lt;br /&gt;
573553064832781F164A481F2A2B396350341E2B5E3A5E1C4861 
&lt;br /&gt;
301C11544F1D22363863413F192A4A36520A0D2D2D13044A001A 
&lt;br /&gt;
252025335E2F142F5A355A 
&lt;br /&gt;
&amp;quot;@&lt;/span&gt; 
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: #ff4500"&gt;$cipherHex2&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #8b0000"&gt;@&amp;quot; 
&lt;br /&gt;
32335734163A5136510E41612818114A4912252C2722462F1820 
&lt;br /&gt;
4B7956014E283C180D4D001522312724573416225C794C074C2C 
&lt;br /&gt;
3D0E435A4F063B29383012251B214C315A1C41283618435E5212 
&lt;br /&gt;
2531342D556612205B2B461F592837131019481225212F225B2A 
&lt;br /&gt;
&amp;quot;@&lt;/span&gt; 
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: #ff4500"&gt;$words&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;@{&lt;/span&gt;&lt;span style="color: #000000"&gt;}&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #0000ff"&gt;Get-Content&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #8a2be2"&gt;dictfull.txt&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;|&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;%&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;{&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$words&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;[&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$_&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;]&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$true&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;}&lt;/span&gt; 
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: #006400"&gt;## Turn the cipher text into a single string&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #ff4500"&gt;$cipherText1&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$cipherHex1&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;-replace&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #8b0000"&gt;&amp;quot;`r`n&amp;quot;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;,&lt;/span&gt;&lt;span style="color: #8b0000"&gt;&amp;quot;&amp;quot;&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #ff4500"&gt;$cipherText2&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$cipherHex2&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;-replace&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #8b0000"&gt;&amp;quot;`r`n&amp;quot;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;,&lt;/span&gt;&lt;span style="color: #8b0000"&gt;&amp;quot;&amp;quot;&lt;/span&gt; 
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: #006400"&gt;## Convert hex to decimal&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #ff4500"&gt;$cipherBytes1&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$cipherText1&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;-split&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #8b0000"&gt;'(..)'&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;|&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;?&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;{&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$_&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;}&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;|&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;%&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;{&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #008080"&gt;[Convert]&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;::&lt;/span&gt;&lt;span style="color: #000000"&gt;ToInt32&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$_&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;,&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #800080"&gt;16&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;}&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #ff4500"&gt;$cipherBytes2&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$cipherText2&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;-split&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #8b0000"&gt;&amp;quot;(..)&amp;quot;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;|&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;?&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;{&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$_&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;}&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;|&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;%&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;{&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #008080"&gt;[Convert]&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;::&lt;/span&gt;&lt;span style="color: #000000"&gt;ToInt32&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$_&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;,&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #800080"&gt;16&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;}&lt;/span&gt; 
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: #006400"&gt;## Drop the key by XORing the two cipher texts together&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #ff4500"&gt;$plainTextCombined&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;XORBytes&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$cipherBytes1&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;[&lt;/span&gt;&lt;span style="color: #800080"&gt;0&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;..&lt;/span&gt;&lt;span style="color: #800080"&gt;19&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;]&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$cipherBytes2&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;[&lt;/span&gt;&lt;span style="color: #800080"&gt;0&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;..&lt;/span&gt;&lt;span style="color: #800080"&gt;19&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;]&lt;/span&gt; 
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: #006400"&gt;## Initialize the key&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #ff4500"&gt;$key&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;,&lt;/span&gt;&lt;span style="color: #800080"&gt;0x20&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;*&lt;/span&gt;&lt;span style="color: #800080"&gt;20&lt;/span&gt; 
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: #006400"&gt;## First break comes by scanning through the entire dictionary,
guessing the&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #006400"&gt;## first word of one plaintext, then seeing if that corresponds
to a key that makes&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #006400"&gt;## the second plaintext look reasonable&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #ff4500"&gt;$output&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;$(&lt;/span&gt;&lt;span style="color: #00008b"&gt;foreach&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$word&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #00008b"&gt;in&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$words&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;.&lt;/span&gt;&lt;span style="color: #000000"&gt;GetEnumerator&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;|&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;%&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;{&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$_&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;.&lt;/span&gt;&lt;span style="color: #000000"&gt;Key&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;}&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;{&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #ff4500"&gt;$testString&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;XORBytes&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$plainTextCombined&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;[&lt;/span&gt;&lt;span style="color: #800080"&gt;0&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;..&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$word&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;.&lt;/span&gt;&lt;span style="color: #000000"&gt;Length&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;-&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #800080"&gt;1&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;]&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$word&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;.&lt;/span&gt;&lt;span style="color: #000000"&gt;ToCharArray&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;-join&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #008080"&gt;[char[]]&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$testString&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;+&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #8b0000"&gt;&amp;quot;
: $word&amp;quot;&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;}&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;)&lt;/span&gt; 
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: #006400"&gt;## Output the list to a file, then clean the file to
include only alpha-numeric&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #006400"&gt;## characters.&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #ff4500"&gt;$output&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #8a2be2"&gt;first_word.txt&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #ff4500"&gt;$alphaOnly&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;gc&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #8a2be2"&gt;first_word.txt&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;|&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;select-string&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #8b0000"&gt;'^[a-zA-Z
]+ : .*$'&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #ff4500"&gt;$alphaOnly&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #8a2be2"&gt;first_word_alpha.txt&lt;/span&gt; 
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: #006400"&gt;## The first break comes from seeing that &amp;quot;healed
dr&amp;quot; corresponds to &amp;quot;operation&amp;quot;.&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #006400"&gt;## Make a guess of that as the first 9 elements of the
key.&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #ff4500"&gt;$key&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;[&lt;/span&gt;&lt;span style="color: #800080"&gt;0&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;]&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;,&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$key&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;[&lt;/span&gt;&lt;span style="color: #800080"&gt;1&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;]&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;,&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$key&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;[&lt;/span&gt;&lt;span style="color: #800080"&gt;2&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;]&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;,&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$key&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;[&lt;/span&gt;&lt;span style="color: #800080"&gt;3&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;]&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;,&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$key&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;[&lt;/span&gt;&lt;span style="color: #800080"&gt;4&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;]&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;,&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$key&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;[&lt;/span&gt;&lt;span style="color: #800080"&gt;5&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;]&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;,&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$key&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;[&lt;/span&gt;&lt;span style="color: #800080"&gt;6&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;]&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;,&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$key&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;[&lt;/span&gt;&lt;span style="color: #800080"&gt;7&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;]&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;,&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$key&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;[&lt;/span&gt;&lt;span style="color: #800080"&gt;8&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;]&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;XORBytes&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #8b0000"&gt;&amp;quot;healed
dr&amp;quot;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;.&lt;/span&gt;&lt;span style="color: #000000"&gt;ToCharArray&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$cipherBytes1&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;[&lt;/span&gt;&lt;span style="color: #800080"&gt;0&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;..&lt;/span&gt;&lt;span style="color: #800080"&gt;8&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;]&lt;/span&gt; 
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: #006400"&gt;## These other magic values come from looking at the
output and making educated guesses&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #ff4500"&gt;$key&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;[&lt;/span&gt;&lt;span style="color: #800080"&gt;9&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;]&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;,&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$key&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;[&lt;/span&gt;&lt;span style="color: #800080"&gt;10&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;]&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;XORBytes&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #8b0000"&gt;&amp;quot;se&amp;quot;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;.&lt;/span&gt;&lt;span style="color: #000000"&gt;ToCharArray&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$cipherBytes1&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;[&lt;/span&gt;&lt;span style="color: #800080"&gt;49&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;..&lt;/span&gt;&lt;span style="color: #800080"&gt;50&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;]&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #ff4500"&gt;$key&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;[&lt;/span&gt;&lt;span style="color: #800080"&gt;11&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;]&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;,&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$key&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;[&lt;/span&gt;&lt;span style="color: #800080"&gt;12&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;]&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;,&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$key&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;[&lt;/span&gt;&lt;span style="color: #800080"&gt;13&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;]&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;XORBytes&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #8b0000"&gt;&amp;quot;ion&amp;quot;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;.&lt;/span&gt;&lt;span style="color: #000000"&gt;ToCharArray&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$cipherBytes2&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;[&lt;/span&gt;&lt;span style="color: #800080"&gt;91&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;..&lt;/span&gt;&lt;span style="color: #800080"&gt;93&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;]&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #ff4500"&gt;$key&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;[&lt;/span&gt;&lt;span style="color: #800080"&gt;14&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;]&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;,&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$key&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;[&lt;/span&gt;&lt;span style="color: #800080"&gt;15&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;]&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;,&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$key&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;[&lt;/span&gt;&lt;span style="color: #800080"&gt;16&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;]&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;XORBytes&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #8b0000"&gt;&amp;quot;gs
&amp;quot;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;.&lt;/span&gt;&lt;span style="color: #000000"&gt;ToCharArray&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$cipherBytes1&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;[&lt;/span&gt;&lt;span style="color: #800080"&gt;74&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;..&lt;/span&gt;&lt;span style="color: #800080"&gt;76&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;]&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #ff4500"&gt;$key&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;[&lt;/span&gt;&lt;span style="color: #800080"&gt;17&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;]&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;,&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$key&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;[&lt;/span&gt;&lt;span style="color: #800080"&gt;18&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;]&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;,&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$key&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;[&lt;/span&gt;&lt;span style="color: #800080"&gt;19&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;]&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;XORBytes&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #8b0000"&gt;&amp;quot;Fit&amp;quot;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;.&lt;/span&gt;&lt;span style="color: #000000"&gt;ToCharArray&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$cipherBytes2&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;[&lt;/span&gt;&lt;span style="color: #800080"&gt;37&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;..&lt;/span&gt;&lt;span style="color: #800080"&gt;39&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;]&lt;/span&gt; 
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: #006400"&gt;## Display the currently-guessed plain texts alongside
eachother,&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #006400"&gt;## including the key and index into the cipher text. &lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #00008b"&gt;for&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$counter&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #800080"&gt;0&lt;/span&gt;&lt;span style="color: #000000"&gt;;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$counter&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;-lt&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$cipherBytes2&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;.&lt;/span&gt;&lt;span style="color: #000000"&gt;Count&lt;/span&gt;&lt;span style="color: #000000"&gt;;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$counter&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;++&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;{&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #ff4500"&gt;$keyChar&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$key&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;[&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$counter&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;%&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #800080"&gt;20&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;]&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #8b0000"&gt;&amp;quot;{0}
{1} {2} {3}&amp;quot;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;-f&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$counter&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;,&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #008080"&gt;[char]&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$keyChar&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;,&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #008080"&gt;[char]&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$cipherBytes1&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;[&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$counter&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;]&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;-bxor&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$keyChar&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;,&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #008080"&gt;[char]&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$cipherBytes2&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;[&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$counter&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;]&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;-bxor&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$keyChar&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;}&lt;/span&gt; 
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: #a9a9a9"&gt;-join&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #008080"&gt;[char[]]&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #0000ff"&gt;XORBytes&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$key&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$cipherBytes1&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #a9a9a9"&gt;-join&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #008080"&gt;[char[]]&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #0000ff"&gt;XORBytes&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$key&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$cipherBytes2&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #a9a9a9"&gt;-join&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #008080"&gt;[char[]]&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$key&lt;/span&gt; 
&lt;br /&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
&amp;#160;
&lt;/p&gt;
&lt;p&gt;
And the library:
&lt;/p&gt;
&lt;blockquote&gt; 
&lt;div style="border-bottom: black 1px solid; border-left: black 1px solid; padding-bottom: 5px; padding-left: 5px; width: 650px; padding-right: 5px; font-family: consolas,lucida console; font-size: 10pt; overflow: auto; border-top: black 1px solid; border-right: black 1px solid; padding-top: 5px"&gt;
&lt;table border="0" cellspacing="0" cellpadding="5"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td valign="top"&gt;
&lt;div style="padding-bottom: 5px; padding-left: 5px; padding-right: 5px; font-family: consolas,lucida console; background: #cecece; font-size: 10pt; padding-top: 5px"&gt;001 
&lt;br /&gt;
002 
&lt;br /&gt;
003 
&lt;br /&gt;
004 
&lt;br /&gt;
005 
&lt;br /&gt;
006 
&lt;br /&gt;
007 
&lt;br /&gt;
008 
&lt;br /&gt;
009 
&lt;br /&gt;
010 
&lt;br /&gt;
011 
&lt;br /&gt;
012 
&lt;br /&gt;
013 
&lt;br /&gt;
014 
&lt;br /&gt;
015 
&lt;br /&gt;
016 
&lt;br /&gt;
017 
&lt;br /&gt;
018 
&lt;br /&gt;
019 
&lt;br /&gt;
020 
&lt;br /&gt;
021 
&lt;br /&gt;
022 
&lt;br /&gt;
023 
&lt;br /&gt;
024 
&lt;br /&gt;
025 
&lt;br /&gt;
026 
&lt;br /&gt;
027 
&lt;br /&gt;
028 
&lt;br /&gt;
029 
&lt;br /&gt;
030 
&lt;br /&gt;
031 
&lt;br /&gt;
032 
&lt;br /&gt;
033 
&lt;br /&gt;
034 
&lt;br /&gt;
035 
&lt;br /&gt;
036 
&lt;br /&gt;
037 
&lt;br /&gt;
038 
&lt;br /&gt;
039 
&lt;br /&gt;
040 
&lt;br /&gt;
041 
&lt;br /&gt;
042 
&lt;br /&gt;
043 
&lt;br /&gt;
044 
&lt;br /&gt;
045 
&lt;br /&gt;
046 
&lt;br /&gt;
047 
&lt;br /&gt;
048 
&lt;br /&gt;
049 
&lt;br /&gt;
050 
&lt;br /&gt;
051 
&lt;br /&gt;
052 
&lt;br /&gt;
053 
&lt;br /&gt;
054 
&lt;br /&gt;
055 
&lt;br /&gt;
056 
&lt;br /&gt;
057 
&lt;br /&gt;
058 
&lt;br /&gt;
059 
&lt;br /&gt;
060 
&lt;br /&gt;
061 
&lt;br /&gt;
062 
&lt;br /&gt;
063 
&lt;br /&gt;
064 
&lt;br /&gt;
065 
&lt;br /&gt;
066 
&lt;br /&gt;
067 
&lt;br /&gt;
068 
&lt;br /&gt;
069 
&lt;br /&gt;
070 
&lt;br /&gt;
071 
&lt;br /&gt;
072 
&lt;br /&gt;
073 
&lt;br /&gt;
074 
&lt;br /&gt;
075 
&lt;br /&gt;
076 
&lt;br /&gt;
077 
&lt;br /&gt;
078 
&lt;br /&gt;
079 
&lt;br /&gt;
080 
&lt;br /&gt;
081 
&lt;br /&gt;
082 
&lt;br /&gt;
083 
&lt;br /&gt;
084 
&lt;br /&gt;
085 
&lt;br /&gt;
086 
&lt;br /&gt;
087 
&lt;br /&gt;
088 
&lt;br /&gt;
089 
&lt;br /&gt;
090 
&lt;br /&gt;
091 
&lt;br /&gt;
092 
&lt;br /&gt;
093 
&lt;br /&gt;
094 
&lt;br /&gt;
095 
&lt;br /&gt;
096 
&lt;br /&gt;
097 
&lt;br /&gt;
098 
&lt;br /&gt;
099 
&lt;br /&gt;
100 
&lt;br /&gt;
101 
&lt;br /&gt;
102 
&lt;br /&gt;
103 
&lt;br /&gt;
104 
&lt;br /&gt;
105 
&lt;br /&gt;
106 
&lt;br /&gt;
107 
&lt;br /&gt;
108 
&lt;br /&gt;
109 
&lt;br /&gt;
110 
&lt;br /&gt;
111 
&lt;br /&gt;
112 
&lt;br /&gt;
113 
&lt;br /&gt;
114 
&lt;br /&gt;
115 
&lt;br /&gt;
116 
&lt;br /&gt;
117 
&lt;br /&gt;
118 
&lt;br /&gt;
119 
&lt;br /&gt;
120 
&lt;br /&gt;
121 
&lt;br /&gt;
122 
&lt;br /&gt;
123 
&lt;br /&gt;
124 
&lt;br /&gt;
125 
&lt;br /&gt;
126 
&lt;br /&gt;
127 
&lt;br /&gt;
128 
&lt;br /&gt;
129 
&lt;br /&gt;
130 
&lt;br /&gt;
131 
&lt;br /&gt;
132 
&lt;br /&gt;
133 
&lt;br /&gt;
134 
&lt;br /&gt;
135 
&lt;br /&gt;
136 
&lt;br /&gt;
137 
&lt;br /&gt;
138 
&lt;br /&gt;
139 
&lt;br /&gt;
140 
&lt;br /&gt;
141 
&lt;br /&gt;
142 
&lt;br /&gt;
143 
&lt;br /&gt;
144 
&lt;br /&gt;
145 
&lt;br /&gt;
146 
&lt;br /&gt;
147 
&lt;br /&gt;
148 
&lt;br /&gt;
149 
&lt;br /&gt;
150 
&lt;br /&gt;
151 
&lt;br /&gt;
152 
&lt;br /&gt;
153 
&lt;br /&gt;
154 
&lt;br /&gt;
155 
&lt;br /&gt;
156 
&lt;br /&gt;
157 
&lt;br /&gt;
158 
&lt;br /&gt;
159 
&lt;br /&gt;
160 
&lt;br /&gt;
161 
&lt;br /&gt;
162 
&lt;br /&gt;
163 
&lt;br /&gt;
164 
&lt;br /&gt;
165 
&lt;br /&gt;
166 
&lt;br /&gt;
167 
&lt;br /&gt;
168 
&lt;br /&gt;
169 
&lt;br /&gt;
170 
&lt;br /&gt;
171 
&lt;br /&gt;
172 
&lt;br /&gt;
173 
&lt;br /&gt;
174 
&lt;br /&gt;
175 
&lt;br /&gt;
176 
&lt;br /&gt;
177 
&lt;br /&gt;
178 
&lt;br /&gt;
179 
&lt;br /&gt;
180 
&lt;br /&gt;
181 
&lt;br /&gt;
182 
&lt;br /&gt;
183 
&lt;br /&gt;
184 
&lt;br /&gt;
185 
&lt;br /&gt;
186 
&lt;br /&gt;
187 
&lt;br /&gt;
188 
&lt;br /&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;td valign="top" nowrap="nowrap"&gt;
&lt;div style="padding-bottom: 5px; padding-left: 5px; padding-right: 5px; font-family: consolas,lucida console; background: #fcfcfc; font-size: 10pt; padding-top: 5px"&gt;&lt;span style="color: #00008b"&gt;function&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #8a2be2"&gt;Get-SubstitutedText&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$cipherText&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;,&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$substitutions&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;{&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #ff4500"&gt;$content&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;$(&lt;/span&gt;&lt;span style="color: #00008b"&gt;foreach&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$char&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #00008b"&gt;in&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #008080"&gt;[char[]]&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$cipherText&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #000000"&gt;{&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #00008b"&gt;if&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$substitutions&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;[&lt;/span&gt;&lt;span style="color: #8b0000"&gt;&amp;quot;$char&amp;quot;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;]&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #000000"&gt;{&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #ff4500"&gt;$substitutions&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;[&lt;/span&gt;&lt;span style="color: #8b0000"&gt;&amp;quot;$char&amp;quot;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;]&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #000000"&gt;}&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #00008b"&gt;else&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #000000"&gt;{&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #8b0000"&gt;&amp;quot;.&amp;quot;&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #000000"&gt;}&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #000000"&gt;}&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;-join&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$content&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;}&lt;/span&gt; 
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: #00008b"&gt;function&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #8a2be2"&gt;XORBytes&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$passwordBytes&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;,&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$cipherBytes2&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;{&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #ff4500"&gt;$combinedBytes&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;@(&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #00008b"&gt;for&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$counter&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #800080"&gt;0&lt;/span&gt;&lt;span style="color: #000000"&gt;;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$counter&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;-lt&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$cipherBytes2&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;.&lt;/span&gt;&lt;span style="color: #000000"&gt;Length&lt;/span&gt;&lt;span style="color: #000000"&gt;;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$counter&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;++&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #000000"&gt;{&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #ff4500"&gt;$combinedBytes&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;+=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$passwordBytes&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;[&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$counter&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;%&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$passwordBytes&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;.&lt;/span&gt;&lt;span style="color: #000000"&gt;Length&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;]&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;-bxor&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$cipherBytes2&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;[&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$counter&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;]&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #000000"&gt;}&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #ff4500"&gt;$combinedBytes&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;}&lt;/span&gt; 
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: #00008b"&gt;function&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #8a2be2"&gt;Search-DictionaryForWord&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$pattern&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;,&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$floating&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;{&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #00008b"&gt;if&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;-not&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$floating&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;{&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$pattern&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #8b0000"&gt;&amp;quot;^$pattern`$&amp;quot;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;}&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #0000ff"&gt;Select-String&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$pattern&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #8a2be2"&gt;wordlist.txt&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;}&lt;/span&gt; 
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: #00008b"&gt;function&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #8a2be2"&gt;Search-DictionaryForPattern&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$pattern&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;,&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$floating&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;{&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #ff4500"&gt;$substituted&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #8b0000"&gt;&amp;quot;&amp;quot;&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #ff4500"&gt;$toFind&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #8b0000"&gt;&amp;quot;&amp;quot;&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #00008b"&gt;if&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;-not&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$floating&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;{&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$toFind&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;+=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #8b0000"&gt;&amp;quot;^&amp;quot;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;}&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #00008b"&gt;foreach&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$char&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #00008b"&gt;in&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$pattern&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;.&lt;/span&gt;&lt;span style="color: #000000"&gt;ToLower&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;.&lt;/span&gt;&lt;span style="color: #000000"&gt;ToCharArray&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #000000"&gt;{&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #00008b"&gt;if&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$char&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;-eq&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #8b0000"&gt;&amp;quot;.&amp;quot;&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #000000"&gt;{&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #ff4500"&gt;$toFind&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;+=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #8b0000"&gt;&amp;quot;.&amp;quot;&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #00008b"&gt;continue&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #000000"&gt;}&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #ff4500"&gt;$subIndex&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$substituted&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;.&lt;/span&gt;&lt;span style="color: #000000"&gt;IndexOf&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$char&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #00008b"&gt;if&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$subIndex&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;-ge&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #800080"&gt;0&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #000000"&gt;{&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #ff4500"&gt;$toFind&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;+=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #8b0000"&gt;&amp;quot;\&amp;quot;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;+&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$subIndex&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;+&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #800080"&gt;1&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #000000"&gt;}&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #00008b"&gt;else&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #000000"&gt;{&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #00008b"&gt;if&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;-not&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$substituted&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #000000"&gt;{&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #ff4500"&gt;$toFind&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;+=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #8b0000"&gt;&amp;quot;(.)&amp;quot;&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #000000"&gt;}&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #00008b"&gt;else&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #000000"&gt;{&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #ff4500"&gt;$toFind&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;+=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #8b0000"&gt;&amp;quot;([^$substituted])&amp;quot;&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #000000"&gt;}&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #ff4500"&gt;$substituted&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;+=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$char&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #000000"&gt;}&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #000000"&gt;}&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #00008b"&gt;if&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;-not&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$floating&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;{&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$toFind&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;+=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #8b0000"&gt;'$'&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;}&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #0000ff"&gt;Write-Verbose&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$toFind&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #0000ff"&gt;Select-String&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$toFind&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #8a2be2"&gt;wordlist.txt&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;}&lt;/span&gt; 
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: #00008b"&gt;function&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #8a2be2"&gt;Measure-LetterFrequency&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$cipherText&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;{&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #ff4500"&gt;$frequentLetters&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #8b0000"&gt;&amp;quot;
etnoriasfindhdlcumwfgypbvkjxqz&amp;quot;&lt;/span&gt; 
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #8b0000"&gt;&amp;quot;`nLetter
Frequencies:`n&amp;quot;&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #ff4500"&gt;$groups&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #008080"&gt;[char[]]&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$cipherText&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;.&lt;/span&gt;&lt;span style="color: #000000"&gt;ToLower&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;|&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;group&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;|&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;Sort&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000080"&gt;-Desc&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #8a2be2"&gt;Count&lt;/span&gt; 
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #ff4500"&gt;$groupNumber&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #800080"&gt;0&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #000000"&gt;$(&lt;/span&gt;&lt;span style="color: #00008b"&gt;foreach&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$group&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #00008b"&gt;in&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$groups&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #000000"&gt;{&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #ff4500"&gt;$group&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;|&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;Select&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #8a2be2"&gt;Name&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;,&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #000000"&gt;@{&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #000000"&gt;Name&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #8b0000"&gt;&amp;quot;Replacement&amp;quot;&lt;/span&gt;&lt;span style="color: #000000"&gt;;&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #000000"&gt;Expression&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;{&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$frequentLetters&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;[&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$groupNumber&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;]&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;}&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;}&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;,&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #8a2be2"&gt;Count&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;,&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #000000"&gt;@{&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #000000"&gt;Name&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #8b0000"&gt;&amp;quot;Percent&amp;quot;&lt;/span&gt;&lt;span style="color: #000000"&gt;;&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #000000"&gt;Expression&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;{&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #8b0000"&gt;&amp;quot;{0:..%}&amp;quot;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;-f&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$_&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;.&lt;/span&gt;&lt;span style="color: #000000"&gt;Count&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;/&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$cipherText&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;.&lt;/span&gt;&lt;span style="color: #000000"&gt;Length&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;}&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;}&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #ff4500"&gt;$groupNumber&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;++&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160; &lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #000000"&gt;}&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;|&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;ft&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000080"&gt;-auto&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;|&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;out-string&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;|&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;%&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;{&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$_&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;.&lt;/span&gt;&lt;span style="color: #000000"&gt;Trim&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;}&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;}&lt;/span&gt; 
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: #00008b"&gt;function&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #8a2be2"&gt;Measure-BigraphFrequency&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$cipherText&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;{&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #ff4500"&gt;$frequentBigraphs&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #8b0000"&gt;&amp;quot;th&amp;quot;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;,&lt;/span&gt;&lt;span style="color: #8b0000"&gt;&amp;quot;he&amp;quot;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;,&lt;/span&gt;&lt;span style="color: #8b0000"&gt;&amp;quot;an&amp;quot;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;,&lt;/span&gt;&lt;span style="color: #8b0000"&gt;&amp;quot;in&amp;quot;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;,&lt;/span&gt;&lt;span style="color: #8b0000"&gt;&amp;quot;er&amp;quot;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;,&lt;/span&gt;&lt;span style="color: #8b0000"&gt;&amp;quot;on&amp;quot;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;,&lt;/span&gt;&lt;span style="color: #8b0000"&gt;&amp;quot;re&amp;quot;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;,&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #8b0000"&gt;&amp;quot;ed&amp;quot;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;,&lt;/span&gt;&lt;span style="color: #8b0000"&gt;&amp;quot;nd&amp;quot;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;,&lt;/span&gt;&lt;span style="color: #8b0000"&gt;&amp;quot;ha&amp;quot;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;,&lt;/span&gt;&lt;span style="color: #8b0000"&gt;&amp;quot;at&amp;quot;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;,&lt;/span&gt;&lt;span style="color: #8b0000"&gt;&amp;quot;en&amp;quot;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;,&lt;/span&gt;&lt;span style="color: #8b0000"&gt;&amp;quot;es&amp;quot;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;,&lt;/span&gt;&lt;span style="color: #8b0000"&gt;&amp;quot;of&amp;quot;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;,&lt;/span&gt;&lt;span style="color: #8b0000"&gt;&amp;quot;nt&amp;quot;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;,&lt;/span&gt;&lt;span style="color: #8b0000"&gt;&amp;quot;ea&amp;quot;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;,&lt;/span&gt;&lt;span style="color: #8b0000"&gt;&amp;quot;ti&amp;quot;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;,&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #8b0000"&gt;&amp;quot;to&amp;quot;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;,&lt;/span&gt;&lt;span style="color: #8b0000"&gt;&amp;quot;io&amp;quot;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;,&lt;/span&gt;&lt;span style="color: #8b0000"&gt;&amp;quot;le&amp;quot;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;,&lt;/span&gt;&lt;span style="color: #8b0000"&gt;&amp;quot;is&amp;quot;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;,&lt;/span&gt;&lt;span style="color: #8b0000"&gt;&amp;quot;ou&amp;quot;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;,&lt;/span&gt;&lt;span style="color: #8b0000"&gt;&amp;quot;ar&amp;quot;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;,&lt;/span&gt;&lt;span style="color: #8b0000"&gt;&amp;quot;as&amp;quot;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;,&lt;/span&gt;&lt;span style="color: #8b0000"&gt;&amp;quot;de&amp;quot;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;,&lt;/span&gt;&lt;span style="color: #8b0000"&gt;&amp;quot;rt&amp;quot;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;,&lt;/span&gt;&lt;span style="color: #8b0000"&gt;&amp;quot;ve&amp;quot;&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #ff4500"&gt;$cipherText&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$cipherText&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;-replace&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #8b0000"&gt;&amp;quot;
&amp;quot;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;,&lt;/span&gt;&lt;span style="color: #8b0000"&gt;&amp;quot;&amp;quot;&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #ff4500"&gt;$cipherText&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$cipherText&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;-replace&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #8b0000"&gt;&amp;quot;\W&amp;quot;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;,&lt;/span&gt;&lt;span style="color: #8b0000"&gt;&amp;quot;&amp;quot;&lt;/span&gt; 
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #8b0000"&gt;&amp;quot;`nBigraph
Frequencies:`n&amp;quot;&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #ff4500"&gt;$groups&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #000000"&gt;@(&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$cipherText&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;-split&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #8b0000"&gt;'(..)'&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;+&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$cipherText&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;.&lt;/span&gt;&lt;span style="color: #000000"&gt;Remove&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #800080"&gt;0&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;,&lt;/span&gt;&lt;span style="color: #800080"&gt;1&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;-split&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #8b0000"&gt;'(..)'&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;|&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #0000ff"&gt;?&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;{&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$_&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;.&lt;/span&gt;&lt;span style="color: #000000"&gt;Trim&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;.&lt;/span&gt;&lt;span style="color: #000000"&gt;Length&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;-eq&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #800080"&gt;2&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;}&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;|&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;group&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;|&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;Sort&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000080"&gt;-Desc&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #8a2be2"&gt;Count&lt;/span&gt; 
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #ff4500"&gt;$groupNumber&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #800080"&gt;0&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #000000"&gt;$(&lt;/span&gt;&lt;span style="color: #00008b"&gt;foreach&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$group&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #00008b"&gt;in&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$groups&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #000000"&gt;{&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #ff4500"&gt;$group&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;|&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;Select&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #8a2be2"&gt;Name&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;,&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #000000"&gt;@{&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #000000"&gt;Name&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #8b0000"&gt;&amp;quot;Replacement&amp;quot;&lt;/span&gt;&lt;span style="color: #000000"&gt;;&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #000000"&gt;Expression&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;{&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$frequentBigraphs&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;[&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$groupNumber&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;]&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;}&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;}&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;,&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #8a2be2"&gt;Count&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #ff4500"&gt;$groupNumber&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;++&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160; &lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #000000"&gt;}&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;|&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;ft&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000080"&gt;-auto&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;|&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;out-string&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;|&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;%&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;{&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$_&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;.&lt;/span&gt;&lt;span style="color: #000000"&gt;Trim&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;}&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;}&lt;/span&gt; 
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: #00008b"&gt;function&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #8a2be2"&gt;Measure-DoubleLetterFrequency&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$cipherText&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;{&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #ff4500"&gt;$frequentDoubles&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #8b0000"&gt;&amp;quot;ss&amp;quot;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;,&lt;/span&gt;&lt;span style="color: #8b0000"&gt;&amp;quot;ee&amp;quot;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;,&lt;/span&gt;&lt;span style="color: #8b0000"&gt;&amp;quot;tt&amp;quot;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;,&lt;/span&gt;&lt;span style="color: #8b0000"&gt;&amp;quot;ff&amp;quot;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;,&lt;/span&gt;&lt;span style="color: #8b0000"&gt;&amp;quot;ll&amp;quot;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;,&lt;/span&gt;&lt;span style="color: #8b0000"&gt;&amp;quot;mm&amp;quot;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;,&lt;/span&gt;&lt;span style="color: #8b0000"&gt;&amp;quot;oo&amp;quot;&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #8b0000"&gt;&amp;quot;`nDouble
Frequencies:`n&amp;quot;&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #ff4500"&gt;$groups&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #008080"&gt;[Regex]&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;::&lt;/span&gt;&lt;span style="color: #000000"&gt;Matches&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$cipherText&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;,&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #8b0000"&gt;'(.)\1'&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;|&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;%&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;{&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$_&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;.&lt;/span&gt;&lt;span style="color: #000000"&gt;Value&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;}&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;|&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #0000ff"&gt;group&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;|&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;Sort&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000080"&gt;-Desc&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #8a2be2"&gt;Count&lt;/span&gt; 
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #ff4500"&gt;$groupNumber&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #800080"&gt;0&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #000000"&gt;$(&lt;/span&gt;&lt;span style="color: #00008b"&gt;foreach&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$group&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #00008b"&gt;in&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$groups&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #000000"&gt;{&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #ff4500"&gt;$group&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;|&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;Select&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #8a2be2"&gt;Name&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;,&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #000000"&gt;@{&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #000000"&gt;Name&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #8b0000"&gt;&amp;quot;Replacement&amp;quot;&lt;/span&gt;&lt;span style="color: #000000"&gt;;&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #000000"&gt;Expression&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;{&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$frequentDoubles&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;[&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$groupNumber&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;]&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;}&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;}&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;,&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #8a2be2"&gt;Count&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #ff4500"&gt;$groupNumber&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;++&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160; &lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #000000"&gt;}&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;|&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;ft&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000080"&gt;-auto&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;|&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;out-string&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;|&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;%&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;{&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$_&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;.&lt;/span&gt;&lt;span style="color: #000000"&gt;Trim&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;}&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #8b0000"&gt;&amp;quot;`nOther
groups:&amp;quot;&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #8b0000"&gt;&amp;quot;$($frequentDoubles[$groupNumber..($frequentDoubles.Length
- 1)])&amp;quot;&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;}&lt;/span&gt; 
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: #00008b"&gt;function&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #8a2be2"&gt;Measure-InitialFrequency&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$cipherText&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;{&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #ff4500"&gt;$frequentInitialLetters&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #8b0000"&gt;&amp;quot;toawbcdsfmrhiyeglnoujk&amp;quot;&lt;/span&gt; 
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #8b0000"&gt;&amp;quot;`nInitial
letters:`n&amp;quot;&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #ff4500"&gt;$groups&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;-split&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$cipherText&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;.&lt;/span&gt;&lt;span style="color: #000000"&gt;ToLower&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;|&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;%&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;{&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #008080"&gt;[char[]]&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$_&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;[&lt;/span&gt;&lt;span style="color: #800080"&gt;0&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;]&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;}&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;|&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;group&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;|&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;Sort&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000080"&gt;-Desc&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #8a2be2"&gt;Count&lt;/span&gt; 
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #ff4500"&gt;$groupNumber&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #800080"&gt;0&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #000000"&gt;$(&lt;/span&gt;&lt;span style="color: #00008b"&gt;foreach&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$group&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #00008b"&gt;in&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$groups&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #000000"&gt;{&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #ff4500"&gt;$group&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;|&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;Select&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #8a2be2"&gt;Name&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;,&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #000000"&gt;@{&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #000000"&gt;Name&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #8b0000"&gt;&amp;quot;Replacement&amp;quot;&lt;/span&gt;&lt;span style="color: #000000"&gt;;&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #000000"&gt;Expression&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;{&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$frequentInitialLetters&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;[&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$groupNumber&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;]&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;}&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;}&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;,&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #8a2be2"&gt;Count&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;,&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #000000"&gt;@{&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #000000"&gt;Name&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #8b0000"&gt;&amp;quot;Percent&amp;quot;&lt;/span&gt;&lt;span style="color: #000000"&gt;;&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #000000"&gt;Expression&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;{&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #8b0000"&gt;&amp;quot;{0:..%}&amp;quot;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;-f&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$_&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;.&lt;/span&gt;&lt;span style="color: #000000"&gt;Count&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;/&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$groups&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;.&lt;/span&gt;&lt;span style="color: #000000"&gt;Count&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;}&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;}&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #ff4500"&gt;$groupNumber&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;++&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160; &lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #000000"&gt;}&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;|&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;ft&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000080"&gt;-auto&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;|&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;out-string&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;|&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;%&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;{&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$_&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;.&lt;/span&gt;&lt;span style="color: #000000"&gt;Trim&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;}&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;}&lt;/span&gt; 
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: #00008b"&gt;function&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #8a2be2"&gt;combo&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$string&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;{&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #00008b"&gt;if&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$string&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;.&lt;/span&gt;&lt;span style="color: #000000"&gt;Length&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;-eq&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #800080"&gt;2&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #000000"&gt;{&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #ff4500"&gt;$string&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #ff4500"&gt;$string&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;[&lt;/span&gt;&lt;span style="color: #800080"&gt;-1&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;]&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;+&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$string&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;[&lt;/span&gt;&lt;span style="color: #800080"&gt;0&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;]&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #000000"&gt;}&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #00008b"&gt;else&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #000000"&gt;{&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #00008b"&gt;foreach&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$element&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #00008b"&gt;in&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$string&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;.&lt;/span&gt;&lt;span style="color: #000000"&gt;ToCharArray&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #000000"&gt;{&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #0000ff"&gt;combo&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$string&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;-replace&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$element&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;,&lt;/span&gt;&lt;span style="color: #8b0000"&gt;''&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;|&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;foreach&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;{&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$element&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;+&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$_&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;}&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #0000ff"&gt;combo&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$string&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;-replace&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$element&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;,&lt;/span&gt;&lt;span style="color: #8b0000"&gt;''&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;|&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;foreach&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;{&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$_&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;}&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #000000"&gt;}&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #000000"&gt;}&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;}&lt;/span&gt; 
&lt;br /&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;/blockquote&gt;&lt;img width="0" height="0" src="http://www.leeholmes.com/blog/aggbug.ashx?id=7be38aa2-cf9f-4b19-b9e9-04e7357e496d" /&gt;</description>
      <comments>http://www.leeholmes.com/blog/CommentView,guid,7be38aa2-cf9f-4b19-b9e9-04e7357e496d.aspx</comments>
    </item>
    <item>
      <trackback:ping>http://www.leeholmes.com/blog/Trackback.aspx?guid=fdec1dbf-0fc9-4f7d-b8e8-48321b79da9a</trackback:ping>
      <pingback:server>http://www.leeholmes.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.leeholmes.com/blog/PermaLink,guid,fdec1dbf-0fc9-4f7d-b8e8-48321b79da9a.aspx</pingback:target>
      <dc:creator>
      </dc:creator>
      <wfw:comment>http://www.leeholmes.com/blog/CommentView,guid,fdec1dbf-0fc9-4f7d-b8e8-48321b79da9a.aspx</wfw:comment>
      <wfw:commentRss>http://www.leeholmes.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=fdec1dbf-0fc9-4f7d-b8e8-48321b79da9a</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Adam Barr blogged bits and pieces of a PowerShell RPN calculator a few years ago:
first <a href="http://www.proudlyserving.com/archives/2007/10/rpn_calculator.html">the
basics</a>, and then some <a href="http://www.proudlyserving.com/archives/2007/10/hacking_on_the.html">tweaks
to clean it up</a>. An RPN calculator, if you haven’t played with one before, flips
the way you enter data. Rather than type “2 + 2”, you type “2 2 +”. RPN-style calculation
supposedly has <a href="http://en.wikipedia.org/wiki/Reverse_Polish_notation">lots
of great benefits</a>. While I understand it and can do it, I wouldn’t say I “get
it.”
</p>
        <p>
Anyways.
</p>
        <p>
One of the things he runs into with the last version is the PowerShell’s (version
one) inability to dynamically invoke static methods:
</p>
        <blockquote>
          <p>
            <em>… you should be able to write: </em>
          </p>
          <p>
            <code>
              <em>$add = [Decimal]::Add 
<br />
$add.Invoke(2,3)</em>
            </code>
          </p>
          <p>
            <em>but it doesn't work. That's not exactly the same as getting the value of a static
property, but maybe there's a related issue, or maybe I just can't figure out how
to do it right.</em>
          </p>
        </blockquote>
        <p>
Well, in version two it <em>does</em> work, and that makes the RPN calculator a whole
lot cleaner.
</p>
        <p>
Another interesting aspect about the latest implementation is that it has a lot of
very similar code segments. It has tables for operations on the Double class that
take one argument, operations on the Double class that take two arguments, operations
on the <strong>M</strong>ath class that take one argument, and operations on the Math
class that take two arguments. Afterward, there are four nearly identical blocks of
code that perform the operation and store the result.
</p>
        <blockquote>
          <p>
Note: This of course isn’t a slag on the implementation, this is just continuing the
tinkering on an interesting concept.
</p>
        </blockquote>
        <p>
We can simplify this in two ways:
</p>
        <ol>
          <li>
Don’t create hard-coded lists of operators. Instead, we’ll look at all methods in
the Math and Double class to see if one matches. This approach gives us 30-something
operators for free, and perhaps more in future versions of the .NET Framework.</li>
          <li>
Don’t create hard-coded lists of <em>arity</em>: the number of arguments consumed
by an operator. Instead, we’ll look at the method overloads that match the operator
name, and see how many arguments they consume.</li>
        </ol>
        <p>
Now, there are some subtleties to both points:
</p>
        <ol>
          <li>
The method names in the Decimal and Math classes get kind of long. You don’t want
to have to write “2 3 Multiply” in an RPN calculator. To work around that, we’ll define
a hashtable of shortcuts that simply map operators to their names.</li>
          <li>
Some operators have multiple overloads. For example, the one-argument <em>Round</em> method
rounds a number to zero decimal points. The two-argument <em>Round</em> method rounds
it to the specified number of decimal points.</li>
        </ol>
        <p>
By leveraging PowerShell’s built-in support for introspection and dynamic method invocation,
we now have a script that is both much shorter, and much more powerful.
</p>
        <blockquote>
          <div style="border-bottom: black 1px solid; border-left: black 1px solid; padding-bottom: 5px; padding-left: 5px; width: 650px; padding-right: 5px; font-family: consolas,lucida console; font-size: 10pt; overflow: auto; border-top: black 1px solid; border-right: black 1px solid; padding-top: 5px">
            <table border="0" cellspacing="0" cellpadding="5">
              <tbody>
                <tr>
                  <td valign="top">
                    <div style="padding-bottom: 5px; padding-left: 5px; padding-right: 5px; font-family: consolas,lucida console; background: #cecece; font-size: 10pt; padding-top: 5px">001 
<br />
002 
<br />
003 
<br />
004 
<br />
005 
<br />
006 
<br />
007 
<br />
008 
<br />
009 
<br />
010 
<br />
011 
<br />
012 
<br />
013 
<br />
014 
<br />
015 
<br />
016 
<br />
017 
<br />
018 
<br />
019 
<br />
020 
<br />
021 
<br />
022 
<br />
023 
<br />
024 
<br />
025 
<br />
026 
<br />
027 
<br />
028 
<br />
029 
<br />
030 
<br />
031 
<br />
032 
<br />
033 
<br />
034 
<br />
035 
<br />
036 
<br />
037 
<br />
038 
<br />
039 
<br />
040 
<br />
041 
<br />
042 
<br />
043 
<br />
044 
<br />
045 
<br />
046 
<br />
047 
<br />
048 
<br />
049 
<br />
050 
<br />
051 
<br />
052 
<br />
053 
<br />
054 
<br />
055 
<br />
056 
<br />
057 
<br />
058 
<br />
059 
<br />
060 
<br />
061 
<br />
062 
<br />
063 
<br />
064 
<br />
065 
<br />
066 
<br />
067 
<br />
068 
<br />
069 
<br />
070 
<br />
071 
<br />
072 
<br />
073 
<br />
074 
<br />
075 
<br />
076 
<br />
077 
<br />
078 
<br />
079 
<br />
080 
<br />
081 
<br />
082 
<br />
083 
<br /></div>
                  </td>
                  <td valign="top" nowrap="nowrap">
                    <div style="padding-bottom: 5px; padding-left: 5px; padding-right: 5px; font-family: consolas,lucida console; background: #fcfcfc; font-size: 10pt; padding-top: 5px">
                      <span style="color: #006400">##############################################################################</span>
                      <br />
                      <span style="color: #006400">##</span>
                      <br />
                      <span style="color: #006400">## rpn.ps1</span>
                      <br />
                      <span style="color: #006400">##</span>
                      <br />
                      <span style="color: #006400">##############################################################################</span>
                      <br />
                      <br />
                      <span style="color: #006400">&lt;# 
<br /><br />
.SYNOPSIS 
<br />
Evaluates a statement as an RPN calculator. Supports all operations from 
<br />
System.Math and System.Decimal. 
<br /><br />
.EXAMPLE 
<br />
rpn 2 2 + 
<br /><br />
.EXAMPLE 
<br />
rpn 2 3 + 1.3 / 2 Round2 Negate 
<br /><br />
#&gt;</span>
                      <br />
                      <br />
                      <br />
                      <span style="color: #ff4500">$s</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">=</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #0000ff">new-object</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #8a2be2">System.Collections.Stack</span>
                      <br />
                      <span style="color: #ff4500">$n</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">=</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #800080">0d</span>
                      <br />
                      <br />
                      <span style="color: #ff4500">$shortcuts</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">=</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #000000">@{</span>
                      <br />
                      <span style="color: #000000">    </span>
                      <span style="color: #8b0000">"+"</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">=</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #8b0000">"Add"</span>
                      <span style="color: #000000">;</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #8b0000">"-"</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">=</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #8b0000">"Subtract"</span>
                      <span style="color: #000000">;</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #8b0000">"/"</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">=</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #8b0000">"Divide"</span>
                      <span style="color: #000000">;</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #8b0000">"*"</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">=</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #8b0000">"Multiply"</span>
                      <span style="color: #000000">;</span>
                      <br />
                      <span style="color: #000000">    </span>
                      <span style="color: #8b0000">"%"</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">=</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #8b0000">"Remainder"</span>
                      <span style="color: #000000">;</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #8b0000">"^"</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">=</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #8b0000">"Pow"</span>
                      <span style="color: #000000">;</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #8b0000">"||"</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">=</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #8b0000">"Abs"</span>
                      <br />
                      <span style="color: #000000">}</span>
                      <br />
                      <br />
                      <span style="color: #00008b">:ARGLOOP</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #00008b">foreach</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #000000">(</span>
                      <span style="color: #ff4500">$a</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #00008b">in</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #ff4500">$args</span>
                      <span style="color: #000000">)</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #000000">{</span>
                      <br />
                      <span style="color: #000000">    </span>
                      <span style="color: #00008b">if</span>
                      <span style="color: #000000">(</span>
                      <span style="color: #ff4500">$shortcuts</span>
                      <span style="color: #a9a9a9">[</span>
                      <span style="color: #ff4500">$a</span>
                      <span style="color: #a9a9a9">]</span>
                      <span style="color: #000000">)</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #000000">{</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #ff4500">$a</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">=</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #ff4500">$shortcuts</span>
                      <span style="color: #a9a9a9">[</span>
                      <span style="color: #ff4500">$a</span>
                      <span style="color: #a9a9a9">]</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #000000">}</span>
                      <br />
                      <br />
                      <span style="color: #000000">    </span>
                      <span style="color: #006400">##
First, see if it's a number. If so, push it.</span>
                      <br />
                      <span style="color: #000000">    </span>
                      <span style="color: #00008b">try</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #000000">{</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #ff4500">$s</span>
                      <span style="color: #a9a9a9">.</span>
                      <span style="color: #000000">Push</span>
                      <span style="color: #000000">(</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #008080">[Decimal]</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #ff4500">$a</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #000000">)</span>
                      <span style="color: #000000">;</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #00008b">continue</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #000000">}</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #00008b">catch</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #000000">{</span>
                      <span style="color: #000000">}</span>
                      <br />
                      <br />
                      <span style="color: #000000">    </span>
                      <span style="color: #006400">##
It's an operation. Extract the operation name</span>
                      <br />
                      <span style="color: #000000">    </span>
                      <span style="color: #006400">##
(such as Floor, Round, etc.) It may also represent a</span>
                      <br />
                      <span style="color: #000000">    </span>
                      <span style="color: #006400">##
specific operation (such as Round2 - Round to specified precision).</span>
                      <br />
                      <span style="color: #000000">    </span>
                      <span style="color: #ff4500">$argCountList</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">=</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #ff4500">$a</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">-replace</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #8b0000">"(\D+)(\d*)"</span>
                      <span style="color: #a9a9a9">,</span>
                      <span style="color: #8b0000">'$2'</span>
                      <br />
                      <span style="color: #000000">    </span>
                      <span style="color: #ff4500">$op</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">=</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #ff4500">$a</span>
                      <span style="color: #a9a9a9">.</span>
                      <span style="color: #000000">Substring</span>
                      <span style="color: #000000">(</span>
                      <span style="color: #800080">0</span>
                      <span style="color: #a9a9a9">,</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #ff4500">$a</span>
                      <span style="color: #a9a9a9">.</span>
                      <span style="color: #000000">Length</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">-</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #ff4500">$argCountList</span>
                      <span style="color: #a9a9a9">.</span>
                      <span style="color: #000000">Length</span>
                      <span style="color: #000000">)</span>
                      <br />
                      <br />
                      <span style="color: #000000">    </span>
                      <span style="color: #006400">##
We support any static operations from the Decimal or Math classes</span>
                      <br />
                      <span style="color: #000000">    </span>
                      <span style="color: #00008b">foreach</span>
                      <span style="color: #000000">(</span>
                      <span style="color: #ff4500">$type</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #00008b">in</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #008080">[Decimal]</span>
                      <span style="color: #a9a9a9">,</span>
                      <span style="color: #008080">[Math]</span>
                      <span style="color: #000000">)</span>
                      <br />
                      <span style="color: #000000">    </span>
                      <span style="color: #000000">{</span>
                      <br />
                      <span style="color: #000000">        </span>
                      <span style="color: #00008b">if</span>
                      <span style="color: #000000">(</span>
                      <span style="color: #ff4500">$definition</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">=</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #ff4500">$type</span>
                      <span style="color: #a9a9a9">::</span>
                      <span style="color: #ff4500">$op</span>
                      <span style="color: #000000">)</span>
                      <br />
                      <span style="color: #000000">        </span>
                      <span style="color: #000000">{</span>
                      <br />
                      <span style="color: #000000">            </span>
                      <span style="color: #006400">##
If they haven't specifically given the number of arguments,</span>
                      <br />
                      <span style="color: #000000">            </span>
                      <span style="color: #006400">##
see how many this method supports. We go through each overload</span>
                      <br />
                      <span style="color: #000000">            </span>
                      <span style="color: #006400">##
definition, and see how many commas it has.</span>
                      <br />
                      <span style="color: #000000">            </span>
                      <span style="color: #00008b">if</span>
                      <span style="color: #000000">(</span>
                      <span style="color: #a9a9a9">-not</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #ff4500">$argCountList</span>
                      <span style="color: #000000">)</span>
                      <br />
                      <span style="color: #000000">            </span>
                      <span style="color: #000000">{</span>
                      <br />
                      <span style="color: #000000">                </span>
                      <span style="color: #ff4500">$argCountList</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">=</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #ff4500">$definition</span>
                      <span style="color: #a9a9a9">.</span>
                      <span style="color: #000000">OverloadDefinitions</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">|</span>
                      <br />
                      <span style="color: #000000">                    </span>
                      <span style="color: #0000ff">Foreach-Object</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #000000">{</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #000000">(</span>
                      <span style="color: #ff4500">$_</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">-split</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #8b0000">",
"</span>
                      <span style="color: #000000">)</span>
                      <span style="color: #a9a9a9">.</span>
                      <span style="color: #000000">Count</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #000000">}</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">|</span>
                      <br />
                      <span style="color: #000000">                    </span>
                      <span style="color: #0000ff">Sort-Object</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #000080">-Unique</span>
                      <br />
                      <span style="color: #000000">            </span>
                      <span style="color: #000000">}</span>
                      <br />
                      <br />
                      <span style="color: #000000">            </span>
                      <span style="color: #006400">##
Now, for each overload, see if we can call it.</span>
                      <br />
                      <span style="color: #000000">            </span>
                      <span style="color: #00008b">foreach</span>
                      <span style="color: #000000">(</span>
                      <span style="color: #ff4500">$argCount</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #00008b">in</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #ff4500">$argCountList</span>
                      <span style="color: #000000">)</span>
                      <br />
                      <span style="color: #000000">            </span>
                      <span style="color: #000000">{</span>
                      <br />
                      <span style="color: #000000">                </span>
                      <span style="color: #00008b">try</span>
                      <br />
                      <span style="color: #000000">                </span>
                      <span style="color: #000000">{</span>
                      <br />
                      <span style="color: #000000">                    </span>
                      <span style="color: #ff4500">$methodArguments</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">=</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #ff4500">$s</span>
                      <span style="color: #a9a9a9">.</span>
                      <span style="color: #000000">ToArray</span>
                      <span style="color: #000000">(</span>
                      <span style="color: #000000">)</span>
                      <span style="color: #a9a9a9">[</span>
                      <span style="color: #000000">(</span>
                      <span style="color: #ff4500">$argCount</span>
                      <span style="color: #a9a9a9">-</span>
                      <span style="color: #800080">1</span>
                      <span style="color: #000000">)</span>
                      <span style="color: #a9a9a9">..</span>
                      <span style="color: #800080">0</span>
                      <span style="color: #a9a9a9">]</span>
                      <br />
                      <span style="color: #000000">                    </span>
                      <span style="color: #ff4500">$result</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">=</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #ff4500">$type</span>
                      <span style="color: #a9a9a9">::</span>
                      <span style="color: #ff4500">$op</span>
                      <span style="color: #a9a9a9">.</span>
                      <span style="color: #000000">Invoke</span>
                      <span style="color: #000000">(</span>
                      <span style="color: #ff4500">$methodArguments</span>
                      <span style="color: #000000">)</span>
                      <br />
                      <br />
                      <span style="color: #000000">                    </span>
                      <span style="color: #006400">##
If we were able to call the method, pop all of its</span>
                      <br />
                      <span style="color: #000000">                    </span>
                      <span style="color: #006400">##
arguments off of the stack.</span>
                      <br />
                      <span style="color: #000000">                    </span>
                      <span style="color: #ff4500">$null</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">=</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #800080">1</span>
                      <span style="color: #a9a9a9">..</span>
                      <span style="color: #ff4500">$argCount</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #a9a9a9">|</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #0000ff">%</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #000000">{</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #ff4500">$s</span>
                      <span style="color: #a9a9a9">.</span>
                      <span style="color: #000000">Pop</span>
                      <span style="color: #000000">(</span>
                      <span style="color: #000000">)</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #000000">}</span>
                      <br />
                      <br />
                      <span style="color: #000000">                    </span>
                      <span style="color: #006400">##
Then push the result</span>
                      <br />
                      <span style="color: #000000">                    </span>
                      <span style="color: #ff4500">$s</span>
                      <span style="color: #a9a9a9">.</span>
                      <span style="color: #000000">Push</span>
                      <span style="color: #000000">(</span>
                      <span style="color: #ff4500">$result</span>
                      <span style="color: #000000">)</span>
                      <br />
                      <span style="color: #000000">                    </span>
                      <span style="color: #00008b">continue</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #000000">ARGLOOP</span>
                      <br />
                      <span style="color: #000000">                </span>
                      <span style="color: #000000">}</span>
                      <br />
                      <span style="color: #000000">                </span>
                      <span style="color: #00008b">catch</span>
                      <br />
                      <span style="color: #000000">                </span>
                      <span style="color: #000000">{</span>
                      <br />
                      <span style="color: #000000">                    </span>
                      <span style="color: #006400">##
If we catch an error, try with the next number of</span>
                      <br />
                      <span style="color: #000000">                    </span>
                      <span style="color: #006400">##
arguments</span>
                      <br />
                      <span style="color: #000000">                </span>
                      <span style="color: #000000">}</span>
                      <br />
                      <span style="color: #000000">            </span>
                      <span style="color: #000000">}</span>
                      <br />
                      <span style="color: #000000">        </span>
                      <span style="color: #000000">}</span>
                      <br />
                      <span style="color: #000000">    </span>
                      <span style="color: #000000">}</span>
                      <br />
                      <span style="color: #000000">}</span>
                      <br />
                      <br />
                      <span style="color: #ff4500">$s</span>
                    </div>
                  </td>
                </tr>
              </tbody>
            </table>
          </div>
        </blockquote>
        <img width="0" height="0" src="http://www.leeholmes.com/blog/aggbug.ashx?id=fdec1dbf-0fc9-4f7d-b8e8-48321b79da9a" />
      </body>
      <title>PowerShell RPN Calculator</title>
      <guid isPermaLink="false">http://www.leeholmes.com/blog/PermaLink,guid,fdec1dbf-0fc9-4f7d-b8e8-48321b79da9a.aspx</guid>
      <link>http://www.leeholmes.com/blog/PowerShellRPNCalculator.aspx</link>
      <pubDate>Mon, 12 Oct 2009 20:08:26 GMT</pubDate>
      <description>&lt;p&gt;
Adam Barr blogged bits and pieces of a PowerShell RPN calculator a few years ago:
first &lt;a href="http://www.proudlyserving.com/archives/2007/10/rpn_calculator.html"&gt;the
basics&lt;/a&gt;, and then some &lt;a href="http://www.proudlyserving.com/archives/2007/10/hacking_on_the.html"&gt;tweaks
to clean it up&lt;/a&gt;. An RPN calculator, if you haven’t played with one before, flips
the way you enter data. Rather than type “2 + 2”, you type “2 2 +”. RPN-style calculation
supposedly has &lt;a href="http://en.wikipedia.org/wiki/Reverse_Polish_notation"&gt;lots
of great benefits&lt;/a&gt;. While I understand it and can do it, I wouldn’t say I “get
it.”
&lt;/p&gt;
&lt;p&gt;
Anyways.
&lt;/p&gt;
&lt;p&gt;
One of the things he runs into with the last version is the PowerShell’s (version
one) inability to dynamically invoke static methods:
&lt;/p&gt;
&lt;blockquote&gt; 
&lt;p&gt;
&lt;em&gt;… you should be able to write: &lt;/em&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;code&gt;&lt;em&gt;$add = [Decimal]::Add 
&lt;br /&gt;
$add.Invoke(2,3)&lt;/em&gt;&lt;/code&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;em&gt;but it doesn't work. That's not exactly the same as getting the value of a static
property, but maybe there's a related issue, or maybe I just can't figure out how
to do it right.&lt;/em&gt; 
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
Well, in version two it &lt;em&gt;does&lt;/em&gt; work, and that makes the RPN calculator a whole
lot cleaner.
&lt;/p&gt;
&lt;p&gt;
Another interesting aspect about the latest implementation is that it has a lot of
very similar code segments. It has tables for operations on the Double class that
take one argument, operations on the Double class that take two arguments, operations
on the &lt;strong&gt;M&lt;/strong&gt;ath class that take one argument, and operations on the Math
class that take two arguments. Afterward, there are four nearly identical blocks of
code that perform the operation and store the result.
&lt;/p&gt;
&lt;blockquote&gt; 
&lt;p&gt;
Note: This of course isn’t a slag on the implementation, this is just continuing the
tinkering on an interesting concept.
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
We can simplify this in two ways:
&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
Don’t create hard-coded lists of operators. Instead, we’ll look at all methods in
the Math and Double class to see if one matches. This approach gives us 30-something
operators for free, and perhaps more in future versions of the .NET Framework.&lt;/li&gt;
&lt;li&gt;
Don’t create hard-coded lists of &lt;em&gt;arity&lt;/em&gt;: the number of arguments consumed
by an operator. Instead, we’ll look at the method overloads that match the operator
name, and see how many arguments they consume.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;
Now, there are some subtleties to both points:
&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
The method names in the Decimal and Math classes get kind of long. You don’t want
to have to write “2 3 Multiply” in an RPN calculator. To work around that, we’ll define
a hashtable of shortcuts that simply map operators to their names.&lt;/li&gt;
&lt;li&gt;
Some operators have multiple overloads. For example, the one-argument &lt;em&gt;Round&lt;/em&gt; method
rounds a number to zero decimal points. The two-argument &lt;em&gt;Round&lt;/em&gt; method rounds
it to the specified number of decimal points.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;
By leveraging PowerShell’s built-in support for introspection and dynamic method invocation,
we now have a script that is both much shorter, and much more powerful.
&lt;/p&gt;
&lt;blockquote&gt; 
&lt;div style="border-bottom: black 1px solid; border-left: black 1px solid; padding-bottom: 5px; padding-left: 5px; width: 650px; padding-right: 5px; font-family: consolas,lucida console; font-size: 10pt; overflow: auto; border-top: black 1px solid; border-right: black 1px solid; padding-top: 5px"&gt;
&lt;table border="0" cellspacing="0" cellpadding="5"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td valign="top"&gt;
&lt;div style="padding-bottom: 5px; padding-left: 5px; padding-right: 5px; font-family: consolas,lucida console; background: #cecece; font-size: 10pt; padding-top: 5px"&gt;001 
&lt;br /&gt;
002 
&lt;br /&gt;
003 
&lt;br /&gt;
004 
&lt;br /&gt;
005 
&lt;br /&gt;
006 
&lt;br /&gt;
007 
&lt;br /&gt;
008 
&lt;br /&gt;
009 
&lt;br /&gt;
010 
&lt;br /&gt;
011 
&lt;br /&gt;
012 
&lt;br /&gt;
013 
&lt;br /&gt;
014 
&lt;br /&gt;
015 
&lt;br /&gt;
016 
&lt;br /&gt;
017 
&lt;br /&gt;
018 
&lt;br /&gt;
019 
&lt;br /&gt;
020 
&lt;br /&gt;
021 
&lt;br /&gt;
022 
&lt;br /&gt;
023 
&lt;br /&gt;
024 
&lt;br /&gt;
025 
&lt;br /&gt;
026 
&lt;br /&gt;
027 
&lt;br /&gt;
028 
&lt;br /&gt;
029 
&lt;br /&gt;
030 
&lt;br /&gt;
031 
&lt;br /&gt;
032 
&lt;br /&gt;
033 
&lt;br /&gt;
034 
&lt;br /&gt;
035 
&lt;br /&gt;
036 
&lt;br /&gt;
037 
&lt;br /&gt;
038 
&lt;br /&gt;
039 
&lt;br /&gt;
040 
&lt;br /&gt;
041 
&lt;br /&gt;
042 
&lt;br /&gt;
043 
&lt;br /&gt;
044 
&lt;br /&gt;
045 
&lt;br /&gt;
046 
&lt;br /&gt;
047 
&lt;br /&gt;
048 
&lt;br /&gt;
049 
&lt;br /&gt;
050 
&lt;br /&gt;
051 
&lt;br /&gt;
052 
&lt;br /&gt;
053 
&lt;br /&gt;
054 
&lt;br /&gt;
055 
&lt;br /&gt;
056 
&lt;br /&gt;
057 
&lt;br /&gt;
058 
&lt;br /&gt;
059 
&lt;br /&gt;
060 
&lt;br /&gt;
061 
&lt;br /&gt;
062 
&lt;br /&gt;
063 
&lt;br /&gt;
064 
&lt;br /&gt;
065 
&lt;br /&gt;
066 
&lt;br /&gt;
067 
&lt;br /&gt;
068 
&lt;br /&gt;
069 
&lt;br /&gt;
070 
&lt;br /&gt;
071 
&lt;br /&gt;
072 
&lt;br /&gt;
073 
&lt;br /&gt;
074 
&lt;br /&gt;
075 
&lt;br /&gt;
076 
&lt;br /&gt;
077 
&lt;br /&gt;
078 
&lt;br /&gt;
079 
&lt;br /&gt;
080 
&lt;br /&gt;
081 
&lt;br /&gt;
082 
&lt;br /&gt;
083 
&lt;br /&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;td valign="top" nowrap="nowrap"&gt;
&lt;div style="padding-bottom: 5px; padding-left: 5px; padding-right: 5px; font-family: consolas,lucida console; background: #fcfcfc; font-size: 10pt; padding-top: 5px"&gt;&lt;span style="color: #006400"&gt;##############################################################################&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #006400"&gt;##&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #006400"&gt;## rpn.ps1&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #006400"&gt;##&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #006400"&gt;##############################################################################&lt;/span&gt; 
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: #006400"&gt;&amp;lt;# 
&lt;br /&gt;
&lt;br /&gt;
.SYNOPSIS 
&lt;br /&gt;
Evaluates a statement as an RPN calculator. Supports all operations from 
&lt;br /&gt;
System.Math and System.Decimal. 
&lt;br /&gt;
&lt;br /&gt;
.EXAMPLE 
&lt;br /&gt;
rpn 2 2 + 
&lt;br /&gt;
&lt;br /&gt;
.EXAMPLE 
&lt;br /&gt;
rpn 2 3 + 1.3 / 2 Round2 Negate 
&lt;br /&gt;
&lt;br /&gt;
#&amp;gt;&lt;/span&gt; 
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: #ff4500"&gt;$s&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;new-object&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #8a2be2"&gt;System.Collections.Stack&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #ff4500"&gt;$n&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #800080"&gt;0d&lt;/span&gt; 
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: #ff4500"&gt;$shortcuts&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;@{&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #8b0000"&gt;&amp;quot;+&amp;quot;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #8b0000"&gt;&amp;quot;Add&amp;quot;&lt;/span&gt;&lt;span style="color: #000000"&gt;;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #8b0000"&gt;&amp;quot;-&amp;quot;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #8b0000"&gt;&amp;quot;Subtract&amp;quot;&lt;/span&gt;&lt;span style="color: #000000"&gt;;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #8b0000"&gt;&amp;quot;/&amp;quot;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #8b0000"&gt;&amp;quot;Divide&amp;quot;&lt;/span&gt;&lt;span style="color: #000000"&gt;;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #8b0000"&gt;&amp;quot;*&amp;quot;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #8b0000"&gt;&amp;quot;Multiply&amp;quot;&lt;/span&gt;&lt;span style="color: #000000"&gt;;&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #8b0000"&gt;&amp;quot;%&amp;quot;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #8b0000"&gt;&amp;quot;Remainder&amp;quot;&lt;/span&gt;&lt;span style="color: #000000"&gt;;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #8b0000"&gt;&amp;quot;^&amp;quot;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #8b0000"&gt;&amp;quot;Pow&amp;quot;&lt;/span&gt;&lt;span style="color: #000000"&gt;;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #8b0000"&gt;&amp;quot;||&amp;quot;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #8b0000"&gt;&amp;quot;Abs&amp;quot;&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;}&lt;/span&gt; 
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: #00008b"&gt;:ARGLOOP&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #00008b"&gt;foreach&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$a&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #00008b"&gt;in&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$args&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;{&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #00008b"&gt;if&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$shortcuts&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;[&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$a&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;]&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;{&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$a&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$shortcuts&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;[&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$a&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;]&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;}&lt;/span&gt; 
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #006400"&gt;##
First, see if it's a number. If so, push it.&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #00008b"&gt;try&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;{&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$s&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;.&lt;/span&gt;&lt;span style="color: #000000"&gt;Push&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #008080"&gt;[Decimal]&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$a&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;/span&gt;&lt;span style="color: #000000"&gt;;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #00008b"&gt;continue&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;}&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #00008b"&gt;catch&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;{&lt;/span&gt;&lt;span style="color: #000000"&gt;}&lt;/span&gt; 
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #006400"&gt;##
It's an operation. Extract the operation name&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #006400"&gt;##
(such as Floor, Round, etc.) It may also represent a&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #006400"&gt;##
specific operation (such as Round2 - Round to specified precision).&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #ff4500"&gt;$argCountList&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$a&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;-replace&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #8b0000"&gt;&amp;quot;(\D+)(\d*)&amp;quot;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;,&lt;/span&gt;&lt;span style="color: #8b0000"&gt;'$2'&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #ff4500"&gt;$op&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$a&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;.&lt;/span&gt;&lt;span style="color: #000000"&gt;Substring&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #800080"&gt;0&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;,&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$a&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;.&lt;/span&gt;&lt;span style="color: #000000"&gt;Length&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;-&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$argCountList&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;.&lt;/span&gt;&lt;span style="color: #000000"&gt;Length&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;/span&gt; 
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #006400"&gt;##
We support any static operations from the Decimal or Math classes&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #00008b"&gt;foreach&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$type&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #00008b"&gt;in&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #008080"&gt;[Decimal]&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;,&lt;/span&gt;&lt;span style="color: #008080"&gt;[Math]&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #000000"&gt;{&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #00008b"&gt;if&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$definition&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$type&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;::&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$op&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #000000"&gt;{&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #006400"&gt;##
If they haven't specifically given the number of arguments,&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #006400"&gt;##
see how many this method supports. We go through each overload&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #006400"&gt;##
definition, and see how many commas it has.&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #00008b"&gt;if&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;-not&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$argCountList&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #000000"&gt;{&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #ff4500"&gt;$argCountList&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$definition&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;.&lt;/span&gt;&lt;span style="color: #000000"&gt;OverloadDefinitions&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;|&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #0000ff"&gt;Foreach-Object&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;{&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$_&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;-split&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #8b0000"&gt;&amp;quot;,
&amp;quot;&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;.&lt;/span&gt;&lt;span style="color: #000000"&gt;Count&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;}&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;|&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #0000ff"&gt;Sort-Object&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000080"&gt;-Unique&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #000000"&gt;}&lt;/span&gt; 
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #006400"&gt;##
Now, for each overload, see if we can call it.&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #00008b"&gt;foreach&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$argCount&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #00008b"&gt;in&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$argCountList&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #000000"&gt;{&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #00008b"&gt;try&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #000000"&gt;{&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #ff4500"&gt;$methodArguments&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$s&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;.&lt;/span&gt;&lt;span style="color: #000000"&gt;ToArray&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;[&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$argCount&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;-&lt;/span&gt;&lt;span style="color: #800080"&gt;1&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;..&lt;/span&gt;&lt;span style="color: #800080"&gt;0&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;]&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #ff4500"&gt;$result&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$type&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;::&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$op&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;.&lt;/span&gt;&lt;span style="color: #000000"&gt;Invoke&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$methodArguments&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;/span&gt; 
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #006400"&gt;##
If we were able to call the method, pop all of its&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #006400"&gt;##
arguments off of the stack.&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #ff4500"&gt;$null&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #800080"&gt;1&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;..&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$argCount&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;|&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;%&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;{&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$s&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;.&lt;/span&gt;&lt;span style="color: #000000"&gt;Pop&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;}&lt;/span&gt; 
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #006400"&gt;##
Then push the result&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #ff4500"&gt;$s&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;.&lt;/span&gt;&lt;span style="color: #000000"&gt;Push&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$result&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #00008b"&gt;continue&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;ARGLOOP&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #000000"&gt;}&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #00008b"&gt;catch&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #000000"&gt;{&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #006400"&gt;##
If we catch an error, try with the next number of&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #006400"&gt;##
arguments&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #000000"&gt;}&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #000000"&gt;}&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #000000"&gt;}&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #000000"&gt;}&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;}&lt;/span&gt; 
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: #ff4500"&gt;$s&lt;/span&gt; 
&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;/blockquote&gt;&lt;img width="0" height="0" src="http://www.leeholmes.com/blog/aggbug.ashx?id=fdec1dbf-0fc9-4f7d-b8e8-48321b79da9a" /&gt;</description>
      <comments>http://www.leeholmes.com/blog/CommentView,guid,fdec1dbf-0fc9-4f7d-b8e8-48321b79da9a.aspx</comments>
    </item>
    <item>
      <trackback:ping>http://www.leeholmes.com/blog/Trackback.aspx?guid=14e07075-5dbf-4c10-a353-dd8575b2e3d5</trackback:ping>
      <pingback:server>http://www.leeholmes.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.leeholmes.com/blog/PermaLink,guid,14e07075-5dbf-4c10-a353-dd8575b2e3d5.aspx</pingback:target>
      <dc:creator>
      </dc:creator>
      <wfw:comment>http://www.leeholmes.com/blog/CommentView,guid,14e07075-5dbf-4c10-a353-dd8575b2e3d5.aspx</wfw:comment>
      <wfw:commentRss>http://www.leeholmes.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=14e07075-5dbf-4c10-a353-dd8575b2e3d5</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Last week, I dropped by to be interviewed on the <a href="http://powerscripting.wordpress.com/2009/09/27/episode-85-lee-holmes-talks-about-v2/">PowerScripting
Podcast</a>. We chatted about providers, eventing, transactions, security, and a whole
slew of V2 improvements that you probably didn’t know about!
</p>
        <p>
Give it a listen: <a title="http://powerscripting.wordpress.com/2009/09/27/episode-85-lee-holmes-talks-about-v2/" href="http://powerscripting.wordpress.com/2009/09/27/episode-85-lee-holmes-talks-about-v2/">http://powerscripting.wordpress.com/2009/09/27/episode-85-lee-holmes-talks-about-v2/</a></p>
        <img width="0" height="0" src="http://www.leeholmes.com/blog/aggbug.ashx?id=14e07075-5dbf-4c10-a353-dd8575b2e3d5" />
      </body>
      <title>PowerScripting Podcast 85 &amp;ndash; Eventing, Transactions, Security</title>
      <guid isPermaLink="false">http://www.leeholmes.com/blog/PermaLink,guid,14e07075-5dbf-4c10-a353-dd8575b2e3d5.aspx</guid>
      <link>http://www.leeholmes.com/blog/PowerScriptingPodcast85NdashEventingTransactionsSecurity.aspx</link>
      <pubDate>Mon, 28 Sep 2009 16:11:07 GMT</pubDate>
      <description>&lt;p&gt;
Last week, I dropped by to be interviewed on the &lt;a href="http://powerscripting.wordpress.com/2009/09/27/episode-85-lee-holmes-talks-about-v2/"&gt;PowerScripting
Podcast&lt;/a&gt;. We chatted about providers, eventing, transactions, security, and a whole
slew of V2 improvements that you probably didn’t know about!
&lt;/p&gt;
&lt;p&gt;
Give it a listen: &lt;a title="http://powerscripting.wordpress.com/2009/09/27/episode-85-lee-holmes-talks-about-v2/" href="http://powerscripting.wordpress.com/2009/09/27/episode-85-lee-holmes-talks-about-v2/"&gt;http://powerscripting.wordpress.com/2009/09/27/episode-85-lee-holmes-talks-about-v2/&lt;/a&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.leeholmes.com/blog/aggbug.ashx?id=14e07075-5dbf-4c10-a353-dd8575b2e3d5" /&gt;</description>
      <comments>http://www.leeholmes.com/blog/CommentView,guid,14e07075-5dbf-4c10-a353-dd8575b2e3d5.aspx</comments>
    </item>
    <item>
      <trackback:ping>http://www.leeholmes.com/blog/Trackback.aspx?guid=2ca81c60-5a1c-4c78-8aa8-829204a46b8f</trackback:ping>
      <pingback:server>http://www.leeholmes.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.leeholmes.com/blog/PermaLink,guid,2ca81c60-5a1c-4c78-8aa8-829204a46b8f.aspx</pingback:target>
      <dc:creator>
      </dc:creator>
      <wfw:comment>http://www.leeholmes.com/blog/CommentView,guid,2ca81c60-5a1c-4c78-8aa8-829204a46b8f.aspx</wfw:comment>
      <wfw:commentRss>http://www.leeholmes.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=2ca81c60-5a1c-4c78-8aa8-829204a46b8f</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Call me as shocked as anybody, but the iPhone app store now <a href="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=327936358&amp;mt=8">has
a new entry</a>:
</p>
        <p>
          <a href="http://www.leeholmes.com/blog/content/binary/WindowsLiveWriter/PowerShellCookbookNowAvailableoniPhone_12927/image_2.png">
            <img style="border-bottom: 0px; border-left: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px" title="image" border="0" alt="image" src="http://www.leeholmes.com/blog/content/binary/WindowsLiveWriter/PowerShellCookbookNowAvailableoniPhone_12927/image_thumb.png" width="644" height="434" />
          </a>
        </p>
        <p>
Although I can’t find any official information about it on the rest of the internet,
O’Reilly has teamed up with Lexcycle (authors of the Stanza iPhone book reading application)
to create iPhone applications for many of the top O’Reilly cookbooks.
</p>
        <p>
Just when you thought the “PowerShell Pocket Reference” was a good value per pound,
this one comes in at a net weight of <strong>zero</strong>! Definitely a pocket-sized
reference worth carrying around.
</p>
        <p>
Note: As you browse through the book, many of the code samples are cut off by the
default zoom. To see the code in its entirety, use the familiar iPhone pinch + zoom
gestures to zoom in and out.
</p>
        <img width="0" height="0" src="http://www.leeholmes.com/blog/aggbug.ashx?id=2ca81c60-5a1c-4c78-8aa8-829204a46b8f" />
      </body>
      <title>PowerShell Cookbook Now Available on iPhone</title>
      <guid isPermaLink="false">http://www.leeholmes.com/blog/PermaLink,guid,2ca81c60-5a1c-4c78-8aa8-829204a46b8f.aspx</guid>
      <link>http://www.leeholmes.com/blog/PowerShellCookbookNowAvailableOnIPhone.aspx</link>
      <pubDate>Fri, 25 Sep 2009 04:08:06 GMT</pubDate>
      <description>&lt;p&gt;
Call me as shocked as anybody, but the iPhone app store now &lt;a href="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=327936358&amp;amp;mt=8"&gt;has
a new entry&lt;/a&gt;:
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.leeholmes.com/blog/content/binary/WindowsLiveWriter/PowerShellCookbookNowAvailableoniPhone_12927/image_2.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px" title="image" border="0" alt="image" src="http://www.leeholmes.com/blog/content/binary/WindowsLiveWriter/PowerShellCookbookNowAvailableoniPhone_12927/image_thumb.png" width="644" height="434" /&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
Although I can’t find any official information about it on the rest of the internet,
O’Reilly has teamed up with Lexcycle (authors of the Stanza iPhone book reading application)
to create iPhone applications for many of the top O’Reilly cookbooks.
&lt;/p&gt;
&lt;p&gt;
Just when you thought the “PowerShell Pocket Reference” was a good value per pound,
this one comes in at a net weight of &lt;strong&gt;zero&lt;/strong&gt;! Definitely a pocket-sized
reference worth carrying around.
&lt;/p&gt;
&lt;p&gt;
Note: As you browse through the book, many of the code samples are cut off by the
default zoom. To see the code in its entirety, use the familiar iPhone pinch + zoom
gestures to zoom in and out.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.leeholmes.com/blog/aggbug.ashx?id=2ca81c60-5a1c-4c78-8aa8-829204a46b8f" /&gt;</description>
      <comments>http://www.leeholmes.com/blog/CommentView,guid,2ca81c60-5a1c-4c78-8aa8-829204a46b8f.aspx</comments>
    </item>
    <item>
      <trackback:ping>http://www.leeholmes.com/blog/Trackback.aspx?guid=92dcc42c-89df-4566-92cb-467dfa38262a</trackback:ping>
      <pingback:server>http://www.leeholmes.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.leeholmes.com/blog/PermaLink,guid,92dcc42c-89df-4566-92cb-467dfa38262a.aspx</pingback:target>
      <dc:creator>
      </dc:creator>
      <wfw:comment>http://www.leeholmes.com/blog/CommentView,guid,92dcc42c-89df-4566-92cb-467dfa38262a.aspx</wfw:comment>
      <wfw:commentRss>http://www.leeholmes.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=92dcc42c-89df-4566-92cb-467dfa38262a</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Sometimes, people ask, “What’s the equivalent of NET HELPMSG” in PowerShell?
</p>
        <p>
NET HELPMSG is probably the easiest to remember (and works in PowerShell of course,)
but PowerShell improves the experience a bunch by way of the .NET Framework.
</p>
        <p>
Suppose you get <a href="http://blogs.msdn.com/johnrdurant/archive/2007/06/14/net-helpmsg.aspx">error
0x80070652</a> from an installer:
</p>
        <blockquote>
          <p>
C:\Users\leeholm&gt;net helpmsg 0x80070652 
<br />
The syntax of this command is: 
<br /><br />
NET HELPMSG 
<br />
message#
</p>
        </blockquote>
        <p>
Oops, it doesn’t support hex. You need to take the last 4 digits:
</p>
        <blockquote>
          <p>
C:\Users\leeholm&gt;net helpmsg 0652 
<br />
0652 is not a valid Windows network message number. 
<br /><br />
More help is available by typing NET HELPMSG 3871.
</p>
        </blockquote>
        <p>
Oops, forgot to convert it to decimal.
</p>
        <blockquote>
          <p>
C:\Users\leeholm&gt;set /a c = 0x652 
<br />
1618 
<br />
C:\Users\leeholm&gt;net helpmsg 1618 
<br /><br />
Another installation is already in progress. Complete that installation before proceeding
with this install.
</p>
        </blockquote>
        <p>
Perfect.
</p>
        <p>
No matter your preference, PowerShell makes this easier. The System.ComponentModel.Win32Exception
class supports constructors for all of the main scenarios, so PowerShell’s type casting
support gives another way (albeit with a slightly ungainly syntax:)
</p>
        <blockquote>
          <p>
[D:\documents\tools] 
<br />
PS:163 &gt; [ComponentModel.Win32Exception] 0x80070652 
<br />
Another installation is already in progress. Complete that installation before proceeding
with this install
</p>
          <p>
[D:\documents\tools] 
<br />
PS:164 &gt; [ComponentModel.Win32Exception] 0x80070652 
<br />
Another installation is already in progress. Complete that installation before proceeding
with this install
</p>
          <p>
[D:\documents\tools] 
<br />
PS:165 &gt; [ComponentModel.Win32Exception] –2147023278 
<br />
Another installation is already in progress. Complete that installation before proceeding
with this install
</p>
          <p>
[D:\documents\tools] 
<br />
PS:166 &gt; [ComponentModel.Win32Exception] 0x0652 
<br />
Another installation is already in progress. Complete that installation before proceeding
with this install
</p>
          <p>
[D:\documents\tools] 
<br />
PS:167 &gt; [ComponentModel.Win32Exception] 1618 
<br />
Another installation is already in progress. Complete that installation before proceeding
with this install
</p>
        </blockquote>
        <p>
So don’t go replacing all of your NET HELPMSG muscle memory, but when you find yourself
struggling with the requirements, give the [ComponentModel.Win32Exception] class a
try.
</p>
        <img width="0" height="0" src="http://www.leeholmes.com/blog/aggbug.ashx?id=92dcc42c-89df-4566-92cb-467dfa38262a" />
      </body>
      <title>PowerShell equivalent of NET HELPMSG</title>
      <guid isPermaLink="false">http://www.leeholmes.com/blog/PermaLink,guid,92dcc42c-89df-4566-92cb-467dfa38262a.aspx</guid>
      <link>http://www.leeholmes.com/blog/PowerShellEquivalentOfNETHELPMSG.aspx</link>
      <pubDate>Tue, 15 Sep 2009 00:33:05 GMT</pubDate>
      <description>&lt;p&gt;
Sometimes, people ask, “What’s the equivalent of NET HELPMSG” in PowerShell?
&lt;/p&gt;
&lt;p&gt;
NET HELPMSG is probably the easiest to remember (and works in PowerShell of course,)
but PowerShell improves the experience a bunch by way of the .NET Framework.
&lt;/p&gt;
&lt;p&gt;
Suppose you get &lt;a href="http://blogs.msdn.com/johnrdurant/archive/2007/06/14/net-helpmsg.aspx"&gt;error
0x80070652&lt;/a&gt; from an installer:
&lt;/p&gt;
&lt;blockquote&gt; 
&lt;p&gt;
C:\Users\leeholm&amp;gt;net helpmsg 0x80070652 
&lt;br /&gt;
The syntax of this command is: 
&lt;br /&gt;
&lt;br /&gt;
NET HELPMSG 
&lt;br /&gt;
message#
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
Oops, it doesn’t support hex. You need to take the last 4 digits:
&lt;/p&gt;
&lt;blockquote&gt; 
&lt;p&gt;
C:\Users\leeholm&amp;gt;net helpmsg 0652 
&lt;br /&gt;
0652 is not a valid Windows network message number. 
&lt;br /&gt;
&lt;br /&gt;
More help is available by typing NET HELPMSG 3871.
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
Oops, forgot to convert it to decimal.
&lt;/p&gt;
&lt;blockquote&gt; 
&lt;p&gt;
C:\Users\leeholm&amp;gt;set /a c = 0x652 
&lt;br /&gt;
1618 
&lt;br /&gt;
C:\Users\leeholm&amp;gt;net helpmsg 1618 
&lt;br /&gt;
&lt;br /&gt;
Another installation is already in progress. Complete that installation before proceeding
with this install.
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
Perfect.
&lt;/p&gt;
&lt;p&gt;
No matter your preference, PowerShell makes this easier. The System.ComponentModel.Win32Exception
class supports constructors for all of the main scenarios, so PowerShell’s type casting
support gives another way (albeit with a slightly ungainly syntax:)
&lt;/p&gt;
&lt;blockquote&gt; 
&lt;p&gt;
[D:\documents\tools] 
&lt;br /&gt;
PS:163 &amp;gt; [ComponentModel.Win32Exception] 0x80070652 
&lt;br /&gt;
Another installation is already in progress. Complete that installation before proceeding
with this install
&lt;/p&gt;
&lt;p&gt;
[D:\documents\tools] 
&lt;br /&gt;
PS:164 &amp;gt; [ComponentModel.Win32Exception] 0x80070652 
&lt;br /&gt;
Another installation is already in progress. Complete that installation before proceeding
with this install
&lt;/p&gt;
&lt;p&gt;
[D:\documents\tools] 
&lt;br /&gt;
PS:165 &amp;gt; [ComponentModel.Win32Exception] –2147023278 
&lt;br /&gt;
Another installation is already in progress. Complete that installation before proceeding
with this install
&lt;/p&gt;
&lt;p&gt;
[D:\documents\tools] 
&lt;br /&gt;
PS:166 &amp;gt; [ComponentModel.Win32Exception] 0x0652 
&lt;br /&gt;
Another installation is already in progress. Complete that installation before proceeding
with this install
&lt;/p&gt;
&lt;p&gt;
[D:\documents\tools] 
&lt;br /&gt;
PS:167 &amp;gt; [ComponentModel.Win32Exception] 1618 
&lt;br /&gt;
Another installation is already in progress. Complete that installation before proceeding
with this install
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
So don’t go replacing all of your NET HELPMSG muscle memory, but when you find yourself
struggling with the requirements, give the [ComponentModel.Win32Exception] class a
try.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.leeholmes.com/blog/aggbug.ashx?id=92dcc42c-89df-4566-92cb-467dfa38262a" /&gt;</description>
      <comments>http://www.leeholmes.com/blog/CommentView,guid,92dcc42c-89df-4566-92cb-467dfa38262a.aspx</comments>
    </item>
    <item>
      <trackback:ping>http://www.leeholmes.com/blog/Trackback.aspx?guid=cae682e6-76f4-491d-a206-239292eae40b</trackback:ping>
      <pingback:server>http://www.leeholmes.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.leeholmes.com/blog/PermaLink,guid,cae682e6-76f4-491d-a206-239292eae40b.aspx</pingback:target>
      <dc:creator>
      </dc:creator>
      <wfw:comment>http://www.leeholmes.com/blog/CommentView,guid,cae682e6-76f4-491d-a206-239292eae40b.aspx</wfw:comment>
      <wfw:commentRss>http://www.leeholmes.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=cae682e6-76f4-491d-a206-239292eae40b</wfw:commentRss>
      <slash:comments>3</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I wanted to download a photo album from Facebook, but of course there’s no simple
API or option to do that. Searching the internet finds a couple of options (a Firefox
plugin, a Facebook app,) but I couldn’t seem to find anything standalone.
</p>
        <p>
This gives another great opportunity to talk about advanced HTTP scripting in PowerShell.
We’ve talked about it in the past (here: <a title="http://www.leeholmes.com/blog/AdvancedHTTPASPNetScriptingWithPowerShell.aspx" href="http://www.leeholmes.com/blog/AdvancedHTTPASPNetScriptingWithPowerShell.aspx">http://www.leeholmes.com/blog/AdvancedHTTPASPNetScriptingWithPowerShell.aspx</a>,)
so this script introduces some new techniques.
</p>
        <p>
There are a couple of challenges for scripting Facebook, especially using the techniques
in the earlier post.
</p>
        <p>
The first is that the login sequence is secure :) The login page gets served over
SSL, meaning that the basic Send-TcpRequest commands we did previously won’t work.
SSL requires encryption and a complex handshake. Luckily the System.Net.WebClient
class provides that for use.
</p>
        <p>
The second issue is that the cookies are dynamic, and given out in two stages. You
need to first connect to the main Facebook homepage, at which point you get a couple
of session cookies. Then, you connect to the login page, at which point you get some
login cookies. Once you have THOSE, you can script the rest of Facebook.
</p>
        <p>
Here is Get-FacebookCookie.ps1:
</p>
        <div style="border-bottom: black 1px solid; border-left: black 1px solid; padding-bottom: 5px; padding-left: 5px; width: 650px; padding-right: 5px; font-family: consolas,lucida console; font-size: 10pt; overflow: auto; border-top: black 1px solid; border-right: black 1px solid; padding-top: 5px">
          <table border="0" cellspacing="0" cellpadding="5">
            <tbody>
              <tr>
                <td valign="top">
                  <div style="padding-bottom: 5px; padding-left: 5px; padding-right: 5px; font-family: consolas,lucida console; background: #cecece; font-size: 10pt; padding-top: 5px">001 
<br />
002 
<br />
003 
<br />
004 
<br />
005 
<br />
006 
<br />
007 
<br />
008 
<br />
009 
<br />
010 
<br />
011 
<br />
012 
<br />
013 
<br />
014 
<br />
015 
<br />
016 
<br />
017 
<br />
018 
<br />
019 
<br />
020 
<br />
021 
<br />
022 
<br />
023 
<br />
024 
<br />
025 
<br />
026 
<br />
027 
<br />
028 
<br />
029 
<br />
030 
<br />
031 
<br />
032 
<br /></div>
                </td>
                <td valign="top" nowrap="nowrap">
                  <div style="padding-bottom: 5px; padding-left: 5px; padding-right: 5px; font-family: consolas,lucida console; background: #fcfcfc; font-size: 10pt; padding-top: 5px">
                    <span style="color: #006400">##
Get-FacebookCookie.ps1</span>
                    <br />
                    <span style="color: #006400">## Logs into Facebook, returning the cookie required
for further operations</span>
                    <br />
                    <br />
                    <span style="color: #00008b">param</span>
                    <span style="color: #000000">(</span>
                    <span style="color: #ff4500">$Credential</span>
                    <span style="color: #000000">)</span>
                    <br />
                    <br />
                    <span style="color: #ff4500">$Credential</span>
                    <span style="color: #000000"> </span>
                    <span style="color: #a9a9a9">=</span>
                    <span style="color: #000000"> </span>
                    <span style="color: #0000ff">Get-Credential</span>
                    <span style="color: #000000"> </span>
                    <span style="color: #ff4500">$Credential</span>
                    <br />
                    <br />
                    <span style="color: #006400">## Get initial cookies</span>
                    <br />
                    <span style="color: #ff4500">$wc</span>
                    <span style="color: #000000"> </span>
                    <span style="color: #a9a9a9">=</span>
                    <span style="color: #000000"> </span>
                    <span style="color: #0000ff">New-Object</span>
                    <span style="color: #000000"> </span>
                    <span style="color: #8a2be2">System.Net.WebClient</span>
                    <br />
                    <span style="color: #ff4500">$wc</span>
                    <span style="color: #a9a9a9">.</span>
                    <span style="color: #000000">Headers</span>
                    <span style="color: #a9a9a9">.</span>
                    <span style="color: #000000">Add</span>
                    <span style="color: #000000">(</span>
                    <span style="color: #8b0000">"User-Agent"</span>
                    <span style="color: #a9a9a9">,</span>
                    <span style="color: #000000"> </span>
                    <span style="color: #8b0000">"User-Agent:
Mozilla/4.0 (compatible; MSIE 7.0;)"</span>
                    <span style="color: #000000">)</span>
                    <br />
                    <br />
                    <span style="color: #ff4500">$result</span>
                    <span style="color: #000000"> </span>
                    <span style="color: #a9a9a9">=</span>
                    <span style="color: #000000"> </span>
                    <span style="color: #ff4500">$wc</span>
                    <span style="color: #a9a9a9">.</span>
                    <span style="color: #000000">DownloadString</span>
                    <span style="color: #000000">(</span>
                    <span style="color: #8b0000">"http://www.facebook.com/"</span>
                    <span style="color: #000000">)</span>
                    <br />
                    <span style="color: #ff4500">$cookie</span>
                    <span style="color: #000000"> </span>
                    <span style="color: #a9a9a9">=</span>
                    <span style="color: #000000"> </span>
                    <span style="color: #ff4500">$wc</span>
                    <span style="color: #a9a9a9">.</span>
                    <span style="color: #000000">ResponseHeaders</span>
                    <span style="color: #a9a9a9">[</span>
                    <span style="color: #8b0000">"Set-Cookie"</span>
                    <span style="color: #a9a9a9">]</span>
                    <br />
                    <span style="color: #ff4500">$cookie</span>
                    <span style="color: #000000"> </span>
                    <span style="color: #a9a9a9">=</span>
                    <span style="color: #000000"> </span>
                    <span style="color: #000000">(</span>
                    <span style="color: #ff4500">$cookie</span>
                    <span style="color: #a9a9a9">.</span>
                    <span style="color: #000000">Split</span>
                    <span style="color: #000000">(</span>
                    <span style="color: #8b0000">','</span>
                    <span style="color: #000000">)</span>
                    <span style="color: #000000"> </span>
                    <span style="color: #a9a9a9">-match</span>
                    <span style="color: #000000"> </span>
                    <span style="color: #8b0000">'^\S+=\S+;'</span>
                    <span style="color: #000000"> </span>
                    <span style="color: #a9a9a9">-replace</span>
                    <span style="color: #000000"> </span>
                    <span style="color: #8b0000">';.*'</span>
                    <span style="color: #a9a9a9">,</span>
                    <span style="color: #8b0000">''</span>
                    <span style="color: #000000">)</span>
                    <span style="color: #000000"> </span>
                    <span style="color: #a9a9a9">-join</span>
                    <span style="color: #000000"> </span>
                    <span style="color: #8b0000">';
'</span>
                    <br />
                    <br />
                    <span style="color: #006400">## Login</span>
                    <br />
                    <span style="color: #ff4500">$bstr</span>
                    <span style="color: #000000"> </span>
                    <span style="color: #a9a9a9">=</span>
                    <span style="color: #000000"> </span>
                    <span style="color: #008080">[System.Runtime.InteropServices.Marshal]</span>
                    <span style="color: #a9a9a9">::</span>
                    <span style="color: #000000">SecureStringToBSTR</span>
                    <span style="color: #000000">(</span>
                    <span style="color: #ff4500">$credential</span>
                    <span style="color: #a9a9a9">.</span>
                    <span style="color: #000000">Password</span>
                    <span style="color: #000000">)</span>
                    <br />
                    <span style="color: #ff4500">$password</span>
                    <span style="color: #000000"> </span>
                    <span style="color: #a9a9a9">=</span>
                    <span style="color: #000000"> </span>
                    <span style="color: #008080">[System.Runtime.InteropServices.Marshal]</span>
                    <span style="color: #a9a9a9">::</span>
                    <span style="color: #000000">PtrToStringAuto</span>
                    <span style="color: #000000">(</span>
                    <span style="color: #ff4500">$bstr</span>
                    <span style="color: #000000">)</span>
                    <br />
                    <span style="color: #008080">[System.Runtime.InteropServices.Marshal]</span>
                    <span style="color: #a9a9a9">::</span>
                    <span style="color: #000000">ZeroFreeBstr</span>
                    <span style="color: #000000">(</span>
                    <span style="color: #ff4500">$bstr</span>
                    <span style="color: #000000">)</span>
                    <br />
                    <br />
                    <span style="color: #ff4500">$wc</span>
                    <span style="color: #000000"> </span>
                    <span style="color: #a9a9a9">=</span>
                    <span style="color: #000000"> </span>
                    <span style="color: #0000ff">New-Object</span>
                    <span style="color: #000000"> </span>
                    <span style="color: #8a2be2">System.Net.WebClient</span>
                    <br />
                    <span style="color: #ff4500">$wc</span>
                    <span style="color: #a9a9a9">.</span>
                    <span style="color: #000000">Headers</span>
                    <span style="color: #a9a9a9">.</span>
                    <span style="color: #000000">Add</span>
                    <span style="color: #000000">(</span>
                    <span style="color: #8b0000">"User-Agent"</span>
                    <span style="color: #a9a9a9">,</span>
                    <span style="color: #000000"> </span>
                    <span style="color: #8b0000">"User-Agent:
Mozilla/4.0 (compatible; MSIE 7.0;)"</span>
                    <span style="color: #000000">)</span>
                    <br />
                    <span style="color: #ff4500">$wc</span>
                    <span style="color: #a9a9a9">.</span>
                    <span style="color: #000000">Headers</span>
                    <span style="color: #a9a9a9">.</span>
                    <span style="color: #000000">Add</span>
                    <span style="color: #000000">(</span>
                    <span style="color: #8b0000">"Cookie"</span>
                    <span style="color: #a9a9a9">,</span>
                    <span style="color: #000000"> </span>
                    <span style="color: #ff4500">$cookie</span>
                    <span style="color: #000000">)</span>
                    <br />
                    <span style="color: #ff4500">$postValues</span>
                    <span style="color: #000000"> </span>
                    <span style="color: #a9a9a9">=</span>
                    <span style="color: #000000"> </span>
                    <span style="color: #0000ff">New-Object</span>
                    <span style="color: #000000"> </span>
                    <span style="color: #8a2be2">System.Collections.Specialized.NameValueCollection</span>
                    <br />
                    <span style="color: #ff4500">$postValues</span>
                    <span style="color: #a9a9a9">.</span>
                    <span style="color: #000000">Add</span>
                    <span style="color: #000000">(</span>
                    <span style="color: #8b0000">"email"</span>
                    <span style="color: #a9a9a9">,</span>
                    <span style="color: #000000"> </span>
                    <span style="color: #ff4500">$credential</span>
                    <span style="color: #a9a9a9">.</span>
                    <span style="color: #000000">Username</span>
                    <span style="color: #000000">)</span>
                    <br />
                    <span style="color: #ff4500">$postValues</span>
                    <span style="color: #a9a9a9">.</span>
                    <span style="color: #000000">Add</span>
                    <span style="color: #000000">(</span>
                    <span style="color: #8b0000">"pass"</span>
                    <span style="color: #a9a9a9">,</span>
                    <span style="color: #000000"> </span>
                    <span style="color: #ff4500">$password</span>
                    <span style="color: #000000">)</span>
                    <br />
                    <br />
                    <span style="color: #006400">## Get the resulting cookie, and convert it into the
form to be returned in the query string</span>
                    <br />
                    <span style="color: #ff4500">$result</span>
                    <span style="color: #000000"> </span>
                    <span style="color: #a9a9a9">=</span>
                    <span style="color: #000000"> </span>
                    <span style="color: #ff4500">$wc</span>
                    <span style="color: #a9a9a9">.</span>
                    <span style="color: #000000">UploadValues</span>
                    <span style="color: #000000">(</span>
                    <span style="color: #8b0000">"https://login.facebook.com/login.php?login_attempt=1"</span>
                    <span style="color: #a9a9a9">,</span>
                    <span style="color: #000000"> </span>
                    <span style="color: #ff4500">$postValues</span>
                    <span style="color: #000000">)</span>
                    <br />
                    <span style="color: #ff4500">$cookie</span>
                    <span style="color: #000000"> </span>
                    <span style="color: #a9a9a9">=</span>
                    <span style="color: #000000"> </span>
                    <span style="color: #ff4500">$wc</span>
                    <span style="color: #a9a9a9">.</span>
                    <span style="color: #000000">ResponseHeaders</span>
                    <span style="color: #a9a9a9">[</span>
                    <span style="color: #8b0000">"Set-Cookie"</span>
                    <span style="color: #a9a9a9">]</span>
                    <br />
                    <span style="color: #ff4500">$cookie</span>
                    <span style="color: #000000"> </span>
                    <span style="color: #a9a9a9">=</span>
                    <span style="color: #000000"> </span>
                    <span style="color: #000000">(</span>
                    <span style="color: #ff4500">$cookie</span>
                    <span style="color: #a9a9a9">.</span>
                    <span style="color: #000000">Split</span>
                    <span style="color: #000000">(</span>
                    <span style="color: #8b0000">','</span>
                    <span style="color: #000000">)</span>
                    <span style="color: #000000"> </span>
                    <span style="color: #a9a9a9">-match</span>
                    <span style="color: #000000"> </span>
                    <span style="color: #8b0000">'^\S+=\S+;'</span>
                    <span style="color: #000000"> </span>
                    <span style="color: #a9a9a9">-replace</span>
                    <span style="color: #000000"> </span>
                    <span style="color: #8b0000">';.*'</span>
                    <span style="color: #a9a9a9">,</span>
                    <span style="color: #8b0000">''</span>
                    <span style="color: #000000">)</span>
                    <span style="color: #000000"> </span>
                    <span style="color: #a9a9a9">-join</span>
                    <span style="color: #000000"> </span>
                    <span style="color: #8b0000">';
'</span>
                    <br />
                    <span style="color: #ff4500">$cookie</span>
                  </div>
                </td>
              </tr>
            </tbody>
          </table>
        </div>
        <p>
The most complex part of that script comes from the Set-Cookie headers returned by
the server. Information in that header limits the domain of the cookie, expiration
dates, and more. Browsers use this information to determine cookie policies, but we
want to just blindly feed it back to Facebook. The little match, replace, and join
combination converts the “Set-Cookie” syntax into one suitable to return to the server.
</p>
        <p>
Once we’ve logged into Facebook, we download the album page, cycling through successive
pages until we stop finding photos to download. Since you can derive the URL to the
large size images from the thumbnails, we don’t need to do an extra request for the
photo information page. If you wanted to extract photo comments as well, then you
would have to.
</p>
        <p>
Here is Get-FacebookAlbum.ps1:
</p>
        <div style="border-bottom: black 1px solid; border-left: black 1px solid; padding-bottom: 5px; padding-left: 5px; width: 650px; padding-right: 5px; font-family: consolas,lucida console; font-size: 10pt; overflow: auto; border-top: black 1px solid; border-right: black 1px solid; padding-top: 5px">
          <table border="0" cellspacing="0" cellpadding="5">
            <tbody>
              <tr>
                <td valign="top">
                  <div style="padding-bottom: 5px; padding-left: 5px; padding-right: 5px; font-family: consolas,lucida console; background: #cecece; font-size: 10pt; padding-top: 5px">001 
<br />
002 
<br />
003 
<br />
004 
<br />
005 
<br />
006 
<br />
007 
<br />
008 
<br />
009 
<br />
010 
<br />
011 
<br />
012 
<br />
013 
<br />
014 
<br />
015 
<br />
016 
<br />
017 
<br />
018 
<br />
019 
<br />
020 
<br />
021 
<br />
022 
<br />
023 
<br />
024 
<br />
025 
<br />
026 
<br />
027 
<br />
028 
<br />
029 
<br />
030 
<br />
031 
<br />
032 
<br />
033 
<br />
034 
<br />
035 
<br />
036 
<br />
037 
<br />
038 
<br />
039 
<br />
040 
<br />
041 
<br />
042 
<br />
043 
<br />
044 
<br />
045 
<br />
046 
<br />
047 
<br />
048 
<br />
049 
<br />
050 
<br />
051 
<br />
052 
<br />
053 
<br />
054 
<br />
055 
<br />
056 
<br />
057 
<br />
058 
<br />
059 
<br />
060 
<br /></div>
                </td>
                <td valign="top" nowrap="nowrap">
                  <div style="padding-bottom: 5px; padding-left: 5px; padding-right: 5px; font-family: consolas,lucida console; background: #fcfcfc; font-size: 10pt; padding-top: 5px">
                    <span style="color: #006400">##
Get-FacebookAlbum.ps1</span>
                    <br />
                    <span style="color: #006400">## Downloads the images attached to a Facebook photo
album</span>
                    <br />
                    <span style="color: #00008b">param</span>
                    <span style="color: #000000">(</span>
                    <span style="color: #ff4500">$Album</span>
                    <span style="color: #000000"> </span>
                    <span style="color: #a9a9a9">=</span>
                    <span style="color: #000000"> </span>
                    <span style="color: #000000">$(</span>
                    <span style="color: #0000ff">Read-Host</span>
                    <span style="color: #000000"> </span>
                    <span style="color: #8b0000">"Inital
album URL (for example, http://www.facebook.com/album.php?aid=12345&amp;id=12345&amp;ref=nf)"</span>
                    <span style="color: #000000">)</span>
                    <span style="color: #a9a9a9">,</span>
                    <br />
                    <span style="color: #000000">    </span>
                    <span style="color: #ff4500">$Prefix</span>
                    <span style="color: #a9a9a9">,</span>
                    <br />
                    <span style="color: #000000">    </span>
                    <span style="color: #ff4500">$Cookie</span>
                    <br />
                    <span style="color: #000000">    </span>
                    <span style="color: #000000">)</span>
                    <br />
                    <span style="color: #000000">    </span>
                    <br />
                    <span style="color: #ff4500">$albumId</span>
                    <span style="color: #000000"> </span>
                    <span style="color: #a9a9a9">=</span>
                    <span style="color: #000000"> </span>
                    <span style="color: #ff4500">$album</span>
                    <span style="color: #000000"> </span>
                    <span style="color: #a9a9a9">-replace</span>
                    <span style="color: #000000"> </span>
                    <span style="color: #8b0000">'.*id=([\d+]+).*'</span>
                    <span style="color: #a9a9a9">,</span>
                    <span style="color: #8b0000">'$1'</span>
                    <br />
                    <br />
                    <span style="color: #00008b">if</span>
                    <span style="color: #000000">(</span>
                    <span style="color: #a9a9a9">-not</span>
                    <span style="color: #000000"> </span>
                    <span style="color: #ff4500">$Cookie</span>
                    <span style="color: #000000">)</span>
                    <br />
                    <span style="color: #000000">{</span>
                    <br />
                    <span style="color: #000000">    </span>
                    <span style="color: #ff4500">$cookie</span>
                    <span style="color: #000000"> </span>
                    <span style="color: #a9a9a9">=</span>
                    <span style="color: #000000"> </span>
                    <span style="color: #0000ff">Get-FacebookCookie</span>
                    <br />
                    <span style="color: #000000">}</span>
                    <br />
                    <br />
                    <span style="color: #ff4500">$pageNumber</span>
                    <span style="color: #000000"> </span>
                    <span style="color: #a9a9a9">=</span>
                    <span style="color: #000000"> </span>
                    <span style="color: #800080">1</span>
                    <br />
                    <span style="color: #00008b">do</span>
                    <br />
                    <span style="color: #000000">{</span>
                    <br />
                    <span style="color: #000000">    </span>
                    <span style="color: #006400">##
Go through each page in the album. Extract the thumbnail images (which have a pattern</span>
                    <br />
                    <span style="color: #000000">    </span>
                    <span style="color: #006400">##
of /s______.jpg or ______s.jpg)</span>
                    <br />
                    <span style="color: #000000">    </span>
                    <span style="color: #ff4500">$foundPhotos</span>
                    <span style="color: #000000"> </span>
                    <span style="color: #a9a9a9">=</span>
                    <span style="color: #000000"> </span>
                    <span style="color: #ff4500">$false</span>
                    <br />
                    <span style="color: #000000">    </span>
                    <span style="color: #8b0000">"Getting
album $album, page $pageNumber"</span>
                    <br />
                    <br />
                    <span style="color: #000000">    </span>
                    <span style="color: #ff4500">$wc</span>
                    <span style="color: #000000"> </span>
                    <span style="color: #a9a9a9">=</span>
                    <span style="color: #000000"> </span>
                    <span style="color: #0000ff">New-Object</span>
                    <span style="color: #000000"> </span>
                    <span style="color: #8a2be2">System.Net.WebClient</span>
                    <br />
                    <span style="color: #000000">    </span>
                    <span style="color: #ff4500">$wc</span>
                    <span style="color: #a9a9a9">.</span>
                    <span style="color: #000000">Headers</span>
                    <span style="color: #a9a9a9">.</span>
                    <span style="color: #000000">Add</span>
                    <span style="color: #000000">(</span>
                    <span style="color: #8b0000">"User-Agent"</span>
                    <span style="color: #a9a9a9">,</span>
                    <span style="color: #000000"> </span>
                    <span style="color: #8b0000">"User-Agent:
Mozilla/4.0 (compatible; MSIE 7.0;)"</span>
                    <span style="color: #000000">)</span>
                    <br />
                    <span style="color: #000000">    </span>
                    <span style="color: #ff4500">$wc</span>
                    <span style="color: #a9a9a9">.</span>
                    <span style="color: #000000">Headers</span>
                    <span style="color: #a9a9a9">.</span>
                    <span style="color: #000000">Add</span>
                    <span style="color: #000000">(</span>
                    <span style="color: #8b0000">"Cookie"</span>
                    <span style="color: #a9a9a9">,</span>
                    <span style="color: #000000"> </span>
                    <span style="color: #ff4500">$cookie</span>
                    <span style="color: #000000">)</span>
                    <br />
                    <span style="color: #000000">    </span>
                    <span style="color: #ff4500">$result</span>
                    <span style="color: #000000"> </span>
                    <span style="color: #a9a9a9">=</span>
                    <span style="color: #000000"> </span>
                    <span style="color: #ff4500">$wc</span>
                    <span style="color: #a9a9a9">.</span>
                    <span style="color: #000000">DownloadString</span>
                    <span style="color: #000000">(</span>
                    <span style="color: #ff4500">$album</span>
                    <span style="color: #000000"> </span>
                    <span style="color: #a9a9a9">+</span>
                    <span style="color: #000000"> </span>
                    <span style="color: #8b0000">"&amp;page=$pageNumber"</span>
                    <span style="color: #000000">)</span>
                    <br />
                    <br />
                    <span style="color: #000000">    </span>
                    <span style="color: #006400">##
Regex for images</span>
                    <br />
                    <span style="color: #000000">    </span>
                    <span style="color: #ff4500">$regex</span>
                    <span style="color: #000000"> </span>
                    <span style="color: #a9a9a9">=</span>
                    <span style="color: #000000"> </span>
                    <span style="color: #8b0000">"&lt;\s*img\s*[^&gt;]*?src\s*=\s*[`"']*([^`"'&gt;]+)[^&gt;]*?&gt;"</span>
                    <br />
                    <span style="color: #000000">    </span>
                    <br />
                    <span style="color: #000000">    </span>
                    <span style="color: #ff4500">$photos</span>
                    <span style="color: #000000"> </span>
                    <span style="color: #a9a9a9">=</span>
                    <span style="color: #000000"> </span>
                    <span style="color: #000000">(</span>
                    <span style="color: #ff4500">$result</span>
                    <span style="color: #000000"> </span>
                    <span style="color: #a9a9a9">|</span>
                    <span style="color: #000000"> </span>
                    <span style="color: #0000ff">Select-String</span>
                    <span style="color: #000000"> </span>
                    <span style="color: #ff4500">$regex</span>
                    <span style="color: #000000"> </span>
                    <span style="color: #000080">-AllMatches</span>
                    <span style="color: #000000">)</span>
                    <span style="color: #a9a9a9">.</span>
                    <span style="color: #000000">Matches</span>
                    <span style="color: #000000"> </span>
                    <span style="color: #a9a9a9">|</span>
                    <span style="color: #000000"> </span>
                    <span style="color: #0000ff">%</span>
                    <span style="color: #000000"> </span>
                    <span style="color: #000000">{</span>
                    <span style="color: #000000"> </span>
                    <span style="color: #ff4500">$_</span>
                    <span style="color: #a9a9a9">.</span>
                    <span style="color: #000000">Groups</span>
                    <span style="color: #a9a9a9">[</span>
                    <span style="color: #800080">1</span>
                    <span style="color: #a9a9a9">]</span>
                    <span style="color: #a9a9a9">.</span>
                    <span style="color: #000000">Value</span>
                    <span style="color: #000000"> </span>
                    <span style="color: #000000">}</span>
                    <br />
                    <span style="color: #000000">    </span>
                    <span style="color: #ff4500">$photos</span>
                    <span style="color: #000000"> </span>
                    <span style="color: #a9a9a9">=</span>
                    <span style="color: #000000"> </span>
                    <span style="color: #ff4500">$photos</span>
                    <span style="color: #000000"> </span>
                    <span style="color: #a9a9a9">-match</span>
                    <span style="color: #000000"> </span>
                    <span style="color: #8b0000">"_"</span>
                    <span style="color: #000000"> </span>
                    <span style="color: #a9a9a9">+</span>
                    <span style="color: #000000"> </span>
                    <span style="color: #ff4500">$albumId</span>
                    <span style="color: #000000"> </span>
                    <span style="color: #a9a9a9">+</span>
                    <span style="color: #000000"> </span>
                    <span style="color: #8b0000">"_"</span>
                    <br />
                    <span style="color: #000000">    </span>
                    <span style="color: #ff4500">$photos</span>
                    <span style="color: #000000"> </span>
                    <span style="color: #a9a9a9">=</span>
                    <span style="color: #000000"> </span>
                    <span style="color: #ff4500">$photos</span>
                    <span style="color: #000000"> </span>
                    <span style="color: #a9a9a9">-replace</span>
                    <span style="color: #000000"> </span>
                    <span style="color: #8b0000">'/s'</span>
                    <span style="color: #a9a9a9">,</span>
                    <span style="color: #8b0000">'/n'</span>
                    <br />
                    <span style="color: #000000">    </span>
                    <span style="color: #ff4500">$photos</span>
                    <span style="color: #000000"> </span>
                    <span style="color: #a9a9a9">=</span>
                    <span style="color: #000000"> </span>
                    <span style="color: #ff4500">$photos</span>
                    <span style="color: #000000"> </span>
                    <span style="color: #a9a9a9">-replace</span>
                    <span style="color: #000000"> </span>
                    <span style="color: #8b0000">'_s.jpg'</span>
                    <span style="color: #a9a9a9">,</span>
                    <span style="color: #8b0000">'_n.jpg'</span>
                    <br />
                    <span style="color: #000000">    </span>
                    <br />
                    <span style="color: #000000">    </span>
                    <span style="color: #8b0000">"Found
photos:"</span>
                    <br />
                    <span style="color: #000000">    </span>
                    <span style="color: #ff4500">$photos</span>
                    <br />
                    <span style="color: #000000">    </span>
                    <br />
                    <span style="color: #000000">    </span>
                    <span style="color: #ff4500">$wc</span>
                    <span style="color: #000000"> </span>
                    <span style="color: #a9a9a9">=</span>
                    <span style="color: #000000"> </span>
                    <span style="color: #0000ff">New-Object</span>
                    <span style="color: #000000"> </span>
                    <span style="color: #8a2be2">System.Net.WebClient</span>
                    <br />
                    <span style="color: #000000">    </span>
                    <br />
                    <span style="color: #000000">    </span>
                    <span style="color: #006400">##
For each of the photos we found, download the large size </span>
                    <br />
                    <span style="color: #000000">    </span>
                    <span style="color: #00008b">foreach</span>
                    <span style="color: #000000">(</span>
                    <span style="color: #ff4500">$photo</span>
                    <span style="color: #000000"> </span>
                    <span style="color: #00008b">in</span>
                    <span style="color: #000000"> </span>
                    <span style="color: #ff4500">$photos</span>
                    <span style="color: #000000"> </span>
                    <span style="color: #a9a9a9">|</span>
                    <span style="color: #000000"> </span>
                    <span style="color: #0000ff">?</span>
                    <span style="color: #000000"> </span>
                    <span style="color: #000000">{</span>
                    <span style="color: #000000"> </span>
                    <span style="color: #ff4500">$_</span>
                    <span style="color: #a9a9a9">.</span>
                    <span style="color: #000000">Trim</span>
                    <span style="color: #000000">(</span>
                    <span style="color: #000000">)</span>
                    <span style="color: #000000"> </span>
                    <span style="color: #000000">}</span>
                    <span style="color: #000000">)</span>
                    <br />
                    <span style="color: #000000">    </span>
                    <span style="color: #000000">{</span>
                    <br />
                    <span style="color: #000000">        </span>
                    <span style="color: #ff4500">$foundPhotos</span>
                    <span style="color: #000000"> </span>
                    <span style="color: #a9a9a9">=</span>
                    <span style="color: #000000"> </span>
                    <span style="color: #ff4500">$true</span>
                    <br />
                    <span style="color: #000000">        </span>
                    <span style="color: #ff4500">$uri</span>
                    <span style="color: #000000"> </span>
                    <span style="color: #a9a9a9">=</span>
                    <span style="color: #000000"> </span>
                    <span style="color: #008080">[Uri]</span>
                    <span style="color: #000000"> </span>
                    <span style="color: #ff4500">$photo</span>
                    <br />
                    <span style="color: #000000">        </span>
                    <span style="color: #ff4500">$dest</span>
                    <span style="color: #000000"> </span>
                    <span style="color: #a9a9a9">=</span>
                    <span style="color: #000000"> </span>
                    <span style="color: #ff4500">$uri</span>
                    <span style="color: #a9a9a9">.</span>
                    <span style="color: #000000">LocalPath</span>
                    <span style="color: #a9a9a9">.</span>
                    <span style="color: #000000">Replace</span>
                    <span style="color: #000000">(</span>
                    <span style="color: #8b0000">"\"</span>
                    <span style="color: #a9a9a9">,</span>
                    <span style="color: #000000"> </span>
                    <span style="color: #8b0000">"_"</span>
                    <span style="color: #000000">)</span>
                    <br />
                    <span style="color: #000000">        </span>
                    <span style="color: #ff4500">$dest</span>
                    <span style="color: #000000"> </span>
                    <span style="color: #a9a9a9">=</span>
                    <span style="color: #000000"> </span>
                    <span style="color: #ff4500">$uri</span>
                    <span style="color: #a9a9a9">.</span>
                    <span style="color: #000000">LocalPath</span>
                    <span style="color: #a9a9a9">.</span>
                    <span style="color: #000000">Replace</span>
                    <span style="color: #000000">(</span>
                    <span style="color: #8b0000">"/"</span>
                    <span style="color: #a9a9a9">,</span>
                    <span style="color: #000000"> </span>
                    <span style="color: #8b0000">"_"</span>
                    <span style="color: #000000">)</span>
                    <br />
                    <span style="color: #000000">        </span>
                    <span style="color: #ff4500">$dest</span>
                    <span style="color: #000000"> </span>
                    <span style="color: #a9a9a9">=</span>
                    <span style="color: #000000"> </span>
                    <span style="color: #0000ff">Join-Path</span>
                    <span style="color: #000000"> </span>
                    <span style="color: #ff4500">$pwd</span>
                    <span style="color: #000000"> </span>
                    <span style="color: #8b0000">"$Prefix$dest"</span>
                    <br />
                    <span style="color: #000000">        </span>
                    <span style="color: #00008b">if</span>
                    <span style="color: #000000">(</span>
                    <span style="color: #a9a9a9">-not</span>
                    <span style="color: #000000"> </span>
                    <span style="color: #000000">(</span>
                    <span style="color: #0000ff">Test-Path</span>
                    <span style="color: #000000"> </span>
                    <span style="color: #ff4500">$dest</span>
                    <span style="color: #000000">)</span>
                    <span style="color: #000000">)</span>
                    <br />
                    <span style="color: #000000">        </span>
                    <span style="color: #000000">{</span>
                    <br />
                    <span style="color: #000000">            </span>
                    <span style="color: #8b0000">"Downloading
$dest"</span>
                    <br />
                    <span style="color: #000000">            </span>
                    <span style="color: #ff4500">$wc</span>
                    <span style="color: #a9a9a9">.</span>
                    <span style="color: #000000">DownloadFile</span>
                    <span style="color: #000000">(</span>
                    <span style="color: #ff4500">$photo</span>
                    <span style="color: #a9a9a9">,</span>
                    <span style="color: #000000"> </span>
                    <span style="color: #ff4500">$dest</span>
                    <span style="color: #000000">)</span>
                    <br />
                    <span style="color: #000000">        </span>
                    <span style="color: #000000">}</span>
                    <br />
                    <span style="color: #000000">    </span>
                    <span style="color: #000000">}</span>
                    <br />
                    <span style="color: #000000">    </span>
                    <br />
                    <span style="color: #000000">    </span>
                    <span style="color: #ff4500">$pageNumber</span>
                    <span style="color: #a9a9a9">++</span>
                    <br />
                    <span style="color: #000000">}</span>
                    <span style="color: #000000"> </span>
                    <span style="color: #00008b">while</span>
                    <span style="color: #000000">(</span>
                    <span style="color: #ff4500">$foundPhotos</span>
                    <span style="color: #000000">)</span>
                    <span style="color: #000000">;</span>
                    <br />
                    <br />
                    <span style="color: #8b0000">"(None)"</span>
                    <br />
                  </div>
                </td>
              </tr>
            </tbody>
          </table>
        </div>
        <p>
 
</p>
        <p>
So in under 100 lines of code, we’ve got ourselves an image downloader.
</p>
        <img width="0" height="0" src="http://www.leeholmes.com/blog/aggbug.ashx?id=cae682e6-76f4-491d-a206-239292eae40b" />
      </body>
      <title>More advanced HTTP scripting: Facebook Photo Album Downloader</title>
      <guid isPermaLink="false">http://www.leeholmes.com/blog/PermaLink,guid,cae682e6-76f4-491d-a206-239292eae40b.aspx</guid>
      <link>http://www.leeholmes.com/blog/MoreAdvancedHTTPScriptingFacebookPhotoAlbumDownloader.aspx</link>
      <pubDate>Fri, 04 Sep 2009 07:20:03 GMT</pubDate>
      <description>&lt;p&gt;
I wanted to download a photo album from Facebook, but of course there’s no simple
API or option to do that. Searching the internet finds a couple of options (a Firefox
plugin, a Facebook app,) but I couldn’t seem to find anything standalone.
&lt;/p&gt;
&lt;p&gt;
This gives another great opportunity to talk about advanced HTTP scripting in PowerShell.
We’ve talked about it in the past (here: &lt;a title="http://www.leeholmes.com/blog/AdvancedHTTPASPNetScriptingWithPowerShell.aspx" href="http://www.leeholmes.com/blog/AdvancedHTTPASPNetScriptingWithPowerShell.aspx"&gt;http://www.leeholmes.com/blog/AdvancedHTTPASPNetScriptingWithPowerShell.aspx&lt;/a&gt;,)
so this script introduces some new techniques.
&lt;/p&gt;
&lt;p&gt;
There are a couple of challenges for scripting Facebook, especially using the techniques
in the earlier post.
&lt;/p&gt;
&lt;p&gt;
The first is that the login sequence is secure :) The login page gets served over
SSL, meaning that the basic Send-TcpRequest commands we did previously won’t work.
SSL requires encryption and a complex handshake. Luckily the System.Net.WebClient
class provides that for use.
&lt;/p&gt;
&lt;p&gt;
The second issue is that the cookies are dynamic, and given out in two stages. You
need to first connect to the main Facebook homepage, at which point you get a couple
of session cookies. Then, you connect to the login page, at which point you get some
login cookies. Once you have THOSE, you can script the rest of Facebook.
&lt;/p&gt;
&lt;p&gt;
Here is Get-FacebookCookie.ps1:
&lt;/p&gt;
&lt;div style="border-bottom: black 1px solid; border-left: black 1px solid; padding-bottom: 5px; padding-left: 5px; width: 650px; padding-right: 5px; font-family: consolas,lucida console; font-size: 10pt; overflow: auto; border-top: black 1px solid; border-right: black 1px solid; padding-top: 5px"&gt;
&lt;table border="0" cellspacing="0" cellpadding="5"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td valign="top"&gt;
&lt;div style="padding-bottom: 5px; padding-left: 5px; padding-right: 5px; font-family: consolas,lucida console; background: #cecece; font-size: 10pt; padding-top: 5px"&gt;001 
&lt;br /&gt;
002 
&lt;br /&gt;
003 
&lt;br /&gt;
004 
&lt;br /&gt;
005 
&lt;br /&gt;
006 
&lt;br /&gt;
007 
&lt;br /&gt;
008 
&lt;br /&gt;
009 
&lt;br /&gt;
010 
&lt;br /&gt;
011 
&lt;br /&gt;
012 
&lt;br /&gt;
013 
&lt;br /&gt;
014 
&lt;br /&gt;
015 
&lt;br /&gt;
016 
&lt;br /&gt;
017 
&lt;br /&gt;
018 
&lt;br /&gt;
019 
&lt;br /&gt;
020 
&lt;br /&gt;
021 
&lt;br /&gt;
022 
&lt;br /&gt;
023 
&lt;br /&gt;
024 
&lt;br /&gt;
025 
&lt;br /&gt;
026 
&lt;br /&gt;
027 
&lt;br /&gt;
028 
&lt;br /&gt;
029 
&lt;br /&gt;
030 
&lt;br /&gt;
031 
&lt;br /&gt;
032 
&lt;br /&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;td valign="top" nowrap="nowrap"&gt;
&lt;div style="padding-bottom: 5px; padding-left: 5px; padding-right: 5px; font-family: consolas,lucida console; background: #fcfcfc; font-size: 10pt; padding-top: 5px"&gt;&lt;span style="color: #006400"&gt;##
Get-FacebookCookie.ps1&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #006400"&gt;## Logs into Facebook, returning the cookie required
for further operations&lt;/span&gt; 
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: #00008b"&gt;param&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$Credential&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;/span&gt; 
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: #ff4500"&gt;$Credential&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;Get-Credential&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$Credential&lt;/span&gt; 
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: #006400"&gt;## Get initial cookies&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #ff4500"&gt;$wc&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;New-Object&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #8a2be2"&gt;System.Net.WebClient&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #ff4500"&gt;$wc&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;.&lt;/span&gt;&lt;span style="color: #000000"&gt;Headers&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;.&lt;/span&gt;&lt;span style="color: #000000"&gt;Add&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #8b0000"&gt;&amp;quot;User-Agent&amp;quot;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;,&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #8b0000"&gt;&amp;quot;User-Agent:
Mozilla/4.0 (compatible; MSIE 7.0;)&amp;quot;&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;/span&gt; 
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: #ff4500"&gt;$result&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$wc&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;.&lt;/span&gt;&lt;span style="color: #000000"&gt;DownloadString&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #8b0000"&gt;&amp;quot;http://www.facebook.com/&amp;quot;&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #ff4500"&gt;$cookie&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$wc&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;.&lt;/span&gt;&lt;span style="color: #000000"&gt;ResponseHeaders&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;[&lt;/span&gt;&lt;span style="color: #8b0000"&gt;&amp;quot;Set-Cookie&amp;quot;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;]&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #ff4500"&gt;$cookie&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$cookie&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;.&lt;/span&gt;&lt;span style="color: #000000"&gt;Split&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #8b0000"&gt;','&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;-match&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #8b0000"&gt;'^\S+=\S+;'&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;-replace&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #8b0000"&gt;';.*'&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;,&lt;/span&gt;&lt;span style="color: #8b0000"&gt;''&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;-join&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #8b0000"&gt;';
'&lt;/span&gt; 
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: #006400"&gt;## Login&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #ff4500"&gt;$bstr&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #008080"&gt;[System.Runtime.InteropServices.Marshal]&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;::&lt;/span&gt;&lt;span style="color: #000000"&gt;SecureStringToBSTR&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$credential&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;.&lt;/span&gt;&lt;span style="color: #000000"&gt;Password&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #ff4500"&gt;$password&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #008080"&gt;[System.Runtime.InteropServices.Marshal]&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;::&lt;/span&gt;&lt;span style="color: #000000"&gt;PtrToStringAuto&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$bstr&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #008080"&gt;[System.Runtime.InteropServices.Marshal]&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;::&lt;/span&gt;&lt;span style="color: #000000"&gt;ZeroFreeBstr&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$bstr&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;/span&gt; 
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: #ff4500"&gt;$wc&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;New-Object&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #8a2be2"&gt;System.Net.WebClient&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #ff4500"&gt;$wc&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;.&lt;/span&gt;&lt;span style="color: #000000"&gt;Headers&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;.&lt;/span&gt;&lt;span style="color: #000000"&gt;Add&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #8b0000"&gt;&amp;quot;User-Agent&amp;quot;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;,&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #8b0000"&gt;&amp;quot;User-Agent:
Mozilla/4.0 (compatible; MSIE 7.0;)&amp;quot;&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #ff4500"&gt;$wc&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;.&lt;/span&gt;&lt;span style="color: #000000"&gt;Headers&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;.&lt;/span&gt;&lt;span style="color: #000000"&gt;Add&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #8b0000"&gt;&amp;quot;Cookie&amp;quot;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;,&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$cookie&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #ff4500"&gt;$postValues&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;New-Object&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #8a2be2"&gt;System.Collections.Specialized.NameValueCollection&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #ff4500"&gt;$postValues&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;.&lt;/span&gt;&lt;span style="color: #000000"&gt;Add&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #8b0000"&gt;&amp;quot;email&amp;quot;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;,&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$credential&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;.&lt;/span&gt;&lt;span style="color: #000000"&gt;Username&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #ff4500"&gt;$postValues&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;.&lt;/span&gt;&lt;span style="color: #000000"&gt;Add&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #8b0000"&gt;&amp;quot;pass&amp;quot;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;,&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$password&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;/span&gt; 
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: #006400"&gt;## Get the resulting cookie, and convert it into the
form to be returned in the query string&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #ff4500"&gt;$result&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$wc&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;.&lt;/span&gt;&lt;span style="color: #000000"&gt;UploadValues&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #8b0000"&gt;&amp;quot;https://login.facebook.com/login.php?login_attempt=1&amp;quot;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;,&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$postValues&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #ff4500"&gt;$cookie&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$wc&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;.&lt;/span&gt;&lt;span style="color: #000000"&gt;ResponseHeaders&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;[&lt;/span&gt;&lt;span style="color: #8b0000"&gt;&amp;quot;Set-Cookie&amp;quot;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;]&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #ff4500"&gt;$cookie&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$cookie&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;.&lt;/span&gt;&lt;span style="color: #000000"&gt;Split&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #8b0000"&gt;','&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;-match&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #8b0000"&gt;'^\S+=\S+;'&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;-replace&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #8b0000"&gt;';.*'&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;,&lt;/span&gt;&lt;span style="color: #8b0000"&gt;''&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;-join&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #8b0000"&gt;';
'&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #ff4500"&gt;$cookie&lt;/span&gt; 
&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;p&gt;
The most complex part of that script comes from the Set-Cookie headers returned by
the server. Information in that header limits the domain of the cookie, expiration
dates, and more. Browsers use this information to determine cookie policies, but we
want to just blindly feed it back to Facebook. The little match, replace, and join
combination converts the “Set-Cookie” syntax into one suitable to return to the server.
&lt;/p&gt;
&lt;p&gt;
Once we’ve logged into Facebook, we download the album page, cycling through successive
pages until we stop finding photos to download. Since you can derive the URL to the
large size images from the thumbnails, we don’t need to do an extra request for the
photo information page. If you wanted to extract photo comments as well, then you
would have to.
&lt;/p&gt;
&lt;p&gt;
Here is Get-FacebookAlbum.ps1:
&lt;/p&gt;
&lt;div style="border-bottom: black 1px solid; border-left: black 1px solid; padding-bottom: 5px; padding-left: 5px; width: 650px; padding-right: 5px; font-family: consolas,lucida console; font-size: 10pt; overflow: auto; border-top: black 1px solid; border-right: black 1px solid; padding-top: 5px"&gt;
&lt;table border="0" cellspacing="0" cellpadding="5"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td valign="top"&gt;
&lt;div style="padding-bottom: 5px; padding-left: 5px; padding-right: 5px; font-family: consolas,lucida console; background: #cecece; font-size: 10pt; padding-top: 5px"&gt;001 
&lt;br /&gt;
002 
&lt;br /&gt;
003 
&lt;br /&gt;
004 
&lt;br /&gt;
005 
&lt;br /&gt;
006 
&lt;br /&gt;
007 
&lt;br /&gt;
008 
&lt;br /&gt;
009 
&lt;br /&gt;
010 
&lt;br /&gt;
011 
&lt;br /&gt;
012 
&lt;br /&gt;
013 
&lt;br /&gt;
014 
&lt;br /&gt;
015 
&lt;br /&gt;
016 
&lt;br /&gt;
017 
&lt;br /&gt;
018 
&lt;br /&gt;
019 
&lt;br /&gt;
020 
&lt;br /&gt;
021 
&lt;br /&gt;
022 
&lt;br /&gt;
023 
&lt;br /&gt;
024 
&lt;br /&gt;
025 
&lt;br /&gt;
026 
&lt;br /&gt;
027 
&lt;br /&gt;
028 
&lt;br /&gt;
029 
&lt;br /&gt;
030 
&lt;br /&gt;
031 
&lt;br /&gt;
032 
&lt;br /&gt;
033 
&lt;br /&gt;
034 
&lt;br /&gt;
035 
&lt;br /&gt;
036 
&lt;br /&gt;
037 
&lt;br /&gt;
038 
&lt;br /&gt;
039 
&lt;br /&gt;
040 
&lt;br /&gt;
041 
&lt;br /&gt;
042 
&lt;br /&gt;
043 
&lt;br /&gt;
044 
&lt;br /&gt;
045 
&lt;br /&gt;
046 
&lt;br /&gt;
047 
&lt;br /&gt;
048 
&lt;br /&gt;
049 
&lt;br /&gt;
050 
&lt;br /&gt;
051 
&lt;br /&gt;
052 
&lt;br /&gt;
053 
&lt;br /&gt;
054 
&lt;br /&gt;
055 
&lt;br /&gt;
056 
&lt;br /&gt;
057 
&lt;br /&gt;
058 
&lt;br /&gt;
059 
&lt;br /&gt;
060 
&lt;br /&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;td valign="top" nowrap="nowrap"&gt;
&lt;div style="padding-bottom: 5px; padding-left: 5px; padding-right: 5px; font-family: consolas,lucida console; background: #fcfcfc; font-size: 10pt; padding-top: 5px"&gt;&lt;span style="color: #006400"&gt;##
Get-FacebookAlbum.ps1&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #006400"&gt;## Downloads the images attached to a Facebook photo
album&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #00008b"&gt;param&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$Album&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;$(&lt;/span&gt;&lt;span style="color: #0000ff"&gt;Read-Host&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #8b0000"&gt;&amp;quot;Inital
album URL (for example, http://www.facebook.com/album.php?aid=12345&amp;amp;id=12345&amp;amp;ref=nf)&amp;quot;&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;,&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #ff4500"&gt;$Prefix&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;,&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #ff4500"&gt;$Cookie&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #ff4500"&gt;$albumId&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$album&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;-replace&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #8b0000"&gt;'.*id=([\d+]+).*'&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;,&lt;/span&gt;&lt;span style="color: #8b0000"&gt;'$1'&lt;/span&gt; 
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: #00008b"&gt;if&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;-not&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$Cookie&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;{&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #ff4500"&gt;$cookie&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;Get-FacebookCookie&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;}&lt;/span&gt; 
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: #ff4500"&gt;$pageNumber&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #800080"&gt;1&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #00008b"&gt;do&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;{&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #006400"&gt;##
Go through each page in the album. Extract the thumbnail images (which have a pattern&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #006400"&gt;##
of /s______.jpg or ______s.jpg)&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #ff4500"&gt;$foundPhotos&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$false&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #8b0000"&gt;&amp;quot;Getting
album $album, page $pageNumber&amp;quot;&lt;/span&gt; 
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #ff4500"&gt;$wc&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;New-Object&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #8a2be2"&gt;System.Net.WebClient&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #ff4500"&gt;$wc&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;.&lt;/span&gt;&lt;span style="color: #000000"&gt;Headers&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;.&lt;/span&gt;&lt;span style="color: #000000"&gt;Add&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #8b0000"&gt;&amp;quot;User-Agent&amp;quot;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;,&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #8b0000"&gt;&amp;quot;User-Agent:
Mozilla/4.0 (compatible; MSIE 7.0;)&amp;quot;&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #ff4500"&gt;$wc&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;.&lt;/span&gt;&lt;span style="color: #000000"&gt;Headers&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;.&lt;/span&gt;&lt;span style="color: #000000"&gt;Add&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #8b0000"&gt;&amp;quot;Cookie&amp;quot;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;,&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$cookie&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #ff4500"&gt;$result&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$wc&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;.&lt;/span&gt;&lt;span style="color: #000000"&gt;DownloadString&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$album&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;+&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #8b0000"&gt;&amp;quot;&amp;amp;page=$pageNumber&amp;quot;&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;/span&gt; 
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #006400"&gt;##
Regex for images&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #ff4500"&gt;$regex&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #8b0000"&gt;&amp;quot;&amp;lt;\s*img\s*[^&amp;gt;]*?src\s*=\s*[`&amp;quot;']*([^`&amp;quot;'&amp;gt;]+)[^&amp;gt;]*?&amp;gt;&amp;quot;&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #ff4500"&gt;$photos&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$result&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;|&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;Select-String&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$regex&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000080"&gt;-AllMatches&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;.&lt;/span&gt;&lt;span style="color: #000000"&gt;Matches&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;|&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;%&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;{&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$_&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;.&lt;/span&gt;&lt;span style="color: #000000"&gt;Groups&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;[&lt;/span&gt;&lt;span style="color: #800080"&gt;1&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;]&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;.&lt;/span&gt;&lt;span style="color: #000000"&gt;Value&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;}&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #ff4500"&gt;$photos&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$photos&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;-match&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #8b0000"&gt;&amp;quot;_&amp;quot;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;+&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$albumId&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;+&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #8b0000"&gt;&amp;quot;_&amp;quot;&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #ff4500"&gt;$photos&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$photos&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;-replace&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #8b0000"&gt;'/s'&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;,&lt;/span&gt;&lt;span style="color: #8b0000"&gt;'/n'&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #ff4500"&gt;$photos&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$photos&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;-replace&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #8b0000"&gt;'_s.jpg'&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;,&lt;/span&gt;&lt;span style="color: #8b0000"&gt;'_n.jpg'&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #8b0000"&gt;&amp;quot;Found
photos:&amp;quot;&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #ff4500"&gt;$photos&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #ff4500"&gt;$wc&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;New-Object&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #8a2be2"&gt;System.Net.WebClient&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #006400"&gt;##
For each of the photos we found, download the large size &lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #00008b"&gt;foreach&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$photo&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #00008b"&gt;in&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$photos&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;|&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;?&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;{&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$_&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;.&lt;/span&gt;&lt;span style="color: #000000"&gt;Trim&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;}&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #000000"&gt;{&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #ff4500"&gt;$foundPhotos&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$true&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #ff4500"&gt;$uri&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #008080"&gt;[Uri]&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$photo&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #ff4500"&gt;$dest&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$uri&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;.&lt;/span&gt;&lt;span style="color: #000000"&gt;LocalPath&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;.&lt;/span&gt;&lt;span style="color: #000000"&gt;Replace&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #8b0000"&gt;&amp;quot;\&amp;quot;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;,&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #8b0000"&gt;&amp;quot;_&amp;quot;&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #ff4500"&gt;$dest&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$uri&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;.&lt;/span&gt;&lt;span style="color: #000000"&gt;LocalPath&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;.&lt;/span&gt;&lt;span style="color: #000000"&gt;Replace&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #8b0000"&gt;&amp;quot;/&amp;quot;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;,&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #8b0000"&gt;&amp;quot;_&amp;quot;&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #ff4500"&gt;$dest&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;Join-Path&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$pwd&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #8b0000"&gt;&amp;quot;$Prefix$dest&amp;quot;&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #00008b"&gt;if&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;-not&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #0000ff"&gt;Test-Path&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$dest&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #000000"&gt;{&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #8b0000"&gt;&amp;quot;Downloading
$dest&amp;quot;&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #ff4500"&gt;$wc&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;.&lt;/span&gt;&lt;span style="color: #000000"&gt;DownloadFile&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$photo&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;,&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$dest&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #000000"&gt;}&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #000000"&gt;}&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #ff4500"&gt;$pageNumber&lt;/span&gt;&lt;span style="color: #a9a9a9"&gt;++&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;}&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #00008b"&gt;while&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #ff4500"&gt;$foundPhotos&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;/span&gt;&lt;span style="color: #000000"&gt;;&lt;/span&gt; 
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: #8b0000"&gt;&amp;quot;(None)&amp;quot;&lt;/span&gt; 
&lt;br /&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;p&gt;
&amp;#160;
&lt;/p&gt;
&lt;p&gt;
So in under 100 lines of code, we’ve got ourselves an image downloader.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.leeholmes.com/blog/aggbug.ashx?id=cae682e6-76f4-491d-a206-239292eae40b" /&gt;</description>
      <comments>http://www.leeholmes.com/blog/CommentView,guid,cae682e6-76f4-491d-a206-239292eae40b.aspx</comments>
    </item>
    <item>
      <trackback:ping>http://www.leeholmes.com/blog/Trackback.aspx?guid=deef92cb-ef69-458d-8bc4-7e90ee09eed0</trackback:ping>
      <pingback:server>http://www.leeholmes.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.leeholmes.com/blog/PermaLink,guid,deef92cb-ef69-458d-8bc4-7e90ee09eed0.aspx</pingback:target>
      <dc:creator>
      </dc:creator>
      <wfw:comment>http://www.leeholmes.com/blog/CommentView,guid,deef92cb-ef69-458d-8bc4-7e90ee09eed0.aspx</wfw:comment>
      <wfw:commentRss>http://www.leeholmes.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=deef92cb-ef69-458d-8bc4-7e90ee09eed0</wfw:commentRss>
      <slash:comments>3</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Despite being a fan of security, I’ve always run Windows Update in “Download and Notify”
mode for all of my machines. Having Windows Update reboot my machine without warning
at 3:00 AM is just too destructive.
</p>
        <p>
This has two negative effects:
</p>
        <p>
- Security patches that don’t require a reboot are needlessly postponed. 
<br />
- <a href="http://www.microsoft.com/forefront/clientsecurity/en/us/faq.aspx">Programs
that auto-update frequently via Microsoft Update</a> turn into a permanent task-bar
nag that you have updates to install.
</p>
        <p>
After doing some research, it turns out that it’s possible to have the best of both
worlds with just a little configuration. Set Microsoft Update to install updates automatically,
and then set a Group Policy flag that prevents auto-reboot. Problem solved!
</p>
        <p>
          <a title="http://blogs.technet.com/mu/archive/2008/10/02/windows-update-and-automatic-reboots.aspx" href="http://blogs.technet.com/mu/archive/2008/10/02/windows-update-and-automatic-reboots.aspx">http://blogs.technet.com/mu/archive/2008/10/02/windows-update-and-automatic-reboots.aspx</a>
        </p>
        <img width="0" height="0" src="http://www.leeholmes.com/blog/aggbug.ashx?id=deef92cb-ef69-458d-8bc4-7e90ee09eed0" />
      </body>
      <title>Auto-Updating With No Reboot</title>
      <guid isPermaLink="false">http://www.leeholmes.com/blog/PermaLink,guid,deef92cb-ef69-458d-8bc4-7e90ee09eed0.aspx</guid>
      <link>http://www.leeholmes.com/blog/AutoUpdatingWithNoReboot.aspx</link>
      <pubDate>Sat, 11 Jul 2009 06:18:00 GMT</pubDate>
      <description>&lt;p&gt;
Despite being a fan of security, I’ve always run Windows Update in “Download and Notify”
mode for all of my machines. Having Windows Update reboot my machine without warning
at 3:00 AM is just too destructive.
&lt;/p&gt;
&lt;p&gt;
This has two negative effects:
&lt;/p&gt;
&lt;p&gt;
- Security patches that don’t require a reboot are needlessly postponed. 
&lt;br /&gt;
- &lt;a href="http://www.microsoft.com/forefront/clientsecurity/en/us/faq.aspx"&gt;Programs
that auto-update frequently via Microsoft Update&lt;/a&gt; turn into a permanent task-bar
nag that you have updates to install.
&lt;/p&gt;
&lt;p&gt;
After doing some research, it turns out that it’s possible to have the best of both
worlds with just a little configuration. Set Microsoft Update to install updates automatically,
and then set a Group Policy flag that prevents auto-reboot. Problem solved!
&lt;/p&gt;
&lt;p&gt;
&lt;a title="http://blogs.technet.com/mu/archive/2008/10/02/windows-update-and-automatic-reboots.aspx" href="http://blogs.technet.com/mu/archive/2008/10/02/windows-update-and-automatic-reboots.aspx"&gt;http://blogs.technet.com/mu/archive/2008/10/02/windows-update-and-automatic-reboots.aspx&lt;/a&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.leeholmes.com/blog/aggbug.ashx?id=deef92cb-ef69-458d-8bc4-7e90ee09eed0" /&gt;</description>
      <comments>http://www.leeholmes.com/blog/CommentView,guid,deef92cb-ef69-458d-8bc4-7e90ee09eed0.aspx</comments>
    </item>
    <item>
      <trackback:ping>http://www.leeholmes.com/blog/Trackback.aspx?guid=fdbbd4d6-1c53-47e7-97ac-642a14b3aeab</trackback:ping>
      <pingback:server>http://www.leeholmes.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.leeholmes.com/blog/PermaLink,guid,fdbbd4d6-1c53-47e7-97ac-642a14b3aeab.aspx</pingback:target>
      <dc:creator>
      </dc:creator>
      <wfw:comment>http://www.leeholmes.com/blog/CommentView,guid,fdbbd4d6-1c53-47e7-97ac-642a14b3aeab.aspx</wfw:comment>
      <wfw:commentRss>http://www.leeholmes.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=fdbbd4d6-1c53-47e7-97ac-642a14b3aeab</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
After working with PowerShell for awhile, then starting to write scripts, you quickly
learn about PowerShell’s Execution Policy and other security features. You might even
throw up your hands, and ask, “Why is this configuration so HARD? Why can’t it be
as easy as VBS and Perl?” You can double-click on a VBS or CMD script and have it
run automatically. Those scripts could invoke PowerShell anyways, so why put all this
effort into security?
</p>
        <p>
Double-click-to-run illustrates a weakness in vbscript’s design, not PowerShell’s.
You could also double-click an EXE and have it do whatever you want. We’re concerned
about being the entry point for an attack, not the means by which it is carried out. 
</p>
        <p>
The problem is that the world is extremely sensitive to scripting security. More sensitive
than they are about EXE security. This is mostly driven by an over-reaction to a rude
awakening: in the times of Melissa / ILoveYou, many people didn’t even know that these
things called “scripts” were functionally equivalent to executables. That burned the
Outlook developers, Exchange developers, network administrators, system administrators,
and poor CEOs that thought a love letter must most naturally be about them. 
</p>
        <p>
During those outbreaks, millions of people watched their Outlook inbox fill with “love
letters” from <u><strong>intelligent</strong></u> co-workers. Since the virus wasn’t
a worm, each one of those was the result of somebody double-clicking on a script out
of curiosity. 
</p>
        <p>
Fast forward a few years, and many of you already live in a world of retribution and
over-reaction where “security experts” give guidance on how to remove WSH and scripting
support from Windows: <a href="http://www.bing.com/search?q=uninstall+wsh">http://www.bing.com/search?q=uninstall+wsh</a>.
On the PowerShell team, we constantly hear from people impacted by these <a href="http://dilbert.com/fast/2005-08-01/">Mordac-like
policies</a> applied to PowerShell. Execution Policies often get abused as user restrictions,
as misguided and ineffective as that is. See our <a href="http://blogs.msdn.com/powershell/archive/2008/09/30/powershell-s-security-guiding-principles.aspx">Security
Guiding Principles</a> for more information about why Execution Policies are not user
restrictions!
</p>
        <p>
Being beyond reproach when it comes to security is crucial to PowerShell’s success.
It’s the reason you can sing loudly from the rooftops for things such as this: <a href="http://it.slashdot.org/it/05/08/05/0411254.shtml">http://it.slashdot.org/it/05/08/05/0411254.shtml</a>. 
</p>
        <p>
Now, the lack of shell association indeed made it difficult to use PowerShell scripts
from other automation programs in V1. While usability and security tend to conflict,
we’re always looking for ways to get both. For example, in V2, we added the right-click
option “Run with PowerShell” to address the interactive case. We added a “-File” parameter
to PowerShell.exe to address the "dumb quoting and path translation" issues
that used to make it difficult to launch PowerShell scripts from outside of PowerShell.
We added an “–ExecutionPolicy” parameter (and other execution policy scopes) to let
you use PowerShell.exe to automate tasks with no permanent system impact.
</p>
        <p>
By writing a PowerShell script, you’re already among the <strong>very small</strong> population
of computer users that understand scripting, security, and the impact of malware.
It’s easy to lose track of the fact that not everybody has the same experience, background,
and knowledge. PowerShell’s security features are designed to level the playing field
for everybody else.
</p>
        <img width="0" height="0" src="http://www.leeholmes.com/blog/aggbug.ashx?id=fdbbd4d6-1c53-47e7-97ac-642a14b3aeab" />
      </body>
      <title>Why So Secure?</title>
      <guid isPermaLink="false">http://www.leeholmes.com/blog/PermaLink,guid,fdbbd4d6-1c53-47e7-97ac-642a14b3aeab.aspx</guid>
      <link>http://www.leeholmes.com/blog/WhySoSecure.aspx</link>
      <pubDate>Mon, 06 Jul 2009 18:28:12 GMT</pubDate>
      <description>&lt;p&gt;
After working with PowerShell for awhile, then starting to write scripts, you quickly
learn about PowerShell’s Execution Policy and other security features. You might even
throw up your hands, and ask, “Why is this configuration so HARD? Why can’t it be
as easy as VBS and Perl?” You can double-click on a VBS or CMD script and have it
run automatically. Those scripts could invoke PowerShell anyways, so why put all this
effort into security?
&lt;/p&gt;
&lt;p&gt;
Double-click-to-run illustrates a weakness in vbscript’s design, not PowerShell’s.
You could also double-click an EXE and have it do whatever you want. We’re concerned
about being the entry point for an attack, not the means by which it is carried out. 
&lt;/p&gt;
&lt;p&gt;
The problem is that the world is extremely sensitive to scripting security. More sensitive
than they are about EXE security. This is mostly driven by an over-reaction to a rude
awakening: in the times of Melissa / ILoveYou, many people didn’t even know that these
things called “scripts” were functionally equivalent to executables. That burned the
Outlook developers, Exchange developers, network administrators, system administrators,
and poor CEOs that thought a love letter must most naturally be about them. 
&lt;/p&gt;
&lt;p&gt;
During those outbreaks, millions of people watched their Outlook inbox fill with “love
letters” from &lt;u&gt;&lt;strong&gt;intelligent&lt;/strong&gt;&lt;/u&gt; co-workers. Since the virus wasn’t
a worm, each one of those was the result of somebody double-clicking on a script out
of curiosity. 
&lt;/p&gt;
&lt;p&gt;
Fast forward a few years, and many of you already live in a world of retribution and
over-reaction where “security experts” give guidance on how to remove WSH and scripting
support from Windows: &lt;a href="http://www.bing.com/search?q=uninstall+wsh"&gt;http://www.bing.com/search?q=uninstall+wsh&lt;/a&gt;.
On the PowerShell team, we constantly hear from people impacted by these &lt;a href="http://dilbert.com/fast/2005-08-01/"&gt;Mordac-like
policies&lt;/a&gt; applied to PowerShell. Execution Policies often get abused as user restrictions,
as misguided and ineffective as that is. See our &lt;a href="http://blogs.msdn.com/powershell/archive/2008/09/30/powershell-s-security-guiding-principles.aspx"&gt;Security
Guiding Principles&lt;/a&gt; for more information about why Execution Policies are not user
restrictions!
&lt;/p&gt;
&lt;p&gt;
Being beyond reproach when it comes to security is crucial to PowerShell’s success.
It’s the reason you can sing loudly from the rooftops for things such as this: &lt;a href="http://it.slashdot.org/it/05/08/05/0411254.shtml"&gt;http://it.slashdot.org/it/05/08/05/0411254.shtml&lt;/a&gt;. 
&lt;/p&gt;
&lt;p&gt;
Now, the lack of shell association indeed made it difficult to use PowerShell scripts
from other automation programs in V1. While usability and security tend to conflict,
we’re always looking for ways to get both. For example, in V2, we added the right-click
option “Run with PowerShell” to address the interactive case. We added a “-File” parameter
to PowerShell.exe to address the &amp;quot;dumb quoting and path translation&amp;quot; issues
that used to make it difficult to launch PowerShell scripts from outside of PowerShell.
We added an “–ExecutionPolicy” parameter (and other execution policy scopes) to let
you use PowerShell.exe to automate tasks with no permanent system impact.
&lt;/p&gt;
&lt;p&gt;
By writing a PowerShell script, you’re already among the &lt;strong&gt;very small&lt;/strong&gt; population
of computer users that understand scripting, security, and the impact of malware.
It’s easy to lose track of the fact that not everybody has the same experience, background,
and knowledge. PowerShell’s security features are designed to level the playing field
for everybody else.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.leeholmes.com/blog/aggbug.ashx?id=fdbbd4d6-1c53-47e7-97ac-642a14b3aeab" /&gt;</description>
      <comments>http://www.leeholmes.com/blog/CommentView,guid,fdbbd4d6-1c53-47e7-97ac-642a14b3aeab.aspx</comments>
    </item>
    <item>
      <trackback:ping>http://www.leeholmes.com/blog/Trackback.aspx?guid=76e4bbaa-3d4b-4b69-9686-4cf1268b98df</trackback:ping>
      <pingback:server>http://www.leeholmes.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.leeholmes.com/blog/PermaLink,guid,76e4bbaa-3d4b-4b69-9686-4cf1268b98df.aspx</pingback:target>
      <dc:creator>
      </dc:creator>
      <wfw:comment>http://www.leeholmes.com/blog/CommentView,guid,76e4bbaa-3d4b-4b69-9686-4cf1268b98df.aspx</wfw:comment>
      <wfw:commentRss>http://www.leeholmes.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=76e4bbaa-3d4b-4b69-9686-4cf1268b98df</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
In CTP2 of PowerShell v2, we added a new parameter to Get-Help: <strong>Online</strong>.
This parameter lets help authors declare an “online version” of their help topic,
which PowerShell then launches with your default browser. For the PowerShell cmdlet
help topics, we redirect to the excellent (and more frequently updated) online cmdlet
help topics: <a title="http://technet.microsoft.com/en-us/library/dd347701.aspx" href="http://technet.microsoft.com/en-us/library/dd347701.aspx">http://technet.microsoft.com/en-us/library/dd347701.aspx</a>.
</p>
        <p>
PowerShell supports online help content for both MAML-based help topics (<a title="http://msdn.microsoft.com/en-us/library/bb525433(VS.85).aspx" href="http://msdn.microsoft.com/en-us/library/bb525433(VS.85).aspx">http://msdn.microsoft.com/en-us/library/bb525433(VS.85).aspx</a>, <a title="http://blogs.msdn.com/powershell/archive/2006/09/14/Draft-Creating-Cmdlet-Help.aspx" href="http://blogs.msdn.com/powershell/archive/2006/09/14/Draft-Creating-Cmdlet-Help.aspx">http://blogs.msdn.com/powershell/archive/2006/09/14/Draft-Creating-Cmdlet-Help.aspx</a>, <a title="http://blogs.msdn.com/powershell/archive/2008/12/24/powershell-v2-external-maml-help.aspx" href="http://blogs.msdn.com/powershell/archive/2008/12/24/powershell-v2-external-maml-help.aspx">http://blogs.msdn.com/powershell/archive/2008/12/24/powershell-v2-external-maml-help.aspx</a>)
and inline help comments (<a title="http://technet.microsoft.com/en-us/library/dd819489.aspx" href="http://technet.microsoft.com/en-us/library/dd819489.aspx">http://technet.microsoft.com/en-us/library/dd819489.aspx</a>.)
</p>
        <p>
To add support for the –Online parameter to your own cmdlet help, add a <u>maml:navigationLink</u> element
with a <u>maml:uri</u> node to the <u>maml:relatedLinks</u> section in your MAML help.
The help system uses the first navigation link that contains a URI as the target for
the link.
</p>
        <blockquote>
          <p>
&lt;maml:relatedLinks&gt; 
<br />
              &lt;maml:navigationLink&gt; 
<br />
                    
&lt;maml:linkText&gt;Online version:&lt;/maml:linkText&gt; 
<br />
                    
&lt;maml:uri&gt;<a href="http://go.microsoft.com/fwlink/?LinkID=113279&lt;/maml:uri">http://go.microsoft.com/fwlink/?LinkID=113279</a>&lt;/maml:uri&gt; 
<br />
              &lt;/maml:navigationLink&gt; 
<br />
(…) 
<br />
&lt;/maml:relatedLinks&gt;
</p>
        </blockquote>
        <p>
When writing comment-based help, use the .LINK tag for the same effect:
</p>
        <blockquote>
          <div style="border-bottom: black 1px solid; border-left: black 1px solid; padding-bottom: 5px; padding-left: 5px; width: 650px; padding-right: 5px; font-family: consolas,lucida console; font-size: 10pt; overflow: auto; border-top: black 1px solid; border-right: black 1px solid; padding-top: 5px">
            <table border="0" cellspacing="0" cellpadding="5">
              <tbody>
                <tr>
                  <td valign="top">
                    <div style="padding-bottom: 5px; padding-left: 5px; padding-right: 5px; font-family: consolas,lucida console; background: #cecece; font-size: 10pt; padding-top: 5px">001 
<br />
002 
<br />
003 
<br />
004 
<br />
005 
<br />
006 
<br />
007 
<br />
008 
<br /></div>
                  </td>
                  <td valign="top" nowrap="nowrap">
                    <div style="padding-bottom: 5px; padding-left: 5px; padding-right: 5px; font-family: consolas,lucida console; background: #fcfcfc; font-size: 10pt; padding-top: 5px">
                      <span style="color: #006400">##
.SYNOPSIS</span>
                      <br />
                      <span style="color: #006400">## Gets an object from the system</span>
                      <br />
                      <span style="color: #006400">## .LINK</span>
                      <br />
                      <span style="color: #006400">## http://www.microsoft.com/technet/scriptcenter/hubs/msh.mspx</span>
                      <br />
                      <span style="color: #00008b">function</span>
                      <span style="color: #000000"> </span>
                      <span style="color: #8a2be2">Get-MyObject</span>
                      <br />
                      <span style="color: #000000">{</span>
                      <br />
                      <span style="color: #000000">    </span>
                      <span style="color: #8b0000">"Hello!"</span>
                      <br />
                      <span style="color: #000000">}</span>
                    </div>
                  </td>
                </tr>
              </tbody>
            </table>
          </div>
        </blockquote>
        <p>
For more information about this feature, see <strong>Get-Help Get-Help –Parameter
Online</strong>.
</p>
        <img width="0" height="0" src="http://www.leeholmes.com/blog/aggbug.ashx?id=76e4bbaa-3d4b-4b69-9686-4cf1268b98df" />
      </body>
      <title>Get-Help &amp;ndash;Online</title>
      <guid isPermaLink="false">http://www.leeholmes.com/blog/PermaLink,guid,76e4bbaa-3d4b-4b69-9686-4cf1268b98df.aspx</guid>
      <link>http://www.leeholmes.com/blog/GetHelpNdashOnline.aspx</link>
      <pubDate>Tue, 09 Jun 2009 18:42:33 GMT</pubDate>
      <description>&lt;p&gt;
In CTP2 of PowerShell v2, we added a new parameter to Get-Help: &lt;strong&gt;Online&lt;/strong&gt;.
This parameter lets help authors declare an “online version” of their help topic,
which PowerShell then launches with your default browser. For the PowerShell cmdlet
help topics, we redirect to the excellent (and more frequently updated) online cmdlet
help topics: &lt;a title="http://technet.microsoft.com/en-us/library/dd347701.aspx" href="http://technet.microsoft.com/en-us/library/dd347701.aspx"&gt;http://technet.microsoft.com/en-us/library/dd347701.aspx&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
PowerShell supports online help content for both MAML-based help topics (&lt;a title="http://msdn.microsoft.com/en-us/library/bb525433(VS.85).aspx" href="http://msdn.microsoft.com/en-us/library/bb525433(VS.85).aspx"&gt;http://msdn.microsoft.com/en-us/library/bb525433(VS.85).aspx&lt;/a&gt;, &lt;a title="http://blogs.msdn.com/powershell/archive/2006/09/14/Draft-Creating-Cmdlet-Help.aspx" href="http://blogs.msdn.com/powershell/archive/2006/09/14/Draft-Creating-Cmdlet-Help.aspx"&gt;http://blogs.msdn.com/powershell/archive/2006/09/14/Draft-Creating-Cmdlet-Help.aspx&lt;/a&gt;, &lt;a title="http://blogs.msdn.com/powershell/archive/2008/12/24/powershell-v2-external-maml-help.aspx" href="http://blogs.msdn.com/powershell/archive/2008/12/24/powershell-v2-external-maml-help.aspx"&gt;http://blogs.msdn.com/powershell/archive/2008/12/24/powershell-v2-external-maml-help.aspx&lt;/a&gt;)
and inline help comments (&lt;a title="http://technet.microsoft.com/en-us/library/dd819489.aspx" href="http://technet.microsoft.com/en-us/library/dd819489.aspx"&gt;http://technet.microsoft.com/en-us/library/dd819489.aspx&lt;/a&gt;.)
&lt;/p&gt;
&lt;p&gt;
To add support for the –Online parameter to your own cmdlet help, add a &lt;u&gt;maml:navigationLink&lt;/u&gt; element
with a &lt;u&gt;maml:uri&lt;/u&gt; node to the &lt;u&gt;maml:relatedLinks&lt;/u&gt; section in your MAML help.
The help system uses the first navigation link that contains a URI as the target for
the link.
&lt;/p&gt;
&lt;blockquote&gt; 
&lt;p&gt;
&amp;lt;maml:relatedLinks&amp;gt; 
&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;maml:navigationLink&amp;gt; 
&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;
&amp;lt;maml:linkText&amp;gt;Online version:&amp;lt;/maml:linkText&amp;gt; 
&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;
&amp;lt;maml:uri&amp;gt;&lt;a href="http://go.microsoft.com/fwlink/?LinkID=113279&amp;lt;/maml:uri"&gt;http://go.microsoft.com/fwlink/?LinkID=113279&lt;/a&gt;&amp;lt;/maml:uri&amp;gt; 
&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/maml:navigationLink&amp;gt; 
&lt;br /&gt;
(…) 
&lt;br /&gt;
&amp;lt;/maml:relatedLinks&amp;gt;
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
When writing comment-based help, use the .LINK tag for the same effect:
&lt;/p&gt;
&lt;blockquote&gt; 
&lt;div style="border-bottom: black 1px solid; border-left: black 1px solid; padding-bottom: 5px; padding-left: 5px; width: 650px; padding-right: 5px; font-family: consolas,lucida console; font-size: 10pt; overflow: auto; border-top: black 1px solid; border-right: black 1px solid; padding-top: 5px"&gt;
&lt;table border="0" cellspacing="0" cellpadding="5"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td valign="top"&gt;
&lt;div style="padding-bottom: 5px; padding-left: 5px; padding-right: 5px; font-family: consolas,lucida console; background: #cecece; font-size: 10pt; padding-top: 5px"&gt;001 
&lt;br /&gt;
002 
&lt;br /&gt;
003 
&lt;br /&gt;
004 
&lt;br /&gt;
005 
&lt;br /&gt;
006 
&lt;br /&gt;
007 
&lt;br /&gt;
008 
&lt;br /&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;td valign="top" nowrap="nowrap"&gt;
&lt;div style="padding-bottom: 5px; padding-left: 5px; padding-right: 5px; font-family: consolas,lucida console; background: #fcfcfc; font-size: 10pt; padding-top: 5px"&gt;&lt;span style="color: #006400"&gt;##
.SYNOPSIS&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #006400"&gt;## Gets an object from the system&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #006400"&gt;## .LINK&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #006400"&gt;## http://www.microsoft.com/technet/scriptcenter/hubs/msh.mspx&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #00008b"&gt;function&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #8a2be2"&gt;Get-MyObject&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;{&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #8b0000"&gt;&amp;quot;Hello!&amp;quot;&lt;/span&gt; 
&lt;br /&gt;
&lt;span style="color: #000000"&gt;}&lt;/span&gt; 
&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
For more information about this feature, see &lt;strong&gt;Get-Help Get-Help –Parameter
Online&lt;/strong&gt;.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.leeholmes.com/blog/aggbug.ashx?id=76e4bbaa-3d4b-4b69-9686-4cf1268b98df" /&gt;</description>
      <comments>http://www.leeholmes.com/blog/CommentView,guid,76e4bbaa-3d4b-4b69-9686-4cf1268b98df.aspx</comments>
    </item>
    <item>
      <trackback:ping>http://www.leeholmes.com/blog/Trackback.aspx?guid=b87e5dd4-f25a-4497-99e0-57330704b445</trackback:ping>
      <pingback:server>http://www.leeholmes.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.leeholmes.com/blog/PermaLink,guid,b87e5dd4-f25a-4497-99e0-57330704b445.aspx</pingback:target>
      <dc:creator>
      </dc:creator>
      <wfw:comment>http://www.leeholmes.com/blog/CommentView,guid,b87e5dd4-f25a-4497-99e0-57330704b445.aspx</wfw:comment>
      <wfw:commentRss>http://www.leeholmes.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=b87e5dd4-f25a-4497-99e0-57330704b445</wfw:commentRss>
      <slash:comments>2</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
There are a few. Based on worldwide numbers (<a href="http://en.wikipedia.org/w/index.php?title=Template:2009_swine_flu_outbreak_table&amp;oldid=286846230">160
confirmed deaths, 3000 “suspected”</a> cases)
</p>
        <ul>
          <li>
Falling out of bed (900 confirmed deaths) 
</li>
          <li>
Falling down the stairs (1,690 confirmed deaths) 
</li>
          <li>
Big storm (874 confirmed deaths) 
</li>
          <li>
Drinking binge (346 confirmed deaths) 
</li>
        </ul>
        <p>
Of course, the statistic left out by the news
</p>
        <ul>
          <li>
Normal flu (36,000 confirmed deaths per year) 
</li>
        </ul>
        <p>
          <a href="http://www.nsc.org/research/odds.aspx">http://www.nsc.org/research/odds.aspx</a>
        </p>
        <img width="0" height="0" src="http://www.leeholmes.com/blog/aggbug.ashx?id=b87e5dd4-f25a-4497-99e0-57330704b445" />
      </body>
      <title>Things more likely to kill you than Swine Flu</title>
      <guid isPermaLink="false">http://www.leeholmes.com/blog/PermaLink,guid,b87e5dd4-f25a-4497-99e0-57330704b445.aspx</guid>
      <link>http://www.leeholmes.com/blog/ThingsMoreLikelyToKillYouThanSwineFlu.aspx</link>
      <pubDate>Wed, 29 Apr 2009 17:35:41 GMT</pubDate>
      <description>&lt;p&gt;
There are a few. Based on worldwide numbers (&lt;a href="http://en.wikipedia.org/w/index.php?title=Template:2009_swine_flu_outbreak_table&amp;amp;oldid=286846230"&gt;160
confirmed deaths, 3000 “suspected”&lt;/a&gt;&amp;nbsp;cases)
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
Falling out of bed (900 confirmed deaths) 
&lt;li&gt;
Falling down the stairs (1,690 confirmed deaths) 
&lt;li&gt;
Big storm (874 confirmed deaths) 
&lt;li&gt;
Drinking binge (346 confirmed deaths) 
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
Of course, the statistic left out by the news
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
Normal flu (36,000 confirmed deaths per year) 
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
&lt;a href="http://www.nsc.org/research/odds.aspx"&gt;http://www.nsc.org/research/odds.aspx&lt;/a&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.leeholmes.com/blog/aggbug.ashx?id=b87e5dd4-f25a-4497-99e0-57330704b445" /&gt;</description>
      <comments>http://www.leeholmes.com/blog/CommentView,guid,b87e5dd4-f25a-4497-99e0-57330704b445.aspx</comments>
    </item>
  </channel>
</rss>