How to list VMs by the virtual network they are connected to
This is from an internal question I replied to. This is a simply script given as a starting point that can be extended.
----------------------------------------------------------------------------------------------------------------------------------
I have a host that has 4 physical network cards, 3 of which are mapped to virtual switches that are External.
I would like to, programmatically,
(1) get these 3 virtual network adapters for the given host
PS C:\ > $virtnets = Get-VirtualNetwork -VMHost myhost PS C:\ > $virtnets.Count 5 PS C:\ > $virtnets | ft name Name ---- BLAH 3BLAH3 PRODUCTION Broadcom - Virtual Network Test1 |
(2) figure out how many VMs are connected to each of them
$vmhost = Get-VMHost | where {$_.Name -match "myhost"} $vmhost.VMs.Count 43 PS C:\> $count = 1 PS C:\> foreach($vm in $vmhost.VMs){foreach($vnic in $vm.VirtualNetworkAdapters) {if($virtnets -eq $vnic.virtualnetwork){Write-Host ("VM: " + $vm.Name + ", NIC: " + $vnic.VirtualNetwork + ", Count: " + $Count++)}}} VM: 32w2k8r2, NIC: Test1, Count: 1 VM: hectorl3, NIC: Test1, Count: 2 VM: VI3Servers, NIC: Test1, Count: 3 VM: vi3servers01, NIC: Test1, Count: 4 VM: vi3vc2501, NIC: Broadcom - Virtual Network, Count: 5 VM: VirtuozzoVM01, NIC: Test1, Count: 6 VM: VirtuozzoVM02, NIC: Test1, Count: 7 VM: VM_fromblank, NIC: Test1, Count: 8 VM: VM1_DUPMAC, NIC: Broadcom - Virtual Network, Count: 9 VM: VM1_DUPMAC, NIC: Broadcom - Virtual Network, Count: 10 VM: VMM2008R2RTM, NIC: Test1, Count: 11 VM: VMM2008R2TEST, NIC: Test1, Count: 12 VM: vmm2008test, NIC: Test1, Count: 13 VM: VMNIC, NIC: 3BLAH3, Count: 14 VM: VMNIC, NIC: BLAH, Count: 15 VM: VMNIC, NIC: PRODUCTION, Count: 16 PS C:\> |