I needed to turn on CDP on all hosts very quickly based on a request from out network guys
I could do all 30 hosts manually but decided to try in powershell. After few minutes of google around I found this site
I made a quick, and again very dirty, Powershell Script to turn on CDP on all hosts based on the code on that site. Because of the identical setup I could do it this way.
Again. As wit all powershell scripts: this is going to hurt the eyes of a real PS scripter but hope it is os some use for someone..
function set-vSwitchLinkDiscovery {
Param (
#Switch to enable vSwitch Discovery On
[Parameter(Mandatory=$true,ValueFromPipeline=$true)] [string] $vSwitchName = "vSwitch0",
#Host on which the vSwitch Resides
[Parameter(Mandatory=$true,HelpMessage="Need Host Name to connect with")] [string] $VMHost = "NoHostPassed"
) #Param
PROCESS{
#Variables
$linkProtocol = "cdp"
$linkOperation = "both"
#Get the specification for the vSwitch
$networkview = (get-vmhostnetwork -vmhost $VMHost | get-view)
$vSwitchSpec = ($networkView.NetworkConfig.vSwitch | Where {$_.Name -eq $vSwitchName}).Spec
#Set Protocol Type and Operation
$vSwitchSpec.Bridge.LinkDiscoveryProtocolConfig.protocol = $linkProtocol
$vSwitchSpec.Bridge.LinkDiscoveryProtocolConfig.operation = $linkOperation
#Commit Changes
$networkview.updateVirtualSwitch($vSwitchName,$vSwitchSpec)
"Updated " + $VMHost + "'s virtual switch " + $vSwitchName + " to do CDP"
}
}
cls
# Set the VI Server and Filename before running
Connect-VIServer "vcenter5"
Write "Gathering VMHost objects"
# enkel zuela via : $vmhosts = Get-VMHost | Sort Name | Where-Object {$_.Name -match "zuela" } | Get-View
$vmhosts = Get-VMHost | Sort Name | Get-View
$MyCol = @()
foreach ($vmhost in $vmhosts){
Write "****************"
$ESXHost = $vmhost.Name
Write "Collating information for $ESXHost"
set-vSwitchLinkDiscovery -vmhost $ESXHost -vSwitchName "vSwitch0"
set-vSwitchLinkDiscovery -vmhost $ESXHost -vSwitchName "vSwitch1"
set-vSwitchLinkDiscovery -vmhost $ESXHost -vSwitchName "vSwitch2"
Write "****************"
}
Hi Erik,
Perhaps this can help you as well.
http://technodrone.blogspot.com/2012/02/how-to-set-cdp-on-vswitchthe-powercli.html
I used the Get-ESXcli cmdlet – I found that a lot easier.