www.powershellgallery.com Open in urlscan Pro
2620:1ec:bdf::60  Public Scan

URL: https://www.powershellgallery.com/packages/PoshFunctions/2.2.1.6/Content/Functions/Get-IpRange.ps1
Submission: On July 24 via api from DE — Scanned from GB

Form analysis 1 forms found in the DOM

GET /packages

<form aria-label="Package search bar" action="/packages" method="get">
  <div class="container">
    <div class="row">
      <div class="col-sm-offset-1 col-sm-2"></div>
      <div class="col-sm-12 col-md-8">
        <div class="form-group special-margin-left">
          <label for="search">Search PowerShell packages:</label>
          <div class="input-group" role="presentation">
            <input name="q" type="text" class="form-control ms-borderColor-blue search-box" id="search" aria-label="Enter packages to search, use the arrow keys to autofill." placeholder="Az, etc..." autocomplete="on" value="">
            <span class="input-group-btn">
              <button class="btn btn-default btn-search ms-borderColor-blue ms-borderColor-blue--hover" type="submit" title="Search PowerShell packages" aria-label="Search PowerShell packages">
                <span class="ms-Icon ms-Icon--Search" aria-hidden="true"></span>
              </button>
            </span>
          </div>
          <div id="autocomplete-results-container" class="text-left" tabindex="0"></div>
          <script type="text/html" id="autocomplete-results-row">
            <!-- ko if: $data -->
          <!-- ko if: $data.PackageRegistration -->
          <div class="col-sm-4 autocomplete-row-id autocomplete-row-data">
            <span data-bind="attr: { id: 'autocomplete-result-id-' + $data.PackageRegistration.Id, title: $data.PackageRegistration.Id }, text: $data.PackageRegistration.Id"></span>
          </div>
          <div class="col-sm-4 autocomplete-row-downloadcount text-right autocomplete-row-data">
            <span data-bind="text: $data.DownloadCount + ' downloads'"></span>
          </div>
          <div class="col-sm-4 autocomplete-row-owners text-left autocomplete-row-data">
            <span data-bind="text: $data.OwnersString + ' '"></span>
          </div>
          <!-- /ko -->
          <!-- ko ifnot: $data.PackageRegistration -->
          <div class="col-sm-12 autocomplete-row-id autocomplete-row-data">
            <span data-bind="attr: { id: 'autocomplete-result-id-' + $data, title: $data  }, text: $data"></span>
          </div>
          <!-- /ko -->
          <!-- /ko -->
          </script>
          <script type="text/html" id="autocomplete-results-template">
            <!-- ko if: $data.data.length > 0 -->
          <div data-bind="foreach: $data.data" id="autocomplete-results-list">
            <a data-bind="attr: { id: 'autocomplete-result-row-' + $data, href: '/packages/' + $data, title: $data }" tabindex="-1">
            <div data-bind="attr:{ id: 'autocomplete-container-' + $data }" class="autocomplete-results-row">
            </div>
        </a>
          </div>
          <!-- /ko -->
          </script>
        </div>
      </div>
    </div>
  </div>
</form>

Text Content

Individual package statistics are temporarily unavailable. More info:
https://aka.ms/psgallerystatus
This site uses cookies for analytics, personalized content and ads. By
continuing to browse this site, you agree to this use. Learn more
Skip To Content

PowerShell Gallery

Toggle navigation
 * Packages
 * Publish
 * Documentation

Sign in

Search PowerShell packages:




POSHFUNCTIONS

2.2.1.6


FUNCTIONS/GET-IPRANGE.PS1

