Popular Posts

Thursday, August 13, 2020

Get network interfaces of all VMs in an Azure subscription using PowerShell

$subs = Get-AzureRmSubscription

$array = @()
foreach ($sub in $subs)
{
Set-AzureRmContext -SubscriptionId $sub.Id | Out-Null
$rmVMs = Get-AzureRmVM
Write-Output "Subscription $($sub.Id) VMs: $($rmVMs.Count)"
foreach ($vm in $rmVMs) {
Write-Host $vm.Name
$nicCount = $vm.NetworkProfile.NetworkInterfaces.count
write-host $nicCount
for ($i = 0; $i -lt $nicCount; $i++) {
$networkInterfaceID = $vm.NetworkProfile.NetworkInterfaces[$i].Id
$networkInterfaceResourceGroupName = $networkInterfaceID.Split('/')[4]
$networkInterfaceName = $networkInterfaceID.Split('/')[-1]
Write-Host $networkInterfaceName
$networkInterface = Get-AzureRmNetworkInterface -ResourceGroupName $networkInterfaceResourceGroupName -Name $networkInterfaceName
$PrivateIP = $networkInterface | Get-AzureRmNetworkInterfaceIpConfig | Select -ExpandProperty PrivateIPAddress | Out-String
Write-Host $PrivateIP
$server = New-Object System.Object
$server | Add-Member -MemberType NoteProperty -Name VM -Value $vm.Name
$server | Add-Member -MemberType NoteProperty -Name NIC -Value $networkInterfaceName
$server | Add-Member -MemberType NoteProperty -Name PrivateIP -Value $PrivateIP
if($networkInterface.IpConfigurations.PublicIpAddress -ne $null) {
$publicIPinterface = $networkInterface.IpConfigurations.PublicIpAddress[0].Id
$publicIPinterfaceName = $publicIPinterface.Split('/')[-1]
$PublicIP = Get-AzureRmPublicIpAddress -ResourceGroupName $networkInterfaceResourceGroupName -Name $publicIPinterfaceName | select -ExpandProperty IpAddress | Out-String
}
$server | Add-Member -MemberType NoteProperty -Name PublicIP -Value $PublicIP
$array += $server
}
}
}
$array | Export-Csv -NoTypeInformation .\azurermVMip.csv
$array.Clear()

No comments:

Post a Comment