<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://powershell.com/cs/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Dreaming in PowerShell : cast, ping</title><link>http://powershell.com/cs/blogs/tobias/archive/tags/cast/ping/default.aspx</link><description>Tags: cast, ping</description><dc:language>en</dc:language><generator>CommunityServer 2008.5 (Build: 30929.2835)</generator><item><title>Creating IP Ranges (and other type magic)</title><link>http://powershell.com/cs/blogs/tobias/archive/2011/02/20/creating-ip-ranges-and-other-type-magic.aspx</link><pubDate>Sun, 20 Feb 2011 21:20:00 GMT</pubDate><guid isPermaLink="false">f421715f-7aba-45f0-8a8d-44de5318a3a7:9438</guid><dc:creator>Tobias</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://powershell.com/cs/blogs/tobias/rsscomments.aspx?PostID=9438</wfw:commentRss><comments>http://powershell.com/cs/blogs/tobias/archive/2011/02/20/creating-ip-ranges-and-other-type-magic.aspx#comments</comments><description>&lt;p&gt;Recently I needed to create a range of IP addresses. No big deal, you think? Well, if it is just a small segment, then it *is* easy stuff:&lt;/p&gt;
&lt;div class="pscode"&gt;1..255 | &lt;span class="verbnoun"&gt;&lt;span style="color:#5f9ea0;"&gt;Foreach-Object&lt;/span&gt;&lt;/span&gt; { &lt;span class="string"&gt;&lt;span style="color:#800000;"&gt;&amp;quot;192.168.2.$_&amp;quot;&lt;/span&gt;&lt;/span&gt; }&lt;/div&gt;
&lt;p&gt;But what if you need larger segments? &lt;/p&gt;
&lt;h3&gt;Type Conversion Magic&lt;/h3&gt;
&lt;p&gt;Ok, you &lt;em&gt;could&lt;/em&gt; use nested loops. However, there&amp;#39;s also a &lt;strong&gt;type&lt;/strong&gt; that represents IP addresses. It is called &lt;strong&gt;System.Net.IPAddress&lt;/strong&gt;, and it can &lt;strong&gt;turn a string into an IP address&lt;/strong&gt;. It even calculates the decimal value (check out property &lt;em&gt;Address&lt;/em&gt;), and you can also convert a decimal value back into an IP address:&lt;/p&gt;
&lt;div class="pscode"&gt;PS &amp;gt; [&lt;span class="namespace"&gt;&lt;span style="color:#8b4513;"&gt;System.Net.IPAddress&lt;/span&gt;&lt;/span&gt;]&lt;span style="color:#800000;"&gt;&lt;span class="string"&gt;&amp;#39;192.168.2.1&amp;#39;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;Address : 16951488&lt;br /&gt;AddressFamily : InterNetwork&lt;br /&gt;ScopeId :&lt;br /&gt;IsIPv6Multicast : False&lt;br /&gt;IsIPv6LinkLocal : False&lt;br /&gt;IsIPv6SiteLocal : False&lt;br /&gt;IPAddressToString : 192.168.2.1&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;PS &amp;gt; [&lt;span class="namespace"&gt;&lt;span style="color:#8b4513;"&gt;System.Net.IPAddress&lt;/span&gt;&lt;/span&gt;]16951488&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Address : 16951488&lt;br /&gt;AddressFamily : InterNetwork&lt;br /&gt;ScopeId :&lt;br /&gt;IsIPv6Multicast : False&lt;br /&gt;IsIPv6LinkLocal : False&lt;br /&gt;IsIPv6SiteLocal : False&lt;br /&gt;IPAddressToString : 192.168.2.1&lt;/div&gt;
&lt;p&gt;Now, since IP addresses really are just 32bit numeric values, this conversion is doing an amazing thing when you start thinking about it: it &lt;strong&gt;breaks up the decimal into its byte parts&lt;/strong&gt;.&amp;nbsp;Breaking up a number in its &lt;strong&gt;High/Low-part&lt;/strong&gt;&amp;nbsp;something needed very often, and most of the time people are coding confusing amounts of math into their scripts to do just that.&lt;/p&gt;
&lt;h3&gt;Breaking Up Decimals in Low-/High-Bytes&lt;/h3&gt;
&lt;p&gt;So the first thing I want to do is use the &lt;strong&gt;System.Net.IPAddress&lt;/strong&gt; type to &lt;strong&gt;break up any decimal into its low/high bytes&lt;/strong&gt;. I created a pretty small function called &lt;strong&gt;ConvertTo-HighLow&lt;/strong&gt; which you can &lt;a target="_blank" href="http://powershell.com/cs/media/p/9434.aspx"&gt;download here&lt;/a&gt;.&lt;/p&gt;
&lt;div class="pscode"&gt;&lt;span class="keyword"&gt;&lt;span style="color:#0000ff;"&gt;function&lt;/span&gt;&lt;/span&gt; &lt;span class="verbnoun"&gt;&lt;span style="color:#5f9ea0;"&gt;ConvertTo-HighLow&lt;/span&gt;&lt;/span&gt;(&lt;span class="var"&gt;&lt;span style="color:#800080;"&gt;$number&lt;/span&gt;&lt;/span&gt;) {&lt;br /&gt;&lt;span class="var"&gt;&lt;span style="color:#800080;"&gt;$v&lt;/span&gt;&lt;/span&gt; &lt;span class="op"&gt;&lt;span style="color:#ff0000;"&gt;=&lt;/span&gt;&lt;/span&gt; [&lt;span class="namespace"&gt;&lt;span style="color:#8b4513;"&gt;System.Version&lt;/span&gt;&lt;/span&gt;][&lt;span class="datatype"&gt;&lt;span style="color:#0000ff;"&gt;String&lt;/span&gt;&lt;/span&gt;]([&lt;span class="namespace"&gt;&lt;span style="color:#8b4513;"&gt;System.Net.IPAddress&lt;/span&gt;&lt;/span&gt;]&lt;span class="var"&gt;&lt;span style="color:#800080;"&gt;$number&lt;/span&gt;&lt;/span&gt;) &lt;br /&gt;&lt;span class="var"&gt;&lt;span style="color:#800080;"&gt;$o&lt;/span&gt;&lt;/span&gt; &lt;span class="op"&gt;&lt;span style="color:#ff0000;"&gt;=&lt;/span&gt;&lt;/span&gt; 1 | &lt;span class="verbnoun"&gt;&lt;span style="color:#5f9ea0;"&gt;Select-Object&lt;/span&gt;&lt;/span&gt; Low, High, Low32, High32&lt;br /&gt;&lt;span class="var"&gt;&lt;span style="color:#800080;"&gt;$o&lt;/span&gt;&lt;/span&gt;.&lt;span class="method"&gt;&lt;span style="color:#8b4513;"&gt;Low&lt;/span&gt;&lt;/span&gt;, &lt;span class="var"&gt;&lt;span style="color:#800080;"&gt;$o&lt;/span&gt;&lt;/span&gt;.&lt;span class="method"&gt;&lt;span style="color:#8b4513;"&gt;High&lt;/span&gt;&lt;/span&gt;, &lt;span class="var"&gt;&lt;span style="color:#800080;"&gt;$o&lt;/span&gt;&lt;/span&gt;.&lt;span class="method"&gt;&lt;span style="color:#8b4513;"&gt;Low32&lt;/span&gt;&lt;/span&gt;, &lt;span class="var"&gt;&lt;span style="color:#800080;"&gt;$o&lt;/span&gt;&lt;/span&gt;.&lt;span class="method"&gt;&lt;span style="color:#8b4513;"&gt;High32&lt;/span&gt;&lt;/span&gt; &lt;span class="op"&gt;&lt;span style="color:#ff0000;"&gt;=&lt;/span&gt;&lt;/span&gt; &lt;span class="var"&gt;&lt;span style="color:#800080;"&gt;$v&lt;/span&gt;&lt;/span&gt;.&lt;span class="method"&gt;&lt;span style="color:#8b4513;"&gt;Major&lt;/span&gt;&lt;/span&gt;, &lt;span class="var"&gt;&lt;span style="color:#800080;"&gt;$v&lt;/span&gt;&lt;/span&gt;.&lt;span class="method"&gt;&lt;span style="color:#8b4513;"&gt;Minor&lt;/span&gt;&lt;/span&gt;, &lt;span class="var"&gt;&lt;span style="color:#800080;"&gt;$v&lt;/span&gt;&lt;/span&gt;.&lt;span class="method"&gt;&lt;span style="color:#8b4513;"&gt;Build&lt;/span&gt;&lt;/span&gt;, &lt;span class="var"&gt;&lt;span style="color:#800080;"&gt;$v&lt;/span&gt;&lt;/span&gt;.&lt;span style="color:#8b4513;"&gt;&lt;span class="method"&gt;Revision&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:#800080;"&gt;&lt;span class="var"&gt;$o&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;}&lt;/div&gt;
&lt;p&gt;It accepts any &lt;strong&gt;unsigned&amp;nbsp;64bit&lt;/strong&gt; number and returns &lt;strong&gt;its four bytes&lt;/strong&gt; like this:&lt;/p&gt;
&lt;div class="pscode"&gt;PS &amp;gt; &lt;span class="verbnoun"&gt;&lt;span style="color:#5f9ea0;"&gt;ConvertTo-HighLow&lt;/span&gt;&lt;/span&gt; 255&lt;br /&gt;&lt;br /&gt;Low High Low32 High32&lt;br /&gt;&lt;span class="op"&gt;&lt;span style="color:#ff0000;"&gt;---&lt;/span&gt;&lt;/span&gt; &lt;span class="op"&gt;&lt;span style="color:#ff0000;"&gt;----&lt;/span&gt;&lt;/span&gt; &lt;span class="op"&gt;&lt;span style="color:#ff0000;"&gt;-----&lt;/span&gt;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;&lt;span class="op"&gt;------&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;255 0 0 0&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;PS &amp;gt; &lt;span class="verbnoun"&gt;&lt;span style="color:#5f9ea0;"&gt;ConvertTo-HighLow&lt;/span&gt;&lt;/span&gt; 256&lt;br /&gt;&lt;br /&gt;Low High Low32 High32&lt;br /&gt;&lt;span class="op"&gt;&lt;span style="color:#ff0000;"&gt;---&lt;/span&gt;&lt;/span&gt; &lt;span class="op"&gt;&lt;span style="color:#ff0000;"&gt;----&lt;/span&gt;&lt;/span&gt; &lt;span class="op"&gt;&lt;span style="color:#ff0000;"&gt;-----&lt;/span&gt;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;&lt;span class="op"&gt;------&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;0 1 0 0&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;PS &amp;gt; &lt;span class="verbnoun"&gt;&lt;span style="color:#5f9ea0;"&gt;ConvertTo-HighLow&lt;/span&gt;&lt;/span&gt; 52176537&lt;br /&gt;&lt;br /&gt;Low High Low32 High32&lt;br /&gt;&lt;span class="op"&gt;&lt;span style="color:#ff0000;"&gt;---&lt;/span&gt;&lt;/span&gt; &lt;span class="op"&gt;&lt;span style="color:#ff0000;"&gt;----&lt;/span&gt;&lt;/span&gt; &lt;span class="op"&gt;&lt;span style="color:#ff0000;"&gt;-----&lt;/span&gt;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;&lt;span class="op"&gt;------&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;153 38 28 3&lt;/div&gt;
&lt;p&gt;Here is what I did: I &lt;strong&gt;converted the number&lt;/strong&gt; to an &lt;strong&gt;IP address&lt;/strong&gt;. This did all the complex math by converting the number into four octets. Next, I &lt;strong&gt;converted the string IP&lt;/strong&gt; address into a &lt;strong&gt;System.Version&lt;/strong&gt; type. A version has four numbers, just like an IP address, so now I was able to create a new object (using the &lt;strong&gt;Select-Object trick&lt;/strong&gt;) with the properties I needed and add the byte values to the appropriate properties of my return object - done.&lt;/p&gt;
&lt;p&gt;If you just need the low or high byte of a decimal, you could also boil it down to this:&lt;/p&gt;
&lt;div class="pscode"&gt;PS &amp;gt; &lt;span class="var"&gt;&lt;span style="color:#800080;"&gt;$low&lt;/span&gt;&lt;/span&gt; &lt;span class="op"&gt;&lt;span style="color:#ff0000;"&gt;=&lt;/span&gt;&lt;/span&gt; ([&lt;span class="namespace"&gt;&lt;span style="color:#8b4513;"&gt;System.Net.IPAddress&lt;/span&gt;&lt;/span&gt;]15672).&lt;span class="method"&gt;&lt;span style="color:#8b4513;"&gt;GetAddressBytes&lt;/span&gt;&lt;/span&gt;()[0]&lt;br /&gt;PS &amp;gt; &lt;span class="var"&gt;&lt;span style="color:#800080;"&gt;$high&lt;/span&gt;&lt;/span&gt; &lt;span class="op"&gt;&lt;span style="color:#ff0000;"&gt;=&lt;/span&gt;&lt;/span&gt; ([&lt;span class="namespace"&gt;&lt;span style="color:#8b4513;"&gt;System.Net.IPAddress&lt;/span&gt;&lt;/span&gt;]15672).&lt;span class="method"&gt;&lt;span style="color:#8b4513;"&gt;GetAddressBytes&lt;/span&gt;&lt;/span&gt;()[1]&lt;br /&gt;PS &amp;gt; &lt;span style="color:#800080;"&gt;&lt;span class="var"&gt;$low&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;56&lt;br /&gt;PS &amp;gt; &lt;span style="color:#800080;"&gt;&lt;span class="var"&gt;$High&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;61&lt;br /&gt;PS &amp;gt; &lt;span class="var"&gt;&lt;span style="color:#800080;"&gt;$high&lt;/span&gt;&lt;/span&gt;&lt;span class="op"&gt;&lt;span style="color:#ff0000;"&gt;*&lt;/span&gt;&lt;/span&gt;256 &lt;span class="op"&gt;&lt;span style="color:#ff0000;"&gt;+&lt;/span&gt;&lt;/span&gt; &lt;span style="color:#800080;"&gt;&lt;span class="var"&gt;$low&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;15672&lt;/div&gt;
&lt;h3&gt;Creating IP Address Ranges&lt;/h3&gt;
&lt;p&gt;Now that this worked perfectly, let&amp;#39;s &lt;strong&gt;create IP address ranges&lt;/strong&gt;. Here is the scoop: if every ip address is just a (large) decimal number, then why not convert start and end ip address into such a number and loop through that range? Each number could then be converted back into a valid IP address!&lt;/p&gt;
&lt;p&gt;Sounds cool, BUT. &lt;strong&gt;IP addresses organize bytes in an unusual way&lt;/strong&gt;. Turns out that the lowest byte represents the first octet. So if you counted up, you would not get consecutive ip address ranges.&lt;/p&gt;
&lt;p&gt;The solution is simple, though. Just &lt;strong&gt;reverse the octets&lt;/strong&gt; before you convert them, create the numeric range, and &lt;strong&gt;reverse them back&lt;/strong&gt;. Here is the function &lt;strong&gt;New-IPRange&lt;/strong&gt; (&lt;a target="_blank" href="http://powershell.com/cs/media/p/9437.aspx"&gt;which you can also download here&lt;/a&gt;):&lt;/p&gt;
&lt;div class="pscode"&gt;&lt;span class="keyword"&gt;&lt;span style="color:#0000ff;"&gt;function&lt;/span&gt;&lt;/span&gt; &lt;span class="verbnoun"&gt;&lt;span style="color:#5f9ea0;"&gt;New-IPRange&lt;/span&gt;&lt;/span&gt; (&lt;span class="var"&gt;&lt;span style="color:#800080;"&gt;$start&lt;/span&gt;&lt;/span&gt;, &lt;span class="var"&gt;&lt;span style="color:#800080;"&gt;$end&lt;/span&gt;&lt;/span&gt;) {&lt;br /&gt;&lt;span style="color:#008000;"&gt;&lt;span class="comment"&gt;# created by Dr. Tobias Weltner, MVP PowerShell&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="var"&gt;&lt;span style="color:#800080;"&gt;$ip1&lt;/span&gt;&lt;/span&gt; &lt;span class="op"&gt;&lt;span style="color:#ff0000;"&gt;=&lt;/span&gt;&lt;/span&gt; ([&lt;span class="namespace"&gt;&lt;span style="color:#8b4513;"&gt;System.Net.IPAddress&lt;/span&gt;&lt;/span&gt;]&lt;span class="var"&gt;&lt;span style="color:#800080;"&gt;$start&lt;/span&gt;&lt;/span&gt;).&lt;span class="method"&gt;&lt;span style="color:#8b4513;"&gt;GetAddressBytes&lt;/span&gt;&lt;/span&gt;()&lt;br /&gt;[&lt;span class="datatype"&gt;&lt;span style="color:#0000ff;"&gt;Array&lt;/span&gt;&lt;/span&gt;]::&lt;span class="method"&gt;&lt;span style="color:#8b4513;"&gt;Reverse&lt;/span&gt;&lt;/span&gt;(&lt;span class="var"&gt;&lt;span style="color:#800080;"&gt;$ip1&lt;/span&gt;&lt;/span&gt;)&lt;br /&gt;&lt;span class="var"&gt;&lt;span style="color:#800080;"&gt;$ip1&lt;/span&gt;&lt;/span&gt; &lt;span class="op"&gt;&lt;span style="color:#ff0000;"&gt;=&lt;/span&gt;&lt;/span&gt; ([&lt;span class="namespace"&gt;&lt;span style="color:#8b4513;"&gt;System.Net.IPAddress&lt;/span&gt;&lt;/span&gt;](&lt;span class="var"&gt;&lt;span style="color:#800080;"&gt;$ip1&lt;/span&gt;&lt;/span&gt; &lt;span class="modifier"&gt;&lt;span style="color:#5f9ea0;"&gt;-join&lt;/span&gt;&lt;/span&gt; &lt;span class="string"&gt;&lt;span style="color:#800000;"&gt;&amp;#39;.&amp;#39;&lt;/span&gt;&lt;/span&gt;)).&lt;span style="color:#8b4513;"&gt;&lt;span class="method"&gt;Address&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="var"&gt;&lt;span style="color:#800080;"&gt;$ip2&lt;/span&gt;&lt;/span&gt; &lt;span class="op"&gt;&lt;span style="color:#ff0000;"&gt;=&lt;/span&gt;&lt;/span&gt; ([&lt;span class="namespace"&gt;&lt;span style="color:#8b4513;"&gt;System.Net.IPAddress&lt;/span&gt;&lt;/span&gt;]&lt;span class="var"&gt;&lt;span style="color:#800080;"&gt;$end&lt;/span&gt;&lt;/span&gt;).&lt;span class="method"&gt;&lt;span style="color:#8b4513;"&gt;GetAddressBytes&lt;/span&gt;&lt;/span&gt;()&lt;br /&gt;[&lt;span class="datatype"&gt;&lt;span style="color:#0000ff;"&gt;Array&lt;/span&gt;&lt;/span&gt;]::&lt;span class="method"&gt;&lt;span style="color:#8b4513;"&gt;Reverse&lt;/span&gt;&lt;/span&gt;(&lt;span class="var"&gt;&lt;span style="color:#800080;"&gt;$ip2&lt;/span&gt;&lt;/span&gt;)&lt;br /&gt;&lt;span class="var"&gt;&lt;span style="color:#800080;"&gt;$ip2&lt;/span&gt;&lt;/span&gt; &lt;span class="op"&gt;&lt;span style="color:#ff0000;"&gt;=&lt;/span&gt;&lt;/span&gt; ([&lt;span class="namespace"&gt;&lt;span style="color:#8b4513;"&gt;System.Net.IPAddress&lt;/span&gt;&lt;/span&gt;](&lt;span class="var"&gt;&lt;span style="color:#800080;"&gt;$ip2&lt;/span&gt;&lt;/span&gt; &lt;span class="modifier"&gt;&lt;span style="color:#5f9ea0;"&gt;-join&lt;/span&gt;&lt;/span&gt; &lt;span class="string"&gt;&lt;span style="color:#800000;"&gt;&amp;#39;.&amp;#39;&lt;/span&gt;&lt;/span&gt;)).&lt;span style="color:#8b4513;"&gt;&lt;span class="method"&gt;Address&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;for (&lt;span class="var"&gt;&lt;span style="color:#800080;"&gt;$x&lt;/span&gt;&lt;/span&gt;&lt;span class="op"&gt;&lt;span style="color:#ff0000;"&gt;=&lt;/span&gt;&lt;/span&gt;&lt;span class="var"&gt;&lt;span style="color:#800080;"&gt;$ip1&lt;/span&gt;&lt;/span&gt;; &lt;span class="var"&gt;&lt;span style="color:#800080;"&gt;$x&lt;/span&gt;&lt;/span&gt; &lt;span class="op"&gt;&lt;span style="color:#ff0000;"&gt;-le&lt;/span&gt;&lt;/span&gt; &lt;span class="var"&gt;&lt;span style="color:#800080;"&gt;$ip2&lt;/span&gt;&lt;/span&gt;; &lt;span class="var"&gt;&lt;span style="color:#800080;"&gt;$x&lt;/span&gt;&lt;/span&gt;&lt;span class="op"&gt;&lt;span style="color:#ff0000;"&gt;++&lt;/span&gt;&lt;/span&gt;) {&lt;br /&gt;&lt;span class="var"&gt;&lt;span style="color:#800080;"&gt;$ip&lt;/span&gt;&lt;/span&gt; &lt;span class="op"&gt;&lt;span style="color:#ff0000;"&gt;=&lt;/span&gt;&lt;/span&gt; ([&lt;span class="namespace"&gt;&lt;span style="color:#8b4513;"&gt;System.Net.IPAddress&lt;/span&gt;&lt;/span&gt;]&lt;span class="var"&gt;&lt;span style="color:#800080;"&gt;$x&lt;/span&gt;&lt;/span&gt;).&lt;span class="method"&gt;&lt;span style="color:#8b4513;"&gt;GetAddressBytes&lt;/span&gt;&lt;/span&gt;()&lt;br /&gt;[&lt;span class="datatype"&gt;&lt;span style="color:#0000ff;"&gt;Array&lt;/span&gt;&lt;/span&gt;]::&lt;span class="method"&gt;&lt;span style="color:#8b4513;"&gt;Reverse&lt;/span&gt;&lt;/span&gt;(&lt;span class="var"&gt;&lt;span style="color:#800080;"&gt;$ip&lt;/span&gt;&lt;/span&gt;)&lt;br /&gt;&lt;span class="var"&gt;&lt;span style="color:#800080;"&gt;$ip&lt;/span&gt;&lt;/span&gt; &lt;span class="modifier"&gt;&lt;span style="color:#5f9ea0;"&gt;-join&lt;/span&gt;&lt;/span&gt; &lt;span style="color:#800000;"&gt;&lt;span class="string"&gt;&amp;#39;.&amp;#39;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;}&lt;br /&gt;}&lt;/div&gt;
&lt;p&gt;Now it is really easy to create IP address ranges. Try this:&lt;/p&gt;
&lt;div class="pscode"&gt;PS &amp;gt; &lt;span class="verbnoun"&gt;&lt;span style="color:#5f9ea0;"&gt;New-IPRange&lt;/span&gt;&lt;/span&gt; 192.168.1.12 192.168.3.44&lt;br /&gt;192.168.1.12&lt;br /&gt;192.168.1.13&lt;br /&gt;192.168.1.14&lt;br /&gt;...&lt;br /&gt;192.168.3.43&lt;br /&gt;192.168.3.44&lt;/div&gt;
&lt;p&gt;When you look at the code, it really is pretty straight-forward: both start and end address are converted into an ip address, then the four octets are read into an array (&lt;strong&gt;GetAddressBytes()&lt;/strong&gt;). The static &lt;strong&gt;Reverse()&lt;/strong&gt; method can reverse the array content.&lt;/p&gt;
&lt;p&gt;Now we have two numbers, the start and the end point. A for loop can loop through that range (you cannot use the &amp;quot;..&amp;quot; trick because the numbers are 64bit values and &amp;quot;..&amp;quot; only deals with &lt;strong&gt;Int32&lt;/strong&gt;). Finally, the numbers are again converted into an ip address and the bytes reversed. &amp;nbsp;Now, &lt;strong&gt;-join&lt;/strong&gt; can put the bytes together and create an ip address.&lt;/p&gt;
&lt;h3&gt;Wait, there is more!&lt;/h3&gt;
&lt;p&gt;Using types can be fun, and you can achive a lot of cool results. Now that you can easily create IP address segments, what is the purpose? Of course there is always a purpose. Originally, I wanted not just a tool to create addresses but also check which computers are online in that segment and what their names are.&lt;/p&gt;
&lt;p&gt;If you did that with &lt;strong&gt;Test-Connection&lt;/strong&gt; or ping, it could take forever because it would work sequentially. Next time around, I show you how to ping 500 computers at the same time, making analyzing an entire network segment only a matter of seconds.&lt;/p&gt;
&lt;p&gt;Hope you had fun, see you next week around...&lt;/p&gt;
&lt;p&gt;Tobias&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Microsoft MVP PowerShell Germany&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;P.S.&lt;br /&gt;If you live in Germany or other parts of Europe and your company would like to set up a truly great PowerShell training, just contact me! I regularly train mid- to large-size companies. Trainings are always a blast with tons of real-world-examples and solutions. Here&amp;#39;s how to get in touch with me: &lt;a href="mailto:tobias.weltner@scriptinternals.de"&gt;&lt;span style="color:#3366cc;"&gt;tobias.weltner@scriptinternals.de&lt;/span&gt;&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://powershell.com/cs/aggbug.aspx?PostID=9438" width="1" height="1"&gt;</description><category domain="http://powershell.com/cs/blogs/tobias/archive/tags/cast/default.aspx">cast</category><category domain="http://powershell.com/cs/blogs/tobias/archive/tags/ping/default.aspx">ping</category><category domain="http://powershell.com/cs/blogs/tobias/archive/tags/Convert/default.aspx">Convert</category><category domain="http://powershell.com/cs/blogs/tobias/archive/tags/System.Net.IPAddress/default.aspx">System.Net.IPAddress</category><category domain="http://powershell.com/cs/blogs/tobias/archive/tags/System.Version/default.aspx">System.Version</category><category domain="http://powershell.com/cs/blogs/tobias/archive/tags/Test-Connection/default.aspx">Test-Connection</category><category domain="http://powershell.com/cs/blogs/tobias/archive/tags/HighLow/default.aspx">HighLow</category><category domain="http://powershell.com/cs/blogs/tobias/archive/tags/Significant+Byte/default.aspx">Significant Byte</category></item></channel></rss>