function GetVMIP($vmName, $rgName)
{
# get VM
$vm = Get-AzureRmVM -Name $vmName -ResourceGroupName$rgName -ErrorActionSilentlyContinue
# get nic name from nic resourceId
if ($vm.NetworkProfile.NetworkInterfaces.Count -eq 0)
{
return;
}
$nicId = $vm.NetworkProfile.NetworkInterfaces[0].Id
if ($nicId -eq $NULL)
{
return;
}
$nicName = $nicId.Substring($nicId.LastIndexOf('/') + 1)
$nic = Get-AzureRmNetworkInterface -Name$nicName -ResourceGroupName$rgName -ErrorActionSilentlyContinue
# get pip name from pip resourceId
if ($nic.IpConfigurations.Count-eq 0)
{
return;
}
$pipId = $nic.IpConfigurations[0].PublicIpAddress.Id
if ($pipId -eq $NULL)
{
return;
}
$pipName = $pipId.Substring($pipId.LastIndexOf('/') + 1)
# get public ip address
$pipAddr = Get-AzureRmPublicIpAddress -Name$pipName -ResourceGroupName$rgName -ErrorActionSilentlyContinue
if ($pipAddr-eq $NULL-or $pipAddr.IpAddress -eq"Not Assigned")
{
return;
}
$vmInfo =@{rgName = $rgName;vmName = $vmName;publicIPAddress = $pipAddr.IpAddress};
$vmInfos.add($vmInfo)
}
$vms = get-azurermvm
foreach($vm in $vms)
{
GetVMIP $vm.Name $vm.ResourceGroupName;
}
# format output
$vmInfos | select @{Name="Resource Group Name"; Expression={$_["rgName"]}}, @{Name="VM Name";Expression={$_["vmName"]}}, @{Name="Public IPAddress"; Expression={$_["publicIPAddress"]}}
执行结果: