Automation

 View Only
  • 1.  Cisco Discovery Protocol

    Posted Jun 30, 2011 06:28 PM

    How easy would it be to get the below codes output to a spreadsheet. Ideally each column be the name of the ESXi Host and under those columns are the returned results.

    Get-VMHost | Where-Object {$_.State -eq "Connected"} |
    %{Get-View $_.ID} |
    %{$esxname = $_.Name; Get-View $_.ConfigManager.NetworkSystem} |
    %{ foreach($physnic in $_.NetworkInfo.Pnic){
        $pnicInfo = $_.QueryNetworkHint($physnic.Device)
        foreach($hint in $pnicInfo){
          Write-Host $esxname $physnic.Device
          if( $hint.ConnectedSwitchPort ) {
            $hint.ConnectedSwitchPort
          } else {
            Write-Host "No CDP information available."; Write-Host
          }
        }
      }
    }

    code found in http://kb.vmware.com/kb/1003885



  • 2.  RE: Cisco Discovery Protocol
    Best Answer

    Posted Jun 30, 2011 08:14 PM

    This will give you CSV output where each row is a host with it's CDP properties

    cls
    $objReport = @()

    function Get-CDP    {
        $obj = @()
        Get-VMHost  | Where-Object {$_.State -eq "Connected"} | %{Get-View $_.ID} |
        %{$esxname = $_.Name; Get-View $_.ConfigManager.NetworkSystem} |
        %{ foreach($physnic in $_.NetworkInfo.Pnic){
       
            $obj = "" | Select-Object hostname, pNic,PortId,Address,vlan       
       
            $pnicInfo = $_.QueryNetworkHint($physnic.Device)
            foreach($hint in $pnicInfo){
              #Write-Host "$esxname $($physnic.Device)"
              $obj.hostname = $esxname
              $obj.pNic = $physnic.Device
              if( $hint.ConnectedSwitchPort ) {
                # $hint.ConnectedSwitchPort
                $obj.PortId = $hint.ConnectedSwitchPort.PortId
              } else {
                # Write-Host "No CDP information available."; Write-Host
                $obj.PortId = "No CDP information available."
              }
              $obj.Address = $hint.ConnectedSwitchPort.Address
              $obj.vlan = $hint.ConnectedSwitchPort.vlan
             
            }
            $objReport += $obj
          }
        }
    $objReport
    }

    $results = get-cdp
    $results |  Export-Csv "c:\temp\out.csv"

    Attachment(s)

    ps1
    1_cdp-to-csv.ps1   1 KB 1 version
    ps1
    cdp-to-csv.ps1   1 KB 1 version
    ps1
    3_cdp-to-csv.ps1   1 KB 1 version
    ps1
    2_cdp-to-csv.ps1   1 KB 1 version


  • 3.  RE: Cisco Discovery Protocol

    Posted Jun 30, 2011 09:34 PM

    Thanks BenConrad that should do the trick!

    THe attachment is a bit different than your pasted code.  I used the pasted code to get the results.



  • 4.  RE: Cisco Discovery Protocol

    Posted Apr 23, 2015 10:35 AM

    How can i add to this the "Device ID" string?

    Thanks!



  • 5.  RE: Cisco Discovery Protocol

    Posted Apr 23, 2015 01:15 PM

    You mean the PCI device hash ?

    Like this

    function Get-CDP    { 

        $objReport = @() 

        Get-VMHost | Where-Object {$_.State -eq "Connected"} | %{Get-View $_.ID} | 

        %{$esxname = $_.Name; Get-View $_.ConfigManager.NetworkSystem} | 

        %{ foreach($physnic in $_.NetworkInfo.Pnic){ 

         

            $obj = "" | Select-Object hostname, pNic,PCI,PortId,Address,vlan         

         

            $pnicInfo = $_.QueryNetworkHint($physnic.Device) 

            foreach($hint in $pnicInfo){ 

              #Write-Host "$esxname $($physnic.Device)" 

              $obj.hostname = $esxname 

              $obj.pNic = $physnic.Device

              $obj.PCI = $physnic.PCI

              if( $hint.ConnectedSwitchPort ) { 

                $obj.PortId = $hint.ConnectedSwitchPort.PortId 

              } else

                $obj.PortId = "No CDP information available." 

              } 

              $obj.Address = $hint.ConnectedSwitchPort.Address 

              $obj.vlan = $hint.ConnectedSwitchPort.vlan 

               

            } 

            $objReport += $obj 

          } 

        } 

    $objReport 



  • 6.  RE: Cisco Discovery Protocol

    Posted Mar 21, 2017 03:20 PM

    Thanks to LucD​ for sharing this great function.

    I have inetgrated the orignal version into my own Function:

    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

        }

        }

    }



  • 7.  RE: Cisco Discovery Protocol

    Posted Aug 07, 2018 03:13 PM
      |   view attached

    I've modified  vMarkusK1985 script, to include additional cdp fields in the below script:

    Attachment(s)

    zip
    Get-UplinkDetails.ps1.zip   1 KB 1 version


  • 8.  RE: Cisco Discovery Protocol

    Posted Apr 17, 2020 10:56 AM

    goslackware3​ I would like to incorporate another two properties into vMarkusK1985  script like vmnic link status & vmnic's MTU size. Can you please with those two properties.



  • 9.  RE: Cisco Discovery Protocol

    Posted Apr 22, 2020 01:57 PM

    Thanks for sharing this great script.



  • 10.  RE: Cisco Discovery Protocol

    Posted Oct 05, 2020 05:06 PM

    I have tried to run this script but completing very quickly with no output? Can you suggest how to execute this function?

    Copied the below script and Connected the center and executed it as below.

    .\Get-UplinkDetails.ps1 -Clustername MyCluster001 | ft -AutoSize

    regards

    Narayanan.



  • 11.  RE: Cisco Discovery Protocol

    Posted Sep 29, 2022 08:35 PM

     I am in same stage now.Can you please help me how to execute this.

    Found the solution:

    Added below line at the end of script to get the output

    Get-UplinkDetails -Clustername * | Sort Clustername, Hostname, DVS | ft -AutoSize

    ===================================

    However not getting vDS cdp details.If anyonce can help,would be highly appreciated

    tried simiar trick by adding below line at end of script provided by   https://mycloudrevolution.com/en/2020/05/04/esxi-lldp-uplink-details/ but didnot work

    Get-VMHost -Name MyHost | Get-UplinkDetails -Type CDP | Where-Object {$_.VDS -ne "-No Backing-"} | Format-Table -AutoSize

    getting the below error

    Get-VMHost VMHost with name 'MyHost' was not found using the specified filter(s).
    At D:\RR\cdpinfo-v2.ps1:148 char:1