オブジェクトのView定義(2)

オブジェクトのView定義(1) - PowerShell Memoの続きです。
早速、「DotNetTypes.Format.mshxml」のView定義を見てみましょう。

.NETオブジェクトのView定義

.NETオブジェクトのView定義は「DotNetTypes.Format.mshxml」に定義されています。
場所は、

$MSHHOME\DotNetTypes.Format.mshxml

です。

「System.Diagnostics.Process」のView定義

「DotNetTypes.Format.mshxml」中に以下のような記述があるはずです。

<View>
    <Name>process</Name>
    <ViewSelectedBy>
        <TypeName>System.Diagnostics.Process</TypeName>
        <TypeName>Deserialized.System.Diagnostics.Process</TypeName>
    </ViewSelectedBy>
    <TableControl>
        <TableHeaders>
            <TableColumnHeader>
                <Label>Handles</Label>
                <Width>7</Width>
                <Alignment>right</Alignment>
            </TableColumnHeader>
            <TableColumnHeader>
                <Label>NPM(K)</Label>
                <Width>7</Width>
                <Alignment>right</Alignment>
            </TableColumnHeader>
            <TableColumnHeader>
                <Label>PM(K)</Label>
                <Width>8</Width>
                <Alignment>right</Alignment>
            </TableColumnHeader>
            <TableColumnHeader>
                <Label>WS(K)</Label>
                <Width>10</Width>
                <Alignment>right</Alignment>
            </TableColumnHeader>
            <TableColumnHeader>
                <Label>VS(M)</Label>
                <Width>5</Width>
                <Alignment>right</Alignment>
            </TableColumnHeader>
            <TableColumnHeader>
                <Label>CPU(s)</Label>
                <Width>8</Width>
                <Alignment>right</Alignment>
            </TableColumnHeader>
            <TableColumnHeader>
                <Width>6</Width>
                <Alignment>right</Alignment>
            </TableColumnHeader>
            <TableColumnHeader />
        </TableHeaders>
        <TableRowEntries>
            <TableRowEntry>
                <TableColumnItems>
                    <TableColumnItem>
                        <PropertyName>HandleCount</PropertyName>
                    </TableColumnItem>
                    <TableColumnItem>
                        <ScriptBlock>[int]($_.NPM / 1024)</ScriptBlock>
                    </TableColumnItem>
                    <TableColumnItem>
                        <ScriptBlock>[int]($_.PM / 1024)</ScriptBlock>
                    </TableColumnItem>
                    <TableColumnItem>
                        <ScriptBlock>[int]($_.WS / 1024)</ScriptBlock>
                    </TableColumnItem>
                    <TableColumnItem>
                        <ScriptBlock>[int]($_.VS / 1048576)</ScriptBlock>
                    </TableColumnItem>
                    <TableColumnItem>
                        <ScriptBlock>
if ($_.CPU -ne $()) 
{ 
$_.CPU.ToString("N")
}
                        </ScriptBlock>
                    </TableColumnItem>
                    <TableColumnItem>
                        <PropertyName>Id</PropertyName>
                    </TableColumnItem>
                    <TableColumnItem>
                        <PropertyName>ProcessName</PropertyName>
                    </TableColumnItem>
                </TableColumnItems>
            </TableRowEntry>
        </TableRowEntries>
    </TableControl>
</View>

長いですね。(^^;

Viewの解説

TableControlタグでコンソール出力時の詳細なViewを定義します。
「TableHeadersタグ」がヘッダ部のView、「TableRowEntriesタグ」がプロパティ値のViewに対応します。

TableHeadersタグ
  • TableHeaders
    • TableColumnHeader
      • Label:表示名
      • Width:表示幅
      • Alignment:アライメント(right/left)

この部分↓

Handles  NPM(K)    PM(K)      WS(K) VS(M)   CPU(s)     Id ProcessName
TableRowEntriesタグ
  • TableRowEntry
    • TableColumnItems
      • TableColumnItem
        • PropertyName/ScriptBlock

プロパティは以下の2つのパターンのどちらかを記述します。

  1. PropertyNameタグで記述したプロパティの値を表示する
  2. ScriptBlockタグで指定したScriptBlockの実行結果値を表示する

この部分↓

    274      16    14460      22196   153     6.27   2396 B2
    128       4     2352       9456    34     0.34    636 BsCLiP
     83       6     2080       2952    71     0.58   1508 clnch

参考

Extending Object Types and Formatting


次回は、オリジナルのカスタムViewを定義します。