オブジェクトの書式設定
通常、Get-ChildItemコマンドレットを実行すると次のように表示される。
Mode LastWriteTime Length Name ---- ------------- ------ ---- d---- 2005/12/25 15:06 Documents and Settings d---- 2005/07/29 10:21 Drivers d---- 2005/12/03 13:15 Inetpub d-r-- 2007/05/11 21:13 Program Files d---- 2006/12/30 18:38 temp d---- 2005/12/03 22:22 user d---- 2007/05/10 19:40 WINDOWS -a--- 2005/07/20 11:37 0 AUTOEXEC.BAT -a--- 2005/07/20 11:37 0 CONFIG.SYS
この表示がなんとなく気に入らなかったので、変えてみることにした。
PowerShellはコンソールに出力するオブジェクトの型毎に、それぞれ表示する属性(プロパティ)を設定ファイルで定義して標準の設定を置き換える事ができる。
手順としては、
- ps1xmlという拡張子のXML形式の書式設定ファイルを作成する。
- Update-FormatDataコマンドレットで書式設定ファイルを追加する。
書式設定ファイルの作成
filesystem.format.ps1xmlというファイル名で以下のファイルを作成する。
<?xml version="1.0" encoding="utf-8" ?> <Configuration> <SelectionSets> <SelectionSet> <Name>FileSystemTypes</Name> <Types> <TypeName>System.IO.DirectoryInfo</TypeName> <TypeName>System.IO.FileInfo</TypeName> <TypeName>Deserialized.System.IO.DirectoryInfo</TypeName> <TypeName>Deserialized.System.IO.FileInfo</TypeName> </Types> </SelectionSet> </SelectionSets> <ViewDefinitions> <View> <Name>customFileSystem</Name> <ViewSelectedBy> <SelectionSetName>FileSystemTypes</SelectionSetName> </ViewSelectedBy> <TableControl> <TableHeaders> <TableColumnHeader> <Label>ファイル名</Label> <Width>25</Width> <Alignment>Left</Alignment> </TableColumnHeader> <TableColumnHeader> <Label>サイズ</Label> <Width>15</Width> <Alignment>Right</Alignment> </TableColumnHeader> <TableColumnHeader> <Label>作成日時</Label> <Width>25</Width> <Alignment>Right</Alignment> </TableColumnHeader> <TableColumnHeader> <Label>更新日時</Label> <Width>25</Width> <Alignment>Right</Alignment> </TableColumnHeader> </TableHeaders> <TableRowEntries> <TableRowEntry> <TableColumnItems> <TableColumnItem> <PropertyName>Name</PropertyName> </TableColumnItem> <TableColumnItem> <PropertyName>Length</PropertyName> </TableColumnItem> <TableColumnItem> <ScriptBlock> $_.CreationTime.ToString("yyyy年MM月dd日 hh時mm分") </ScriptBlock> </TableColumnItem> <TableColumnItem> <ScriptBlock> $_.LastWriteTime.ToString("yyyy年MM月dd日 hh時mm分") </ScriptBlock> </TableColumnItem> </TableColumnItems> </TableRowEntry> </TableRowEntries> </TableControl> </View> </ViewDefinitions> </Configuration>
ViewDefinitions
- View要素でオブジェクトの書式を定義する。Name要素にビュー名を設定する。
- ViewSelectedBy要素でこの書式を適用するオブジェクトの型を指定する。
- ここでは複数の型に適用する必要があるので、SelectionSets要素で事前に設定しておく。(FileInfoとDirectoryInfo)
TableControl
- TableHeaders要素のTableColumnHeader要素で表示する列を定義する。
- Name要素で列名、Width要素で横幅、Alignment要素で配置を定義する。
- TableRowEntries要素のTableRowEntry要素で行を定義する。
- TableColumnItems要素のTableColumnItem要素で列に表示するオブジェクトのプロパティを定義する。
- PropertyName要素でプロパティ名を定義する。
- PropertyName要素の代わりにScriptBlock要素でスクリプトを記述することもできる。
- TableColumnItems要素のTableColumnItem要素で列に表示するオブジェクトのプロパティを定義する。
書式設定ファイルの追加
以下のコマンドを実行する。
Update-FormatData -PrependPath filesystem.format.ps1xml
出力結果
ファイル名 サイズ 作成日時 更新日時 ---------- ------ -------- -------- Documents and Settings 2005年07月20日 11時27分 2005年12月25日 03時06分 Drivers 2005年07月20日 08時27分 2005年07月29日 10時21分 Inetpub 2005年12月03日 01時13分 2005年12月03日 01時15分 Program Files 2005年07月20日 11時29分 2007年05月11日 09時13分 temp 2006年10月21日 08時52分 2006年12月30日 06時38分 user 2005年12月03日 10時22分 2005年12月03日 10時22分 WINDOWS 2005年07月20日 08時20分 2007年05月11日 10時07分 AUTOEXEC.BAT 0 2005年07月20日 11時37分 2005年07月20日 11時37分 CONFIG.SYS 0 2005年07月20日 11時37分 2005年07月20日 11時37分
こんな感じで出力を自由にいじることができる。
後はこのコマンドをprofileスクリプトに記述しておけば、PowerShell起動時に毎回この書式設定ファイルが読み込まれる。