Custom View

А знаете ли вы что можно создавать свои настройки отображения (View) для форматирующих командлетов?

customformat

Например создадим свой View для отображения содержимого каталога который будет показывать не просто имя файла, а с полным путем. Ну и переименуем столбец Length в Size попутно отформатировав размер в более читабельный формат. Кроме того я убрал ставшую ненужной группировку по родительской папке при отображении файлов из нескольких каталогов.

Делается всё это с помощью xml файла с расширением .ps1xml:

FileSystemCustom.Format.Ps1Xml
<?xml version="1.0" encoding="utf-8" ?> <Configuration> <ViewDefinitions> <View> <Name>Custom</Name> <ViewSelectedBy> <SelectionSetName>FileSystemTypes</SelectionSetName> </ViewSelectedBy> <TableControl> <TableHeaders> <TableColumnHeader/> <TableColumnHeader> <Label>Mode</Label> <Width>5</Width> <Alignment>left</Alignment> </TableColumnHeader> <TableColumnHeader> <Label>Size</Label> <Width>15</Width> <Alignment>left</Alignment> </TableColumnHeader> </TableHeaders> <TableRowEntries> <TableRowEntry> <Wrap/> <TableColumnItems> <TableColumnItem> <PropertyName>FullName</PropertyName> </TableColumnItem> <TableColumnItem> <PropertyName>Mode</PropertyName> </TableColumnItem> <TableColumnItem> <ScriptBlock> if ($_.PSIsContainer) { "DIR" } else { [double]$bytes=$_.Length switch($bytes){ {$bytes -le 1kb} {"{0} B" -f $bytes; break} {$bytes -le 1mb} {"{0:n2} KB" -f ($bytes/1kb); break} {$bytes -le 1gb} {"{0:n2} MB" -f ($bytes/1mb); break} default {"{0:n2} GB" -f ($bytes/1gb); break} } } </ScriptBlock> </TableColumnItem> </TableColumnItems> </TableRowEntry> </TableRowEntries> </TableControl> </View> </ViewDefinitions> </Configuration>

Сначала в теге name задается имя вида. ViewSelectedBy указывает для каких типов объектов применим вид. В TableHeaders задаются параметры столбцов, например название, ширина, и выравнивание. В TableRowEntries определяется уже само содержимое столбцов. Это может быть как и просто свойство объекта (PropertyName), так и целый скрипт (ScriptBlock) результат выполнения которого и помещается в столбец. Обрабатываемый объект для этого скрипта представляется как $_

Файл .Ps1Xml необходимо подгрузить в оболочку с помощью команды Update-FormatData, и делать это лучше из профиля чтобы вид подгружался автоматически:

Update-FormatData .\FileSystemCustom.Format.Ps1Xml

Для использования вида надо просто добавить к Format-Table параметр -View <название вида>, например:

dir -Recurse | Format-Table -View Custom

Или:

ls|ft -vi custom

Другие примеры оформления можно посмотреть как в папке установки PowerShell (по умолчанию c:\windows\system32\WindowsPowerShell\v1.0\ ). Именно этими файлами руководствуется PowerShell при отображении известных ему объектов. Еще можно здесь почитать например: http://blogs.msdn.com/powershell/archive/2006/04/29/586775.aspx

А еще можно например сделать вид с отображением столбца с чексуммой MD5🙂 (хотя это будет не шустро для больших файлов)

Опубликовано в Learn, PowerShell. Комментарии к записи Custom View отключены
%d такие блоггеры, как: