build 7bbbddf7 | content blog-content@c8490fa · 338 posts | profiles 20 · corpus 267 | 0 skipped | | format
apiVersion: soultec.ch/v1kind: Postmetadata: name: powercli-checking-esxi-hosts-advanced-settings-against-vmwares-default locale: de labels: author: dario-doerflinger series: scripting capability/automation: 1.78 vendor/vmware: 0.88 annotations: source: blog-content/posts/de/powercli-checking-esxi-hosts-advanced-settings-against-vmwares-default.md route: /de/insights/powercli-checking-esxi-hosts-advanced-settings-against-vmwares-default/ schema: /nerd/schema/posts.json markdown: /de/insights/powercli-checking-esxi-hosts-advanced-settings-against-vmwares-default.mdspec: title: Advanced Settings der ESXi Hosts gegen den VMware-Standard prüfen date: 2017-10-05 author: dario-doerflinger locale: de summary: >- Über die Jahre und Releases hinweg ändern sich die Best Practices von VMware. Deshalb gehören die gesetzten Advanced Settings bei jedem Release auf den Prüfstand. capabilities: [automation] vendors: [vmware] series: scripting migrated: 2026-08-24 translationReviewed: false draft: false sections: - body: | Über die Jahre und Releases hinweg ändern sich die Best Practices von VMware. Früher mussten wir eine Menge Advanced Settings setzen, damit eine gewünschte Funktion lief oder damit dem VMware Admin das Leben etwas leichter fiel. Die Sache mit diesen Einstellungen: Du solltest sie bei jedem Release prüfen. Braucht es sie noch? Sind sie deprecated? Verhält sich das System immer noch gleich, wenn sie gesetzt sind? Damit diese Prüfung leichter fällt, habe ich ein kleines Script geschrieben. Für Advanced Settings gibt es das Cmdlet «Get-AdvancedSetting». Ich habe aber festgestellt, dass es die Standardwerte nicht liefert, sondern nur Name und aktuellen Wert. Also hole ich die Advanced Settings über eine esxcli-Instanz. ESXCLI liefert genau diese wertvolle Information über die Standardwerte, als String oder Int. Ich lese also alle Advanced Settings eines Hosts ein. Dann filtere ich ein paar Einstellungen heraus, die nicht im Report auftauchen sollen, weil ich weiss, warum ich sie gesetzt habe, und sie behalten will. Danach wird jeder Wert mit seinem Standardwert verglichen. Stimmen sie überein, fliegt auch dieser Eintrag heraus. Am Ende habe ich eine Liste aller Einstellungen über alle Hosts, die nicht auf dem Standardwert stehen. Die kann ich dann in der Dokumentation nachschlagen und entweder auf den Standard zurücksetzen, falls ich sie nicht mehr brauche, oder in meinen Filter aufnehmen, wenn sie so bleiben sollen. Update: Dieses Script liegt inzwischen auf [GitHub](https://github.com/virtualFrog/PowerCLI-Scripts). Hier ist das Script: ```powershell <# .EXAMPLE C:\foo> .\Get-AdvancedSettingsNotDefault.ps1 -hostName esx01.virtualfrog.lab -delta:$true Description ----------- Gets All settings that are not at default value from given host .EXAMPLE C:\foo> .\Get-AdvancedSettingsNotDefault.ps1 -delta:$true Description ----------- Gets All settings from all hosts that are not at default value .EXAMPLE C:\foo> .\Get-AdvancedSettingsNotDefault.ps1 -delta:$false Description ----------- Gets All settings from all hosts #> param ( [Parameter(Mandatory=$False)] [string]$hostName="none", [Parameter(Mandatory=$False)] [boolean]$delta=$false ) $excludedSettings = "/Migrate/Vmknic|/UserVars/ProductLockerLocation|/UserVars/SuppressShellWarning" $AdvancedSettings = @() $AdvancedSettingsFiltered = @() # Checking if host exists if ($hostName -ne "none") { try { $vmhost = Get-VMHost $hostName -ErrorAction Stop } catch { Write-Host -ForegroundColor Red "There is no host available with name" $hostName exit } # Retrieving advanced settings $esxcli = $vmhost | get-esxcli -V2 $AdvancedSettings = $esxcli.system.settings.advanced.list.Invoke(@{delta = $delta}) |select @{Name="Hostname"; Expression = {$vmhost}},Path,DefaultIntValue,IntValue,DefaultStringValue,StringValue,Description # Displaying results #$AdvancedSettings } else { $vmhosts = get-vmhost foreach ($vmhost in $vmhosts) { $esxcli = $vmhost | get-esxcli -V2 $AdvancedSettings += $esxcli.system.settings.advanced.list.Invoke(@{delta = $delta}) |select @{Name="Hostname"; Expression = {$vmhost}},Path,DefaultIntValue,IntValue,DefaultStringValue,StringValue,Description } #$AdvancedSettings } # Browsing advanced settings and check for mismatch ForEach ($advancedSetting in $AdvancedSettings.GetEnumerator()) { if ( ($AdvancedSetting.Path -notmatch $excludedSettings) -And (($AdvancedSetting.IntValue -ne $AdvancedSetting.DefaultIntValue) -Or ($AdvancedSetting.StringValue -notmatch $AdvancedSetting.DefaultStringValue) ) ){ $line = "" | Select Hostname,Path,DefaultIntValue,IntValue,DefaultStringValue,StringValue,Description $line.Hostname = $advancedSetting.Hostname $line.Path = $advancedSetting.Path $line.DefaultIntValue = $advancedSetting.DefaultIntValue $line.IntValue = $advancedSetting.IntValue $line.DefaultStringValue = $advancedSetting.DefaultStringValue $line.StringValue = $advancedSetting.StringValue $line.Description = $advancedSetting.Description $AdvancedSettingsFiltered += $line } } $AdvancedSettingsFiltered ```status: corpus: 267 alsoLike: - {ref: posts/vmware-explore-las-vegas-hackathon-2025, score: 1.00} - {ref: posts/vmware-hackathon-2024-project, score: 1.00} - {ref: solutions/vmware/vmware-cloud-foundation/addon/application-services, score: 0.60}
{ "apiVersion": "soultec.ch/v1", "kind": "Post", "metadata": { "name": "powercli-checking-esxi-hosts-advanced-settings-against-vmwares-default", "locale": "de", "labels": { "author": "dario-doerflinger", "series": "scripting", "capability/automation": "1.78", "vendor/vmware": "0.88" }, "annotations": { "source": "blog-content/posts/de/powercli-checking-esxi-hosts-advanced-settings-against-vmwares-default.md", "route": "/de/insights/powercli-checking-esxi-hosts-advanced-settings-against-vmwares-default/", "schema": "/nerd/schema/posts.json", "markdown": "/de/insights/powercli-checking-esxi-hosts-advanced-settings-against-vmwares-default.md" } }, "spec": { "title": "Advanced Settings der ESXi Hosts gegen den VMware-Standard prüfen", "date": "2017-10-05", "author": "dario-doerflinger", "locale": "de", "summary": "Über die Jahre und Releases hinweg ändern sich die Best Practices von VMware. Deshalb gehören die gesetzten Advanced Settings bei jedem Release auf den Prüfstand.", "capabilities": [ "automation" ], "vendors": [ "vmware" ], "series": "scripting", "migrated": "2026-08-24", "translationReviewed": false, "draft": false }, "sections": [ { "body": "Über die Jahre und Releases hinweg ändern sich die Best Practices von VMware. Früher mussten wir eine Menge Advanced Settings setzen, damit eine gewünschte Funktion lief oder damit dem VMware Admin das Leben etwas leichter fiel.\n\nDie Sache mit diesen Einstellungen: Du solltest sie bei jedem Release prüfen. Braucht es sie noch? Sind sie deprecated? Verhält sich das System immer noch gleich, wenn sie gesetzt sind?\n\nDamit diese Prüfung leichter fällt, habe ich ein kleines Script geschrieben. Für Advanced Settings gibt es das Cmdlet «Get-AdvancedSetting». Ich habe aber festgestellt, dass es die Standardwerte nicht liefert, sondern nur Name und aktuellen Wert. Also hole ich die Advanced Settings über eine esxcli-Instanz. ESXCLI liefert genau diese wertvolle Information über die Standardwerte, als String oder Int.\n\nIch lese also alle Advanced Settings eines Hosts ein. Dann filtere ich ein paar Einstellungen heraus, die nicht im Report auftauchen sollen, weil ich weiss, warum ich sie gesetzt habe, und sie behalten will. Danach wird jeder Wert mit seinem Standardwert verglichen. Stimmen sie überein, fliegt auch dieser Eintrag heraus.\n\nAm Ende habe ich eine Liste aller Einstellungen über alle Hosts, die nicht auf dem Standardwert stehen. Die kann ich dann in der Dokumentation nachschlagen und entweder auf den Standard zurücksetzen, falls ich sie nicht mehr brauche, oder in meinen Filter aufnehmen, wenn sie so bleiben sollen.\n\nUpdate: Dieses Script liegt inzwischen auf [GitHub](https://github.com/virtualFrog/PowerCLI-Scripts).\n\nHier ist das Script:\n\n```powershell\n<#\n.EXAMPLE\n C:\\foo> .\\Get-AdvancedSettingsNotDefault.ps1 -hostName esx01.virtualfrog.lab -delta:$true\n\n\tDescription\n\t-----------\n\tGets All settings that are not at default value from given host\n.EXAMPLE\n C:\\foo> .\\Get-AdvancedSettingsNotDefault.ps1 -delta:$true\n\n Description\n -----------\n Gets All settings from all hosts that are not at default value\n.EXAMPLE\n C:\\foo> .\\Get-AdvancedSettingsNotDefault.ps1 -delta:$false\n\n Description\n -----------\n Gets All settings from all hosts\n#> \n\nparam (\n\t[Parameter(Mandatory=$False)]\n\t[string]$hostName=\"none\",\n [Parameter(Mandatory=$False)]\n [boolean]$delta=$false\n)\n\n$excludedSettings = \"/Migrate/Vmknic|/UserVars/ProductLockerLocation|/UserVars/SuppressShellWarning\"\n$AdvancedSettings = @()\n$AdvancedSettingsFiltered = @()\n\n# Checking if host exists\nif ($hostName -ne \"none\") {\n try {\n $vmhost = Get-VMHost $hostName -ErrorAction Stop\n } catch {\n Write-Host -ForegroundColor Red \"There is no host available with name\" $hostName\n exit\n } \n\n # Retrieving advanced settings\n $esxcli = $vmhost | get-esxcli -V2\n $AdvancedSettings = $esxcli.system.settings.advanced.list.Invoke(@{delta = $delta}) |select @{Name=\"Hostname\"; Expression = {$vmhost}},Path,DefaultIntValue,IntValue,DefaultStringValue,StringValue,Description\n\n # Displaying results\n #$AdvancedSettings\n\n} else {\n $vmhosts = get-vmhost\n foreach ($vmhost in $vmhosts) {\n $esxcli = $vmhost | get-esxcli -V2\n $AdvancedSettings += $esxcli.system.settings.advanced.list.Invoke(@{delta = $delta}) |select @{Name=\"Hostname\"; Expression = {$vmhost}},Path,DefaultIntValue,IntValue,DefaultStringValue,StringValue,Description\n }\n #$AdvancedSettings\n}\n\n# Browsing advanced settings and check for mismatch\nForEach ($advancedSetting in $AdvancedSettings.GetEnumerator()) {\n if ( ($AdvancedSetting.Path -notmatch $excludedSettings) -And (($AdvancedSetting.IntValue -ne $AdvancedSetting.DefaultIntValue) -Or ($AdvancedSetting.StringValue -notmatch $AdvancedSetting.DefaultStringValue) ) ){\n $line = \"\" | Select Hostname,Path,DefaultIntValue,IntValue,DefaultStringValue,StringValue,Description\n $line.Hostname = $advancedSetting.Hostname\n $line.Path = $advancedSetting.Path\n $line.DefaultIntValue = $advancedSetting.DefaultIntValue\n $line.IntValue = $advancedSetting.IntValue\n $line.DefaultStringValue = $advancedSetting.DefaultStringValue\n $line.StringValue = $advancedSetting.StringValue\n $line.Description = $advancedSetting.Description\n $AdvancedSettingsFiltered += $line\n }\n}\n$AdvancedSettingsFiltered\n```" } ], "status": { "corpus": 267, "alsoLike": [ { "ref": "posts/vmware-explore-las-vegas-hackathon-2025", "score": "1.00" }, { "ref": "posts/vmware-hackathon-2024-project", "score": "1.00" }, { "ref": "solutions/vmware/vmware-cloud-foundation/addon/application-services", "score": "0.60" } ] }}
apiVersion = "soultec.ch/v1"kind = "Post"[metadata]name = "powercli-checking-esxi-hosts-advanced-settings-against-vmwares-default"locale = "de"[metadata.labels]author = "dario-doerflinger"series = "scripting""capability/automation" = "1.78""vendor/vmware" = "0.88"[metadata.annotations]source = "blog-content/posts/de/powercli-checking-esxi-hosts-advanced-settings-against-vmwares-default.md"route = "/de/insights/powercli-checking-esxi-hosts-advanced-settings-against-vmwares-default/"schema = "/nerd/schema/posts.json"markdown = "/de/insights/powercli-checking-esxi-hosts-advanced-settings-against-vmwares-default.md"[spec]title = "Advanced Settings der ESXi Hosts gegen den VMware-Standard prüfen"date = 2017-10-05author = "dario-doerflinger"locale = "de"summary = "Über die Jahre und Releases hinweg ändern sich die Best Practices von VMware. Deshalb gehören die gesetzten Advanced Settings bei jedem Release auf den Prüfstand."capabilities = ["automation"]vendors = ["vmware"]series = "scripting"migrated = 2026-08-24translationReviewed = falsedraft = false[[sections]]body = '''Über die Jahre und Releases hinweg ändern sich die Best Practices von VMware. Früher mussten wir eine Menge Advanced Settings setzen, damit eine gewünschte Funktion lief oder damit dem VMware Admin das Leben etwas leichter fiel.Die Sache mit diesen Einstellungen: Du solltest sie bei jedem Release prüfen. Braucht es sie noch? Sind sie deprecated? Verhält sich das System immer noch gleich, wenn sie gesetzt sind?Damit diese Prüfung leichter fällt, habe ich ein kleines Script geschrieben. Für Advanced Settings gibt es das Cmdlet «Get-AdvancedSetting». Ich habe aber festgestellt, dass es die Standardwerte nicht liefert, sondern nur Name und aktuellen Wert. Also hole ich die Advanced Settings über eine esxcli-Instanz. ESXCLI liefert genau diese wertvolle Information über die Standardwerte, als String oder Int.Ich lese also alle Advanced Settings eines Hosts ein. Dann filtere ich ein paar Einstellungen heraus, die nicht im Report auftauchen sollen, weil ich weiss, warum ich sie gesetzt habe, und sie behalten will. Danach wird jeder Wert mit seinem Standardwert verglichen. Stimmen sie überein, fliegt auch dieser Eintrag heraus.Am Ende habe ich eine Liste aller Einstellungen über alle Hosts, die nicht auf dem Standardwert stehen. Die kann ich dann in der Dokumentation nachschlagen und entweder auf den Standard zurücksetzen, falls ich sie nicht mehr brauche, oder in meinen Filter aufnehmen, wenn sie so bleiben sollen.Update: Dieses Script liegt inzwischen auf [GitHub](https://github.com/virtualFrog/PowerCLI-Scripts).Hier ist das Script:```powershell<#.EXAMPLE C:\foo> .\Get-AdvancedSettingsNotDefault.ps1 -hostName esx01.virtualfrog.lab -delta:$true Description ----------- Gets All settings that are not at default value from given host.EXAMPLE C:\foo> .\Get-AdvancedSettingsNotDefault.ps1 -delta:$true Description ----------- Gets All settings from all hosts that are not at default value.EXAMPLE C:\foo> .\Get-AdvancedSettingsNotDefault.ps1 -delta:$false Description ----------- Gets All settings from all hosts#> param ( [Parameter(Mandatory=$False)] [string]$hostName="none", [Parameter(Mandatory=$False)] [boolean]$delta=$false)$excludedSettings = "/Migrate/Vmknic|/UserVars/ProductLockerLocation|/UserVars/SuppressShellWarning"$AdvancedSettings = @()$AdvancedSettingsFiltered = @()# Checking if host existsif ($hostName -ne "none") { try { $vmhost = Get-VMHost $hostName -ErrorAction Stop } catch { Write-Host -ForegroundColor Red "There is no host available with name" $hostName exit } # Retrieving advanced settings $esxcli = $vmhost | get-esxcli -V2 $AdvancedSettings = $esxcli.system.settings.advanced.list.Invoke(@{delta = $delta}) |select @{Name="Hostname"; Expression = {$vmhost}},Path,DefaultIntValue,IntValue,DefaultStringValue,StringValue,Description # Displaying results #$AdvancedSettings} else { $vmhosts = get-vmhost foreach ($vmhost in $vmhosts) { $esxcli = $vmhost | get-esxcli -V2 $AdvancedSettings += $esxcli.system.settings.advanced.list.Invoke(@{delta = $delta}) |select @{Name="Hostname"; Expression = {$vmhost}},Path,DefaultIntValue,IntValue,DefaultStringValue,StringValue,Description } #$AdvancedSettings}# Browsing advanced settings and check for mismatchForEach ($advancedSetting in $AdvancedSettings.GetEnumerator()) { if ( ($AdvancedSetting.Path -notmatch $excludedSettings) -And (($AdvancedSetting.IntValue -ne $AdvancedSetting.DefaultIntValue) -Or ($AdvancedSetting.StringValue -notmatch $AdvancedSetting.DefaultStringValue) ) ){ $line = "" | Select Hostname,Path,DefaultIntValue,IntValue,DefaultStringValue,StringValue,Description $line.Hostname = $advancedSetting.Hostname $line.Path = $advancedSetting.Path $line.DefaultIntValue = $advancedSetting.DefaultIntValue $line.IntValue = $advancedSetting.IntValue $line.DefaultStringValue = $advancedSetting.DefaultStringValue $line.StringValue = $advancedSetting.StringValue $line.Description = $advancedSetting.Description $AdvancedSettingsFiltered += $line }}$AdvancedSettingsFiltered```'''[status]corpus = 267[[status.alsoLike]]ref = "posts/vmware-explore-las-vegas-hackathon-2025"score = "1.00"[[status.alsoLike]]ref = "posts/vmware-hackathon-2024-project"score = "1.00"[[status.alsoLike]]ref = "solutions/vmware/vmware-cloud-foundation/addon/application-services"score = "0.60"
<?xml version="1.0" encoding="UTF-8"?><manifest kind="Post"> <apiVersion>soultec.ch/v1</apiVersion> <metadata> <name>powercli-checking-esxi-hosts-advanced-settings-against-vmwares-default</name> <locale>de</locale> <labels> <author>dario-doerflinger</author> <series>scripting</series> <entry key="capability/automation">1.78</entry> <entry key="vendor/vmware">0.88</entry> </labels> <annotations> <source>blog-content/posts/de/powercli-checking-esxi-hosts-advanced-settings-against-vmwares-default.md</source> <route>/de/insights/powercli-checking-esxi-hosts-advanced-settings-against-vmwares-default/</route> <schema>/nerd/schema/posts.json</schema> <markdown>/de/insights/powercli-checking-esxi-hosts-advanced-settings-against-vmwares-default.md</markdown> </annotations> </metadata> <spec> <title>Advanced Settings der ESXi Hosts gegen den VMware-Standard prüfen</title> <date>2017-10-05</date> <author>dario-doerflinger</author> <locale>de</locale> <summary>Über die Jahre und Releases hinweg ändern sich die Best Practices von VMware. Deshalb gehören die gesetzten Advanced Settings bei jedem Release auf den Prüfstand.</summary> <capabilities> <item>automation</item> </capabilities> <vendors> <item>vmware</item> </vendors> <series>scripting</series> <migrated>2026-08-24</migrated> <translationReviewed>false</translationReviewed> <draft>false</draft> </spec> <sections> <section> <body>Über die Jahre und Releases hinweg ändern sich die Best Practices von VMware. Früher mussten wir eine Menge Advanced Settings setzen, damit eine gewünschte Funktion lief oder damit dem VMware Admin das Leben etwas leichter fiel.Die Sache mit diesen Einstellungen: Du solltest sie bei jedem Release prüfen. Braucht es sie noch? Sind sie deprecated? Verhält sich das System immer noch gleich, wenn sie gesetzt sind?Damit diese Prüfung leichter fällt, habe ich ein kleines Script geschrieben. Für Advanced Settings gibt es das Cmdlet «Get-AdvancedSetting». Ich habe aber festgestellt, dass es die Standardwerte nicht liefert, sondern nur Name und aktuellen Wert. Also hole ich die Advanced Settings über eine esxcli-Instanz. ESXCLI liefert genau diese wertvolle Information über die Standardwerte, als String oder Int.Ich lese also alle Advanced Settings eines Hosts ein. Dann filtere ich ein paar Einstellungen heraus, die nicht im Report auftauchen sollen, weil ich weiss, warum ich sie gesetzt habe, und sie behalten will. Danach wird jeder Wert mit seinem Standardwert verglichen. Stimmen sie überein, fliegt auch dieser Eintrag heraus.Am Ende habe ich eine Liste aller Einstellungen über alle Hosts, die nicht auf dem Standardwert stehen. Die kann ich dann in der Dokumentation nachschlagen und entweder auf den Standard zurücksetzen, falls ich sie nicht mehr brauche, oder in meinen Filter aufnehmen, wenn sie so bleiben sollen.Update: Dieses Script liegt inzwischen auf [GitHub](https://github.com/virtualFrog/PowerCLI-Scripts).Hier ist das Script:```powershell&lt;#.EXAMPLE C:\foo&gt; .\Get-AdvancedSettingsNotDefault.ps1 -hostName esx01.virtualfrog.lab -delta:$true Description ----------- Gets All settings that are not at default value from given host.EXAMPLE C:\foo&gt; .\Get-AdvancedSettingsNotDefault.ps1 -delta:$true Description ----------- Gets All settings from all hosts that are not at default value.EXAMPLE C:\foo&gt; .\Get-AdvancedSettingsNotDefault.ps1 -delta:$false Description ----------- Gets All settings from all hosts#&gt; param ( [Parameter(Mandatory=$False)] [string]$hostName="none", [Parameter(Mandatory=$False)] [boolean]$delta=$false)$excludedSettings = "/Migrate/Vmknic|/UserVars/ProductLockerLocation|/UserVars/SuppressShellWarning"$AdvancedSettings = @()$AdvancedSettingsFiltered = @()# Checking if host existsif ($hostName -ne "none") { try { $vmhost = Get-VMHost $hostName -ErrorAction Stop } catch { Write-Host -ForegroundColor Red "There is no host available with name" $hostName exit } # Retrieving advanced settings $esxcli = $vmhost | get-esxcli -V2 $AdvancedSettings = $esxcli.system.settings.advanced.list.Invoke(@{delta = $delta}) |select @{Name="Hostname"; Expression = {$vmhost}},Path,DefaultIntValue,IntValue,DefaultStringValue,StringValue,Description # Displaying results #$AdvancedSettings} else { $vmhosts = get-vmhost foreach ($vmhost in $vmhosts) { $esxcli = $vmhost | get-esxcli -V2 $AdvancedSettings += $esxcli.system.settings.advanced.list.Invoke(@{delta = $delta}) |select @{Name="Hostname"; Expression = {$vmhost}},Path,DefaultIntValue,IntValue,DefaultStringValue,StringValue,Description } #$AdvancedSettings}# Browsing advanced settings and check for mismatchForEach ($advancedSetting in $AdvancedSettings.GetEnumerator()) { if ( ($AdvancedSetting.Path -notmatch $excludedSettings) -And (($AdvancedSetting.IntValue -ne $AdvancedSetting.DefaultIntValue) -Or ($AdvancedSetting.StringValue -notmatch $AdvancedSetting.DefaultStringValue) ) ){ $line = "" | Select Hostname,Path,DefaultIntValue,IntValue,DefaultStringValue,StringValue,Description $line.Hostname = $advancedSetting.Hostname $line.Path = $advancedSetting.Path $line.DefaultIntValue = $advancedSetting.DefaultIntValue $line.IntValue = $advancedSetting.IntValue $line.DefaultStringValue = $advancedSetting.DefaultStringValue $line.StringValue = $advancedSetting.StringValue $line.Description = $advancedSetting.Description $AdvancedSettingsFiltered += $line }}$AdvancedSettingsFiltered``` </body> </section> </sections> <status> <corpus>267</corpus> <alsoLike> <item> <ref>posts/vmware-explore-las-vegas-hackathon-2025</ref> <score>1.00</score> </item> <item> <ref>posts/vmware-hackathon-2024-project</ref> <score>1.00</score> </item> <item> <ref>solutions/vmware/vmware-cloud-foundation/addon/application-services</ref> <score>0.60</score> </item> </alsoLike> </status></manifest>
Scripting · 2017-10-05

Advanced Settings der ESXi Hosts gegen den VMware-Standard prüfen

Über die Jahre und Releases hinweg ändern sich die Best Practices von VMware. Deshalb gehören die gesetzten Advanced Settings bei jedem Release auf den Prüfstand.

2017-10-05Datum
Dario DörflingerAutor
2Min. Lesezeit
Themen Automation 1.78
Hersteller VMware 0.88

Dieser Beitrag ist von 2017. Er bleibt online, weil er nach wie vor nachgefragt wird, beschreibt aber einen Produktstand von damals.

Über die Jahre und Releases hinweg ändern sich die Best Practices von VMware. Früher mussten wir eine Menge Advanced Settings setzen, damit eine gewünschte Funktion lief oder damit dem VMware Admin das Leben etwas leichter fiel.

Die Sache mit diesen Einstellungen: Du solltest sie bei jedem Release prüfen. Braucht es sie noch? Sind sie deprecated? Verhält sich das System immer noch gleich, wenn sie gesetzt sind?

Damit diese Prüfung leichter fällt, habe ich ein kleines Script geschrieben. Für Advanced Settings gibt es das Cmdlet «Get-AdvancedSetting». Ich habe aber festgestellt, dass es die Standardwerte nicht liefert, sondern nur Name und aktuellen Wert. Also hole ich die Advanced Settings über eine esxcli-Instanz. ESXCLI liefert genau diese wertvolle Information über die Standardwerte, als String oder Int.

Ich lese also alle Advanced Settings eines Hosts ein. Dann filtere ich ein paar Einstellungen heraus, die nicht im Report auftauchen sollen, weil ich weiss, warum ich sie gesetzt habe, und sie behalten will. Danach wird jeder Wert mit seinem Standardwert verglichen. Stimmen sie überein, fliegt auch dieser Eintrag heraus.

Am Ende habe ich eine Liste aller Einstellungen über alle Hosts, die nicht auf dem Standardwert stehen. Die kann ich dann in der Dokumentation nachschlagen und entweder auf den Standard zurücksetzen, falls ich sie nicht mehr brauche, oder in meinen Filter aufnehmen, wenn sie so bleiben sollen.

Update: Dieses Script liegt inzwischen auf GitHub.

Hier ist das Script:

<#
.EXAMPLE
    C:\foo> .\Get-AdvancedSettingsNotDefault.ps1 -hostName esx01.virtualfrog.lab -delta:$true

	Description
	-----------
	Gets All settings that are not at default value from given host
.EXAMPLE
    C:\foo> .\Get-AdvancedSettingsNotDefault.ps1 -delta:$true

    Description
    -----------
    Gets All settings from all hosts that are not at default value
.EXAMPLE
    C:\foo> .\Get-AdvancedSettingsNotDefault.ps1 -delta:$false

    Description
    -----------
    Gets All settings from all hosts
#> 

param (
	[Parameter(Mandatory=$False)]
	[string]$hostName="none",
    [Parameter(Mandatory=$False)]
    [boolean]$delta=$false
)

$excludedSettings = "/Migrate/Vmknic|/UserVars/ProductLockerLocation|/UserVars/SuppressShellWarning"
$AdvancedSettings = @()
$AdvancedSettingsFiltered = @()

# Checking if host exists
if ($hostName -ne "none") {
   try {
        $vmhost = Get-VMHost $hostName -ErrorAction Stop
    } catch {
        Write-Host -ForegroundColor Red "There is no host available with name" $hostName
        exit
    } 

    # Retrieving advanced settings
    $esxcli = $vmhost | get-esxcli -V2
    $AdvancedSettings = $esxcli.system.settings.advanced.list.Invoke(@{delta = $delta}) |select @{Name="Hostname"; Expression = {$vmhost}},Path,DefaultIntValue,IntValue,DefaultStringValue,StringValue,Description

    # Displaying results
    #$AdvancedSettings

} else {
    $vmhosts = get-vmhost
    foreach ($vmhost in $vmhosts) {
        $esxcli = $vmhost | get-esxcli -V2
        $AdvancedSettings += $esxcli.system.settings.advanced.list.Invoke(@{delta = $delta}) |select @{Name="Hostname"; Expression = {$vmhost}},Path,DefaultIntValue,IntValue,DefaultStringValue,StringValue,Description
    }
    #$AdvancedSettings
}

# Browsing advanced settings and check for mismatch
ForEach ($advancedSetting in $AdvancedSettings.GetEnumerator()) {
    if ( ($AdvancedSetting.Path -notmatch $excludedSettings) -And (($AdvancedSetting.IntValue -ne $AdvancedSetting.DefaultIntValue) -Or ($AdvancedSetting.StringValue -notmatch $AdvancedSetting.DefaultStringValue) ) ){
        $line = "" | Select Hostname,Path,DefaultIntValue,IntValue,DefaultStringValue,StringValue,Description
        $line.Hostname = $advancedSetting.Hostname
        $line.Path = $advancedSetting.Path
        $line.DefaultIntValue = $advancedSetting.DefaultIntValue
        $line.IntValue = $advancedSetting.IntValue
        $line.DefaultStringValue = $advancedSetting.DefaultStringValue
        $line.StringValue = $advancedSetting.StringValue
        $line.Description = $advancedSetting.Description
        $AdvancedSettingsFiltered += $line
    }
}
$AdvancedSettingsFiltered

Passt ausserdem