VMware documentation is excellent, but not if you're a beginner with PowerCLI. While you will find documentation on how to configure SNMP for your ESXi hosts, the way it's presented is not very clear and will leave you scratching your head in confusion since you'll be thinking how does this configure SNMP on all my ESXi hosts?
Simple Network Management Protocol (SNMP) is used to manage and monitor network devices and their functions by setting up a community string using version 1 or 2 or using version 3, which adds both encryption and authentication. The script discussed here will use either version 1 or 2, but not 3.
If you're ready to setup SNMP for you ESXi hosts, let's get started.
The script below will allow you to multi-select the ESXi hosts you want to configure, and then will set the SNMP community string to your desired value and either start or restart the SNMP service.
The first section of the script is just the title, the version, and comments on what the script does and is very much self-explanatory.
The second section, titled "Variables," is where essential information for credentials is collected. As you can see from the prompt and messages displayed, the script will collect the name of your VMware vCenter Server, ask you to enter your vCenter Server credentials, and finally ask for credentials used to connect directly to your ESXi hosts. Depending on how you have configured your vCenter Server, you may enter your Windows Domain credentials (e.g., This email address is being protected from spambots. You need JavaScript enabled to view it.), or you may use the local Single Sign-on domain and user, such as This email address is being protected from spambots. You need JavaScript enabled to view it. or the customized Single Sign-on domain used during setup. The next credential would be the root account and password for connecting directly to your ESXi host or hosts. Here I'm assuming that you have set all your ESXi hosts to use the same password.
$vcenter = Read-Host -Prompt "Enter your vCenter Server name (FQDN)" $vcenterCred = Get-Credential -Message "Enter your vCenter Server Credentials" $esxiCred = Get-Credential -Message "Enter your ESXi root credentials"
The thirds section, titled "Connect to vCenter" does just that: connects to your vCenter Server.
In first line, you are setting some configuration options before connecting to vCenter Server such as ignoring any invalid certificates. I do this because it's very common to find many deployments that don't have properly deployed certificates. Also, because we will not only connect to vCenter Server but your ESXi hosts directly, we don't want any warnings about connecting to multiple servers
Set-PowerCLIConfiguration -InvalidCertificateAction Ignore -Confirm:$false ` -DefaultVIServerMode Multiple | Out-Null
Here's the full script that you can copy and paste or you can use the GitHub repository URL located at the top of this article to download it.
####### Automate configuring SNMP on ESXi hosts ####### #################### version 1.0 ##################### ####################################################### <# This script will connect to both your vCenter Server,ESXi hosts you select, update the SNMP community stringfor either SNMP v1 or v2, then start or restart theSNMP service for the change to take effect. #>########################################################################## Variables ############################################################################### $vcenter = Read-Host -Prompt "Enter your vCenter Server name (FQDN)"$vcenterCred = Get-Credential -Message "Enter your vCenter Server Credentials"$esxiCred = Get-Credential -Message "Enter your ESXi root credentials" ##################################################################### Connect to vCenter ########################################################################### Set-PowerCLIConfiguration -InvalidCertificateAction Ignore -Confirm:$false ` -DefaultVIServerMode Multiple | Out-NullConnect-VIServer -Server $vcenter -Credential $vcenterCred ###################################################################### Get SNMP Settings ########################################################################### $myHosts = Get-VMHost | Out-GridView -OutputMode MultipleConnect-ViServer $myHosts -Credential $esxiCred$hostSNMP = Get-VMHostSnmp -Server $myHosts.NameWrite-Host "`nThe current settings for your ESXi hosts are as follows:" ` -ForegroundColor Blue$hostSNMP | Select-Object VMHost,Enabled,Port,ReadOnlyCommunities | ` Format-Table -AutoSize ###################################################################### Set SNMP Settings ########################################################################### $communityString = Read-Host "Enter SNMP string."Write-Host "SNMP community string entered is: $communityString `n" ` -ForegroundColor BlueWrite-Host "Updated settings for your ESXi hosts are as follows: `n" ` -ForegroundColor Green$hostSNMP = Set-VMHostSNMP $hostSNMP -Enabled:$true ` -ReadOnlyCommunity $communityString$hostSNMP | Select-Object VMHost,Enabled,Port,ReadOnlyCommunities | ` Format-Table -AutoSize$snmpStatus = $myHosts| Get-VMHostService | ` Where-Object{$_.Key -eq "snmpd"} ForEach ($i in $snmpStatus) { if ($snmpStatus.running -eq $true) { $i | Restart-VMHostService -Confirm:$false | Out-Null } else { $i | Start-VMHostService -Confirm:$false | Out-Null }} Write-Host "SNMP service has been started on the ESXi host(s)." ` -ForegroundColor Blue$myHosts | Get-VMHostService | Where-Object{$_.Key -eq "snmpd"} | ` Select-Object VMHost,Key,Running | Format-Table -AutoSize ############################################################## Disconnect from vCenter and ESXi hosts ##############################################################Disconnect-VIServer -Server * -Confirm:$false