powercli

Details of host Advanced settings

まとめ

  • ESXi ホストの詳細設定一覧を CSV で出力
  • ホストの詳細設定の値は 6 種類 {String,Bool,Choice,Long,Int,Float}Option
  • PowerCLI で Locale を設定する場合は SessionManager#SetLocale を利用する
  • 詳細設定はむやみやたらに代えるものではないので、マニュアル、KB、サポートの指示に従い変更すること
  • 詳細設定のさらに詳細な説明は求めないこと ! 詳細設定名から機能の深淵を想像して ゲヘゲヘ しましょう。

はじめに

昨日のエントリでホストの詳細設定の闇に近づいたので、もう少々深掘りするために詳細設定の一覧を作成してみます

PowerCLI でホストの詳細設定一覧を取得

ホストの詳細設定を管理している OptionManager を取得し、プロパティ SupportedOption の内容をリスト化します。

各詳細設定の型が異なるので、Default、Remarks といったバックリとした項目にそれぞれの型のプロパティをマッピングします。Summary については、接続したときの Locale で説明の言語が決まってしまうため SessionManager#SetLocale で変更します。使える言語は vCenter Server が対応している言語に従います。

StringOption

文字列の値となりますが、ValidCharacters という正規表現もどきの規則が値として格納されている場合があります。StringOption では ValidCharacters を Remarks の列に保存します。

BoolOption

真偽値の値となります。まんまです。Supported という真偽値のプロパティがあり、これを Remarks に保存しています。が、詳細設定の変更の影響を案内されていないのであれば変更しないのが吉です。

ChoiceOption

列挙型の値を取ります。この OptionType だけ DefaultValue ではなく DefaultIndex というプロパティ名なので、DefaultIndex を Default 列に格納します。また、各詳細設定毎に列挙型が異なるので Remarks にその値を列挙します。なお ChoiceOption は、主にログレベルの設定に使われています。

{Long,Int,Float}Option

数値の値を取ります。最小値と最大値が定義されているので、これらをまとめて Remarks に保存します。

PowerCLI スクリプトコード

コツは以下の通り

  • Add-PSSnapin は “-ErrorAction SilentlyContinue” を付けると、すでに Add-PSSnapin されている PowerCLI のコンソールでもエラーが出なくてよい
  • PowerCLI の Locale 変更は SessionManager#SetLocale で行う
  • PowerCLI オブジェクトのプロパティ ExtensionData から vSphere Web Services SDK のオブジェクトを触れる
  • 任意のプロパティを追加したい場合は、空文字に作成したいプロパティ名で Select-Object すると便利
  • instanceof 的な演算子は “-is” や “-isnot”

月 1 程度しか PowerCLI に書かないので、禄にイディオムを覚えない…Orz 年のせいかもしれない。

$VcHostname="vcenter_hostname"
$VmHostname="esxi_hostname"
$Username="administrator@vsphere.local"
$Password="VMware1!"
$Locale="ja_JP"
$CsvFile="C:\Temp\VmHostAdvSettings.csv"

Add-PSSnapin -ErrorAction SilentlyContinue VMware.VimAutomation.Core

$VcServer = Connect-VIServer -Server $VcHostname -Username $Username -Password $Password
$SessionManager = Get-View $VcServer.ExtensionData.Content.SessionManager
$SessionManager.SetLocale($Locale)

$VmHost = Get-VmHost -Name $VmHostname
$OptionManager = Get-View $VmHost.ExtensionData.ConfigManager.AdvancedOption
$SupportedOptions = $OptionManager.SupportedOption

$Rows = @()

$SupportedOptions | Foreach-Object {
    $SupportedOption = $_

    $Row = "" | Select-Object "Key", "Type", "Default", "IsReadOnly", "Remarks", "Summary"
    $Row.Key = $SupportedOption.Key
    $Row.Type = $SupportedOption.OptionType.GetType().FullName
    $Row.IsReadOnly = $SupportedOption.OptionType.ValueIsReadonly
    $Row.Summary = $SupportedOption.Summary

    $OptionType = $SupportedOption.OptionType

    If ($OptionType -is [VMware.Vim.StringOption]) {
        $Row.Default = $OptionType.DefaultValue
        $Row.Remarks = $OptionType.ValidCharacters

    } Elseif (($OptionType -is [VMware.Vim.LongOption]) `
            -or ($OptionType -is [VMware.Vim.IntOption]) `
            -or ($OptionType -is [VMware.Vim.FloatOption])) {
        $Row.Default = $OptionType.DefaultValue
        $Row.Remarks = "Min: "+$OptionType.Min+", Max: "+$OptionType.Max

    } Elseif ($OptionType -is [VMware.Vim.BoolOption]) {
        $Row.Default = $OptionType.DefaultValue
        $Row.Remarks = $OptionType.Supported

    } Elseif ($OptionType -is [VMware.Vim.ChoiceOption]) {
        $Row.Default = $OptionType.DefaultIndex
        $Count = 0
        $OptionType.ChoiceInfo | Foreach-Object {
            $ChoiceInfo = $_
            If ($Count -eq 0) {
                $Row.Remarks = "`""+$ChoiceInfo.Key+"`""
            } Else {
                $Row.Remarks += ", `""+$ChoiceInfo.Key+"`""
            }
            $Count += 1
        }

    }

    $Rows += $Row
}

$Rows | Export-Csv -Encoding Default -Path $CsvFile

その他

-or などの論理演算子は改行してはいけない。` で改行をエスケープすること。

チート

できあがりの CSV の内容。Summary は日本語です。

VmHostAdvSettings.7z

一覧としてみることが出来ますが、あくまで参考程度に。こういった詳細設定の詳細説明を求められることもありますが、たまたまソースコード上で可変にできる値が UI 上にあるだけなので、基本的には気にしないのが吉です。基本的にマニュアル、KB、サポートにある詳細設定以外はアンタッチャブルで !!! 家ラボで変更して転んでも泣かない !

他の会社の製品になりますが、とあるミドルウェアの詳細設定を * 千万円もかけてそのベンダーのコンサルに書き上げさせたという逸話を聞いたことがあります。正直誰得?な成果物だと思います…検収するのも大変だし、バージョン アップで追加・変更・削除があるでしょうしね。

関連記事

  1. host client

    ESXi と Host Client のバージョンの組み合わせ

    vSphere 6.5 から遂に vSphere Client (C#…

  2. devbox

    Insight into VMware Photon Controller – devb…

    はじめにこのエントリでは、最新の Photon Controlle…

  3. console

    HTML5 Console Access from Windows PC (Done)

    前のエントリーで実現しきれなかった、Windows PC からの …

  4. vmotion

    vMotion の歴史 (4) – vCenter Server 5.0

    前回のエントリでは vCenter Server 4.0 ~ 4.1 …

  5. sdk

    vSphere Web Client Plugin SDK の dev-setup.sh スクリプト…

    局部的に有用なネタかも知れませぬ。vSphere の We…

  6. Tong-Sai@Naka Island, Thailand

    raid-5/6

    Virtual SAN – RAID-5/6 には Witness がないのは何故か

    前回のエントリでは RAID-5/6 の仕組みや動作について説明しまし…

コメント

  1. この記事へのコメントはありません。

  1. 2018年 9月 14日










  1. console

    Remote Console でマウスが吹っ飛ぶ件の対策
  2. vsphere client

    vSphere Client (C#) 5.5 update 2 へのアップグレ…
  3. vmware

    VMware から提供されるサービス
  4. vmotion

    vMotion の歴史 (5) – vCenter Server 5…
  5. powercli

    PowerCLI – オブジェクトの変換
PAGE TOP
Translate »