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:\>