top of page

Azure Network How To With PowerShell

Updated: Nov 20, 2021

Task 1: Create a list shows following information in an Azure subscription:
  • Resource Group Name

  • Virtual Network Name

  • Virtual Network Address Spaces

  • Subnet Name

  • Subnet IP Address Prefix

  • Location

Get-AzVirtualNetwork | Select-Object ResourceGroupName, Name,Location,Subnets -ExpandProperty AddressSpace |
Select-Object ResourceGroupName, @{Name="VNetName"; Expression = "Name"},@{Name="VNetAddressPrefix"; Expression = "AddressPrefixes"}, Location -ExpandProperty Subnets | 
Select-Object ResourceGroupName, VNetName,VNetAddressPrefix, Location, @{Name="SubnetName"; Expression = "Name"},addressprefix | Format-Table

Task 2: Find out all possible IP addresses in a CIDR block

$IpAddressAndCIDR = "192.168.0.0/22"

$AllPossibleIPAddresses = New-ALLPossibleIPAddress ($IpAddressAndCIDR)

function New-ALLPossibleIPAddress($IPAddressAndCIDR) {

    $IpAddressAndCIDR = $IpAddressAndCIDR.Split("/")

    $NetworkBlock = (New-IPv4toBin ($IpAddressAndCIDR[0])).Substring(0, $IpAddressAndCIDR[1])
  
    $AllPossibleIPAddresses = for ($i = 0; $i -le [convert]::ToInt32(("1".PadLeft((32 - $IpAddressAndCIDR[1]), '1')), 2); $i++) {
        New-IPv4fromBin($NetworkBlock + ([convert]::ToString($i, 2)).PadLeft((32 - $IpAddressAndCIDR[1]), '0'))
    }
    return $AllPossibleIPAddresses
}

function New-IPv4toBin ($ipv4) {
    $BinNum = $ipv4 -split '\.' | ForEach-Object { [System.Convert]::ToString($_, 2).PadLeft(8, '0') }
    return $binNum -join ""
}

function New-IPv4fromBin($addressInBin) {
    [string[]]$addressInInt32 = @()
    $addressInBin = $addressInBin.ToCharArray()
    for ($i = 0; $i -lt $addressInBin.length; $i++) {
        $partAddressInBin += $addressInBin[$i]
        if (($i + 1) % 8 -eq 0) {
            $partAddressInBin = $partAddressInBin -join ""
            $addressInInt32 += [Convert]::ToInt32($partAddressInBin -join "", 2)
            $partAddressInBin = ""
        }
    }
    $addressInInt32 = $addressInInt32 -join "."
    return $addressInInt32
}

Task 3: Find the next free IP address in an Azure subnet

$ResourceGroupName = "Your_Resouce_Group_Name"
$VirtualNetworkName = "Your_Target_VNet_Name"
$SubnetName = "Your_target_Subnet_Name"

function New-IPv4toBin ($ipv4) {
    $BinNum = $ipv4 -split '\.' | ForEach-Object { [System.Convert]::ToString($_, 2).PadLeft(8, '0') }
    return $binNum -join ""
}
function New-IPv4fromBin($addressInBin) {
    [string[]]$addressInInt32 = @()
    $addressInBin = $addressInBin.ToCharArray()
    for ($i = 0; $i -lt $addressInBin.length; $i++) {
        $partAddressInBin += $addressInBin[$i]
        if (($i + 1) % 8 -eq 0) {
            $partAddressInBin = $partAddressInBin -join ""
            $addressInInt32 += [Convert]::ToInt32($partAddressInBin -join "", 2)
            $partAddressInBin = ""
        }
    }
    $addressInInt32 = $addressInInt32 -join "."
    return $addressInInt32
}
function New-ALLPossibleIPAddress($IPAddressAndCIDR) {

    $IpAddressAndCIDR = $IpAddressAndCIDR.Split("/")

    $NetworkBlock = (New-IPv4toBin ($IpAddressAndCIDR[0])).Substring(0, $IpAddressAndCIDR[1])
  
    $AllPossibleIPAddresses = for ($i = 0; $i -le [convert]::ToInt32(("1".PadLeft((32 - $IpAddressAndCIDR[1]), '1')), 2); $i++) {
        New-IPv4fromBin($NetworkBlock + ([convert]::ToString($i, 2)).PadLeft((32 - $IpAddressAndCIDR[1]), '0'))
    }
    return $AllPossibleIPAddresses
}
function New-NextFreeIPAddress($ResourceGroupName, $VirtualNetworkName, $SubnetName) {

    $SubnetConfiguration = Get-AzVirtualNetwork -ResourceGroupName $ResourceGroupName -Name $VirtualNetworkName  -ExpandResource "Subnets/IpConfigurations" |
    Select-Object -ExpandProperty Subnets | Where-Object Name -eq $SubnetName
   
    $UsedIpAddresses = $SubnetConfiguration.IpConfigurations.PrivateIPAddress
   
    $AllPossibleIPAddresses = New-ALLPossibleIPAddress ($SubnetConfiguration.AddressPrefix)
   
    $AllPossibleSubnetIPAddresses = $AllPossibleIPAddresses[4..254]
   
    foreach ($IPAddress in $AllPossibleSubnetIPAddresses) {
        if ($IPAddress -notin $UsedIpAddresses) {
            $NextFreeIPAddress = $IPAddress
            return $NextFreeIPAddress
        }
    }
}

New-NextFreeIPAddress -ResourceGroupName $ResourceGroupName -VirtualNetworkName $VirtualNetworkName -SubnetName $SubnetName

Task 4: Find network information of VM(s)

$RGName = $NULL
$VMName = $NULL
#$RGName = "Your_Target_Resource_Group_Name"
#$VMName = "Your_Target_VM_Name"

if ($NULL -ne $RGName) {
    if ($NULL -ne $VMName) {
        $VMs = Get-AzVM -ResourceGroupName $RGName -Name $VMName | Select-Object Name, Resourcegroupname
    }
    else {
        $VMs = Get-AzVM -ResourceGroupName $RGName | Select-Object Name, Resourcegroupname
    }
}
else {
    $VMs = Get-AzVM | Select-Object Name, Resourcegroupname
}

$VMNames = $VMs.Name

Write-Output "ResourceGroupName;VMName;VNetName;VNetSubnetName;PrivateIP"

foreach ($VMName in $VMNames) {
    $RGName = ($VMs | Where-Object Name -eq $VMName).ResourceGroupName
    
    $NICResource = (Get-AzVM -Name $VMName).NetworkProfile.NetworkInterfaces 

    $AzureVMIPAddress = (Get-AzNetworkInterface -ResourceId $NICResource.Id).IpConfigurations.PrivateIpAddress

    $SubnetId = (Get-AzNetworkInterface -ResourceId $NICResource.Id).IpConfigurations.subnet.id 

    $SubnetIDArray = $SubnetId.Split("/")

    $RGName + ";" + $VMName + ";" + $SubnetIDArray[8] + ";" + $SubnetIDArray[10] + ";" + $AzureVMIPAddress
}



MORE COMING ...

Comments


©2021 by GLIN. Proudly created with Wix.com

bottom of page