function Get-UplinkDetails {
<#
.NOTES
===========================================================================
Created by: Markus Kraus
Twitter: @VMarkus_K
Private Blog: mycloudrevolution.com
===========================================================================
Changelog:
2017.03 ver 1.0 Base Release
===========================================================================
External Code Sources:
Get-CDP Version from @LucD22
https://communities.vmware.com/thread/319553
===========================================================================
Tested Against Environment:
vSphere Version: vSphere 6.0 U2
PowerCLI Version: PowerCLI 6.3 R1
PowerShell Version: 4.0
OS Version: Server 2012 R2
Keyword: ESXi, Network, CDP, DVS, vSwitch, VMNIC
===========================================================================
.DESCRIPTION
This cmdlet collects detailed informations about your ESXi Host connections to pSwitch and DVS / vSwitch
.Example
Get-UplinkDetails -Clustername * | ft -AutoSize
.Example
Get-UplinkDetails -Clustername MyCluster001 | ft -AutoSize
.Example
Get-UplinkDetails -Clustername MyCluster* | Sort Clustername, Hostname, DVS | ft -AutoSize
.PARAMETER Clustername
Your vSphere Cluster Name or Wildcard
#Requires PS -Version 4.0
#Requires -Modules VMware.VimAutomation.Core, @{ModuleName="VMware.VimAutomation.Core";ModuleVersion="6.3.0.0"}
#>
[CmdletBinding()]
param(
[Parameter(Mandatory=$True, ValueFromPipeline=$False, Position=0)]
[String] $Clustername
)
Begin {
$Validate = $True
if (($myCluster = Get-Cluster -Name $Clustername).count -lt 1) {
$Validate = $False
throw "No Cluster '$myCluster' found"
}
if (($myHosts = $myCluster | Get-VMHost).count -lt 1) {
$Validate = $False
throw "No Hosts in Cluster '$myCluster' found"
}
function Get-CDP ($VMhost){
$VMhostProxySwitch = $VMhost.NetworkInfo.ExtensionData.ProxySwitch
$VMhostSwitch = $VMhost.NetworkInfo.VirtualSwitch
$objReport = @()
$VMhost| %{Get-View $_.ID} |
%{ Get-View $_.ConfigManager.NetworkSystem} |
%{ foreach($physnic in $_.NetworkInfo.Pnic){
$obj = "" | Select-Object Clustername,Hostname,VMNIC,PCI,MAC,DVS,vSwitch,CDP_Port,CDP_Device,CDP_Address
$pnicInfo = $_.QueryNetworkHint($physnic.Device)
foreach($hint in $pnicInfo){
$obj.Clustername = $VMhost.parent.name
$obj.Hostname = $VMhost.name
$obj.VMNIC = $physnic.Device
$obj.PCI = $physnic.PCI
$obj.MAC = $physnic.Mac
if ($backing = ($VMhostProxySwitch | where {$_.Spec.Backing.PnicSpec.PnicDevice -eq $physnic.Device}).DvsName) {
$obj.DVS = $backing
} else {
$obj.DVS = "-No Backing-"
}
if ($backing = ($VMhostSwitch | where {$_.Nic -eq $physnic.Device}).Name) {
$obj.vSwitch = $backing
} else {
$obj.vSwitch = "-No Backing-"
}
if( $hint.ConnectedSwitchPort ) {
$obj.CDP_Port = $hint.ConnectedSwitchPort.PortId
$obj.CDP_Device = $hint.ConnectedSwitchPort.DevId
$obj.CDP_Address = $hint.ConnectedSwitchPort.Address
} else {
$obj.CDP_Port = "-No Info-"
$obj.CDP_Device = "-No Info-"
$obj.CDP_Address = "-No Info-"
}
}
$objReport += $obj
}
}
$objReport
}
}
Process {
$MyView = @()
if ($Validate -eq $True) {
foreach ($myHost in $myHosts) {
$CDP = Get-CDP $myHost
$MyView += $CDP
}
$MyView | Sort Clustername, Hostname, VMNIC
}
}
}