4 ways to configure adv. settings in CLI

There are a few CLI methods to configure advanced settings in ESXi Hosts. It depends on where you are (vMA/Linux, Windows Client, Console) and what you want to do (configure all hosts or just a specific host, …) which option fits best. Here I describe the options: native PowerCLI, esxcli (console), esxcli (get-esxcli), esxcli (get-esxcli -v2) to:
- List
- All settings
- All settings in a specific Tree or Folder (eg.
/UserVars) - A specific option
- All settings that differ from default settings (Delta)
- Set
- Integer
- String.
esxcli (console)
List
- All settings
esxcli system settings advanced list - Folder
esxcli system settings advanced list -t /UserVars - Value
esxcli system settings advanced list -o /UserVars/VMAuthdDisabledProtocols - Delta
esxcli system settings advanced list -d
Set
- Integer
esxcli system settings advanced set -o /UserVars/SuppressShellWarning -i 1 - String
esxcli system settings advanced set -o /UserVars/VMAuthdDisabledProtocols -s "tlsv1" - Reset to Default
esxcli system settings advanced set -o /UserVars/SuppressShellWarning -d
esxcli (get-esxcli)
Read Cmdlet Reference for more information on get-esxcli. First create the esxcli-object
$cli1 = Get-VMHost hostname | Get-EsxCli
List
To list settings, you have 3 parameters to enter. These parameters have to be entered on the right position:
- Delta (Boolean)
- Option (String)
- Tree (String):
- All settings
$cli1.system.settings.advanced.list() - Folder
$cli1.system.settings.advanced.list($false, $null, "/UserVars") - Value
$cli1.system.settings.advanced.list($false, "/UserVars/SuppressShellWarning", $null) - Delta
$cli1.system.settings.advanced.list($true)
Set
To list settings, you have 4 parameters to enter. These parameters have to be entered on the right position:
- Default (Boolean)
- Integer (Integer)
- Option (String)
- String-Value (String):
- Integer
$cli1.system.settings.advanced.set($false, 1, "/UserVars/SuppressShellWarning", $null) - String
$cli1.system.settings.advanced.set($false, $null, "/UserVars/VMAuthdDisabledProtocols", "tlsv1") - Reset to Default
$cli1.system.settings.advanced.set($true, $null, "/UserVars/SuppressShellWarning", $null)
esxcli (get-esxcli; v2)
First create the esxcli-object
$cli2 = Get-VMHost hostname | Get-EsxCli -v2
List
- All settings
$cli2.system.settings.advanced.list.Invoke()
Option 1
In this option, you fill in a hashtable.
$adv = $cli2.system.settings.advanced.list.CreateArgs()
Keys in hashtable: option ([string], optional), tree ([string], optional), delta ([boolean], optional)
- Folder
$adv.tree = "/UserVars"
$cli2.system.settings.advanced.list.Invoke($adv) - Value:
$adv.option = "/UserVars/SuppressShellWarning"
$cli2.system.settings.advanced.list.Invoke($adv) - Delta
$adv.delta = $true
$cli2.system.settings.advanced.list.Invoke($adv)
Option 2
- Folder
$cli2.system.settings.advanced.list.Invoke(@{tree="/UserVars"}) - Value:
$cli2.system.settings.advanced.list.Invoke(@{option="/UserVars/SuppressShellWarning"}) - Delta
$cli2.system.settings.advanced.list.Invoke(@{delta=$true})
Set
Option 1
$adv = $cli2.system.settings.advanced.set.CreateArgs()
Keys: default ([boolean], optional), option ([string]), stringvalue ([string], optional), intvalue ([long], optional)
- Integer
$adv.option = "/UserVars/SuppressShellWarning"
$adv.intvalue = 1
$cli2.system.settings.advanced.set.Invoke($adv) - String:
$adv.option = "/UserVars/VMAuthdDisabledProtocols"
$adv.stringvalue = "tlsv1"
$cli2.system.settings.advanced.set.Invoke($adv) - Reset to Default:
$adv.default = $true
$adv.option = "/UserVars/VMAuthdDisabledProtocols"$cli2.system.settings.advanced.set.Invoke($adv)
Option 2
- Integer
$cli2.system.settings.advanced.set.Invoke(@{option="/UserVars/SuppressShellWarning"; intvalue=1}) - String:
$cli2.system.settings.advanced.set.Invoke(@{option="/UserVars/VMAuthdDisabledProtocols"; stringvalue="sslv3"}) - Reset to Default:
$cli2.system.settings.advanced.set.Invoke(@{option="/UserVars/VMAuthdDisabledProtocols"; default=$true})
PowerCLI
I did not find a way to handle default-values of advanced settings in native PowerCLI. See Cmdlet Reference for more info.
List
- All settings
Get-VMHost hostname | Get-AdvancedSetting | sort | ft -AutoSize - Value
Get-VMHost hostname | Get-AdvancedSetting -Name UserVars.VMAuthdDisabledProtocols | select *
Set
- Integer
Get-VMHost hostname | Get-AdvancedSetting -Name UserVars.SuppressShellWarning | Set-AdvancedSetting -Value 1 -Confirm:$false
- String
Get-VMHost hostname | Get-AdvancedSetting -Name UserVars.VMAuthdDisabledProtocols | Set-AdvancedSetting -Value "sslv3" -Confirm:$false



[…] Keep in mind, this is a host-global setting, so when migration is finished, reset value back to 1. Here you can read more about setting advanced parameter using command […]