PowerCLI - Suppress SSH and ESXi shell warnings
When we deploy a set of ESXi’s most of the times we endup enabling SSH and ESXi shell to help troubleshooting.
But that simple tweak leaves a warning in each of the ESXi’s.
This is a pretty simple manual task since it will be just a question of going through each of the ESXi’s in vCenter and click suppress.
But while is a quick task when it is a small cluster, it could become a repetitive task when you are deploying multiple ESXi’s through some an automated deployed process.
Let us put some Powershell lines together to suppress the warnings in multiple ESXi’s in one go.
PowerCLI cmdlets - Set-AdvancedSetting and Get-AdvancedSetting
We will use cmdlets:
Host Advanced Setting to change
To suppress the alerts/warnings we will need to change UserVars.SuppressShellWarning .
Checking host Advanced Setting current value
To check the current value in each hypervisor of a cluster we can quickly use Get-AdvancedSetting cmdlet:
$cluster = Get-Cluster -Name <Cluster Name>
Write-Host "> Cluster - $cluster" -ForegroundColor Red
$hosts = $cluster | Get-VMHost
foreach($hyp in $hosts) {
Write-Host "-> Host -> $hyp" -ForegroundColor Yellow
# Suppress SSH/Shell Warnings
$currentStatus = Get-AdvancedSetting `
-Entity (Get-VMHost -Name $hyp.Name) `
-Name UserVars.SuppressShellWarning
Write-Host "##> Suppress SSH/Shell Warnings " `
"- Current Status = $currentStatus" -ForegroundColor Cyan
}
A quick check to validate the current setting status:
Changing the setting
We can use Set-AdvancedSetting cmdlet to change the advanced setting to suppress the warnings.
# Suppress SSH/Shell Warnings
$currentStatus = Get-AdvancedSetting `
-Entity (Get-VMHost -Name <ESXi Name>) `
-Name UserVars.SuppressShellWarning
Write-Host "##> Suppress SSH/Shell Warnings " `
"- Current Status = $currentStatus" -ForegroundColor Cyan
# Setting AdvancedSetting to 1
# 0 = No Suppression
# 1 = Suppress warnings
$null = $currentStatus | `
Set-AdvancedSetting -Value 1 -Confirm:$false
$lastStatus = Get-AdvancedSetting `
-Entity (Get-VMHost -Name <ESXi Name>) `
-Name UserVars.SuppressShellWarning
Write-Host "##> Suppress SSH/Shell Warnings " `
"- Last Status = $lastStatus" -ForegroundColor Green
Let us change the setting and check the result after:
ESXi suppressed warnings/alerts:
Getting a quick script together
param(
[Parameter(Position=1, Mandatory = $true, `
ValueFromPipeline = $true)] [string]$vcenter,
[Parameter(Position=2, Mandatory = $true, `
ValueFromPipeline = $true)] [string]$username,
[Parameter(Position=3, Mandatory = $true, `
ValueFromPipeline = $true)] [System.Security.SecureString]$password
)
Write-Host "-> Connect to site $vcenter" -ForegroundColor Green
$vcenterConnection = Connect-VIServer -Server $vcenter `
-User $username `
-Password ([System.Runtime.InteropServices.Marshal]::PtrToStringAuto([System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($password)))
$clusters = Get-Cluster -Server $vcenterConnection
foreach($cluster in $clusters) {
Write-Host "--> Cluster - $cluster" -ForegroundColor Green
$hosts = Get-Cluster -Name $cluster | Get-VMHost
foreach($hyp in $hosts) {
Write-Host "---> Host -> $hyp" -ForegroundColor Green
# Suppress SSH/Shell Warnings
$statusBefore = Get-AdvancedSetting `
-Entity (Get-VMHost -Name $hyp.Name) `
-Name UserVars.SuppressShellWarning
$null = $resultBefore | `
Set-AdvancedSetting -Value 1 -Confirm:$false
$statusAfter = Get-AdvancedSetting `
-Entity (Get-VMHost -Name $hyp.Name) `
-Name UserVars.SuppressShellWarning
Write-Host "---# Suppress SSH/Shell Warnings - Status = " `
"Before:$(($statusBefore).Value) - " `
"After:$(($statusAfter).Value)" -ForegroundColor Red
}
}
Disconnect-VIServer -Server $vcenterConnection `
-Confirm:$false -ErrorAction SilentlyContinue