Automate SNMP configuration on multiple ESXi hosts

I have created a PowerCLI script that can be used for applying SNMP configuration on multiple ESXi hosts of a vSphere Cluster by replicating configuration from a reference ESXi host.

Leave a comment with your email address if you have a question and I will get back to you soon.

Enjoy the script 🙂

  1. <#
  2.   configure-snmp-on-esxi.ps1
  3.  
  4.   Configure SNMP settings on multiple ESXi hosts using a reference host settings
  5.  
  6.   .History.
  7.   2020/04/09 - 0.1 - Reza Rafiee - First version
  8.  
  9.   .Variables.
  10.   $VC: vCenter Server
  11.   $targethosts: Target ESXi host cluster
  12.   (to apply on single ESXi host refer to line30)
  13.   $refesxhost : Reference ESXi host
  14.  
  15. #>
  16.  
  17. $VC="vCenter Server Name"
  18. $targethosts="Target cluster name"
  19. $refesxhost = "Reference ESXi host name"
  20.  
  21.  
  22.  
  23. Connect-viserver $VCServer
  24. $refhost = get-vmhost $refesxhost
  25. $refesxcli = Get-EsxCli -VMhost $refhost -V2
  26. $snmp=$refesxcli.system.snmp.get.invoke()
  27. write-host "SNMP configuration on " $refesxhost," (Refernce Host): "
  28. $snmp
  29.  
  30. $vmhosts = get-cluster -name $targethosts | get-vmhost
  31. <#If you want to apply the snmp config on a single host
  32.  then enter ESXi host name for $targethosts variable and
  33.  replace the above line with the below line:
  34.  
  35.  $vmhosts = get-vmhost -name $targethosts
  36.  
  37.  #>
  38.  
  39.  
  40. foreach ($vmhost in $vmhosts){
  41.  
  42. $esxcli = Get-EsxCli -VMHost $vmhost -V2
  43.  
  44. <#Reset SNMP settings to factory default on the target host prior to
  45. reconfigure SNMP settings on that host#>
  46. $snmpreset = $esxcli.system.snmp.set.CreateArgs()
  47. $snmpreset.reset = $true
  48. $esxcli.system.snmp.set.Invoke($snmpreset)
  49.  
  50. write-host "SNMP settigs has been reset to default on $vmhost"
  51. #SNMP settings reset complete
  52.  
  53. $esxcli = Get-EsxCli -VMHost $vmhost -V2
  54. $arguments = $esxcli.system.snmp.set.CreateArgs()
  55.  
  56. #The below arguments (if statements) cannot be null hence we skip the null ones
  57.  
  58. if ($snmp.communities -ne $null) {
  59. $arguments.communities = $snmp.communities
  60. }
  61.  
  62. if ($snmp.engineid -ne "$null") {
  63. write-host "engineid is nt null"
  64. $arguments.engineid = $snmp.engineid
  65. }
  66.  
  67. if ($snmp.targets -ne $null) {
  68. $arguments.targets = $snmp.targets
  69. }
  70.  
  71. if ($snmp.users -ne $null) {
  72. $arguments.users = $snmp.users
  73. }
  74.  
  75. if ($snmp.privacy -in ("none", "AES128")) {
  76. $arguments.privacy = $snmp.privacy
  77. }
  78.  
  79. if ($snmp.remoteusers -ne $null) {
  80. $arguments.remoteusers = $snmp.remoteusers
  81. }
  82.  
  83. if ($snmp.authentication -in ("none", "MD5", "SHA1")) {
  84. $arguments.authentication = $snmp.authentication
  85. }
  86.  
  87. if ($snmp.v3targets -in ("none", "auth", "priv")) {
  88. $arguments.v3targets = $snmp.v3targets
  89. }
  90.  
  91. $arguments.hwsrc = $snmp.hwsrc
  92. $arguments.largestorage = $snmp.largestorage
  93. $arguments.loglevel = $snmp.loglevel
  94. $arguments.notraps = $snmp.notraps
  95. $arguments.enable = $snmp.enable
  96. $arguments.port = $snmp.port
  97. $arguments.syscontact = $snmp.syscontact
  98. $arguments.syslocation = $snmp.syslocation
  99.  
  100. $esxcli.system.snmp.set.Invoke($arguments)
  101.  
  102. $newsnmp=$esxcli.system.snmp.get.Invoke()
  103. write-host "SNMP configuration on", $vmhost, ": "
  104. $newsnmp
  105.  
  106. }
%d bloggers like this:
search previous next tag category expand menu location phone mail time cart zoom edit close