しばたテックブログ

PowerShellを中心に気分で書いている技術ブログです。

PowerShell既定のフォーマット設定に介入する方法について (補足)

前回のエントリに対する補足を軽く書いておきます。

blog.shibata.tech

format.ps1xmlのDefaultSettingsタグ

PowerShell既定のフォーマット設定に介入するには、適当なforamt.ps1xmlファイルを作ってPropertyCountForTableタグに更新したい値を設定すればよいと説明しました。

設定例)

<?xml version="1.0" encoding="utf-8" ?>
<Configuration>
    <DefaultSettings>
        <PropertyCountForTable>2</PropertyCountForTable>
    </DefaultSettings>
</Configuration>

このタグの親であるDefaultSettingsですが、これはPowrerShellのフォーマット設定の既定値に関するタグとなりPropertyCountForTable以外にも複数のタグがあることが確認できました。

ただし、どのタグも通常は一切使われていないため何のためのものか・設定するとどういった効果があるかは正直謎です...

謎なのですが、せっかくなので見つけたタグについてわかる範囲で補足しておきます。

ShowErrorタグ および DisplayErrorタグ

どちらのタグもBool型の値を取り、既定値はFalseでした。

ShowErrorタグの説明*1には、

if true, display error messages

DisplayErrorタグの説明には

if true, display an error string in the formatted display (e.g. cell in a table)

と記載されておりフォーマットの内部処理でエラーが発生した際にエラー情報を出すか否かを制御するのに使われる様です。
恐らくデバッグ用の項目でしょう。

EnumerableExpansions -> EnumerableExpansion -> Expandタグ

階層が深いのですがExpandタグ以外のタグは無い様です。
このタグはMicrosoft.PowerShell.Commands.Internal.Format.EnumerableExpansion列挙型となり以下の様に定義されています。

internal enum EnumerableExpansion
{
    /// <summary>
    /// process core only, ignore IEumerable
    /// </summary>
    CoreOnly,

    /// <summary>
    /// process IEnumerable, ignore core
    /// </summary>
    EnumOnly,

    /// <summary>
    /// process both core and IEnumerable, core first
    /// </summary>
    Both,
}

既定値はEnumOnlyです。
名前からして配列などのオブジェクトの展開方法に関わっている様ですが、具体的に何をしているのかさっぱりわかりませんでした...

今後わかることがあれば追記します。

設定例

最後にこれらのタグの設定例を記載しておきます。

<?xml version="1.0" encoding="utf-8" ?>
<Configuration>
    <DefaultSettings>
        <ShowError>False</ShowError>
        <DisplayError>False</DisplayError>
        <EnumerableExpansions>
            <EnumerableExpansion>
                <Expand>EnumOnly</Expand>
            </EnumerableExpansion>
        </EnumerableExpansions>
    </DefaultSettings>
</Configuration>

*1:正確には対となるオブジェクトのプロパティのコメント