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. netapp

    Setting up VMware Virtual Volumes with NetApp VASA…

    はじめにvSphere 6 で追加されたストレージの新機能の一つに…

  2. Tong-Sai@Naka Island, Thailand

    intellij

    Photon Controller のコードを Intellij IDEA で開く

    昨日 Photon Controller が公開されましたが、Java…

  3. dns

    PowerShell で DNS 操作

    現在、俺々 Lab に vCloud Director (vCD)…

  4. vcenter

    vMotion の歴史 (1) – 概要

    vmworld 2015 US の中でも感慨深いセッションがあったので…

  5. powercli

    Onyx for the Web Client

    Flings と OnyxVMware R&D で開発され…

コメント

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

  1. 2018年 9月 14日










  1. network

    Memorandum: List of virtual appliances
  2. vco

    [Fixed] Unable to serialize object of cl…
  3. powercli

    VMware PowerCLI 6.5.1 のインストール
  4. powercli

    PowerShell スクリプト コマンドレットのパラメータに補完機能を
  5. storage

    ESXi における 512e ディスク フォーマットの認識方法
PAGE TOP
Translate »