问题描述
我正在尝试找到一种列出Azure vNet中可用IP地址数量的方法。 我知道这在GUI中可用,如下所示:
问题是,我们在Powershell Az模块中可以有相同的信息吗?
谢谢!
爱丹
解决方法
从我所见,没有直接方法可以从子网地址范围中获取可用IP地址的数量。
但是,使用以下公式很容易:
2 ^ (32 - netmask length) - number of reserved Azure IPs - number of already occupied IPs
因此,如果您有一个子网地址范围,例如10.1.0.0/24
,而一个IP已经被另一台设备占用,则计算得出:
(2 ^ (32 - 24)) - 5 - 1 => (2 ^ 8) - 6 => 256 - 6 => 250
此外,使用PowerShell,我们可以将这些步骤放入这样的代码中:
$resourceGroupName = "myResourceGroup"
$virtualNetworkName = "myResourceGroup-vnet"
$subnetName = "default"
$virtualNetwork = Get-AzVirtualNetwork `
-Name $virtualNetworkName `
-ResourceGroupName $resourceGroupName
$subnet = Get-AzVirtualNetworkSubnetConfig `
-VirtualNetwork $virtualNetwork `
-Name $subnetName
$subnetMask = $subnet.AddressPrefix.Split("/")[1]
$netmaskLength = [Math]::Pow(2,32 - [int]$subnetMask)
$availableIpAddresses = $netmaskLength - 5 - $subnet.IpConfigurations.Count
$availableIpAddresses
上述Az模块Cmdlet的参考:
此外,请查看MSDN,以了解Azure为什么专门保留5个IP地址。
,我遇到了这个solution
,
$TableProperties = @(
@{Name="VNET" ; Expression={$VNET.Name}}
"Name"
"AddressPrefix"
@{Name="IPsConfigured" ; Expression={$SubnetConfigured.Count}}
@{Name="IPsLeft" ; Expression={$AvailableAddresses - $SubnetConfigured.Count}}
)
$Subnet |
Select-Object $TableProperties |
Format-Table -Autosize