function Get-IpRange {
<#
.SYNOPSIS
    Given a subnet in CIDR format, get all of the valid IP addresses in that
range.
.DESCRIPTION
    Given a subnet in CIDR format, get all of the valid IP addresses in that
range.
.PARAMETER Subnets
    The subnet written in CIDR format 'a.b.c.d/#' and an example would be
'192.168.1.24/27'. Can be a single value, an
    array of values, or values can be taken from the pipeline.
.EXAMPLE
    Get-IpRange -Subnets '192.168.1.24/30'
 
    192.168.1.25
    192.168.1.26
.EXAMPLE
    (Get-IpRange -Subnets '10.100.10.0/24').count
 
    254
.EXAMPLE
    '192.168.1.128/30' | Get-IpRange
 
    192.168.1.129
    192.168.1.130
.NOTES
    Inspired by https://gallery.technet.microsoft.com/PowerShell-Subnet-db45ec74
 
    * Added comment help
#>

    [CmdletBinding(ConfirmImpact = 'None')]
    Param(
        [Parameter(Mandatory, HelpMessage = 'Please enter a subnet in the form
a.b.c.d/#', ValueFromPipeline, Position = 0)]
        [string[]] $Subnets
    )

    begin {
        Write-Verbose -Message "Starting [$($MyInvocation.Mycommand)]"
    }

    process {
        foreach ($subnet in $subnets) {
            if ($subnet -match '^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}/\d{1,2}$') {
                #Split IP and subnet
                $IP = ($Subnet -split '\/')[0]
                [int] $SubnetBits = ($Subnet -split '\/')[1]
                if ($SubnetBits -lt 7 -or $SubnetBits -gt 30) {
                    Write-Error -Message 'The number following the / must be
between 7 and 30'
                    break
                }
                #Convert IP into binary
                #Split IP into different octects and for each one, figure out
the binary with leading zeros and add to the total
                $Octets = $IP -split '\.'
                $IPInBinary = @()
                foreach ($Octet in $Octets) {
                    #convert to binary
                    $OctetInBinary = [convert]::ToString($Octet, 2)
                    #get length of binary string add leading zeros to make octet
                    $OctetInBinary = ('0' * (8 - ($OctetInBinary).Length) + $OctetInBinary)
                    $IPInBinary = $IPInBinary + $OctetInBinary
                }
                $IPInBinary = $IPInBinary -join ''
                #Get network ID by subtracting subnet mask
                $HostBits = 32 - $SubnetBits
                $NetworkIDInBinary = $IPInBinary.Substring(0, $SubnetBits)
                #Get host ID and get the first host ID by converting all 1s into
0s
                $HostIDInBinary = $IPInBinary.Substring($SubnetBits, $HostBits)
                $HostIDInBinary = $HostIDInBinary -replace '1', '0'
                #Work out all the host IDs in that subnet by cycling through $i
from 1 up to max $HostIDInBinary (i.e. 1s stringed up to $HostBits)
                #Work out max $HostIDInBinary
                $imax = [convert]::ToInt32(('1' * $HostBits), 2) - 1
                $IPs = @()
                #Next ID is first network ID converted to decimal plus $i then
converted to binary
                For ($i = 1 ; $i -le $imax ; $i++) {
                    #Convert to decimal and add $i
                    $NextHostIDInDecimal = ([convert]::ToInt32($HostIDInBinary, 2) + $i)
                    #Convert back to binary
                    $NextHostIDInBinary = [convert]::ToString($NextHostIDInDecimal, 2)
                    #Add leading zeros
                    #Number of zeros to add
                    $NoOfZerosToAdd = $HostIDInBinary.Length - $NextHostIDInBinary.Length
                    $NextHostIDInBinary = ('0' * $NoOfZerosToAdd) + $NextHostIDInBinary
                    #Work out next IP
                    #Add networkID to hostID
                    $NextIPInBinary = $NetworkIDInBinary + $NextHostIDInBinary
                    #Split into octets and separate by . then join
                    $IP = @()
                    For ($x = 1 ; $x -le 4 ; $x++) {
                        #Work out start character position
                        $StartCharNumber = ($x - 1) * 8
                        #Get octet in binary
                        $IPOctetInBinary = $NextIPInBinary.Substring($StartCharNumber, 8)
                        #Convert octet into decimal
                        $IPOctetInDecimal = [convert]::ToInt32($IPOctetInBinary, 2)
                        #Add octet to IP
                        $IP += $IPOctetInDecimal
                    }
                    #Separate by .
                    $IP = $IP -join '.'
                    $IPs += $IP
                }
                Write-Output -InputObject $IPs
            } else {
                Write-Error -Message "Subnet [$subnet] is not in a valid format"
            }
        }
    }

    end {
        Write-Verbose -Message "Ending [$($MyInvocation.Mycommand)]"
    }
}


Contact Us
Terms of Use
Privacy Policy
Gallery Status
Feedback
FAQs
© 2024 Microsoft Corporation