Azure Network How To With PowerShell
- George Lin
- Nov 18, 2021
- 2 min read
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