Powershell: выравнивание вправо для значения столбца из Select-Object в формате Format-Table - PullRequest
6 голосов
/ 28 апреля 2010

У меня есть следующий массив значений $ outData с несколькими столбцами. Я не уверен, как правильно выровнять некоторые столбцы?

$outData | Select-Object `
      Name `
      @{Name="Freespace(byte)"; Expression={"{0:N0}" -f $_.FreeSpace}}, '
      .... # other colums `
 | Format-Table -AutoSize

Работает нормально. Однако, когда я попытался использовать выравнивание для столбца свободного пространства справа:

      @{Name="Freespace(byte)"; Expression={"{0:N0}" -f $_.FreeSpace}; align="right"}, '

Я получил сообщение об ошибке «Указанный метод не поддерживается». Не уверен, есть ли способ выровнять значение вправо?

Ответы [ 3 ]

6 голосов
/ 28 апреля 2010

Директива выравнивания помещается в хеш-таблицу, указанную в командлете Format-Table. IOW, align не поддерживается запись хеш-таблицы для Select-Object. Поэтому убедитесь, что вы выполняете форматирование с помощью хеш-таблиц в хеш-таблице, передаваемой в Format-Table, например:

gps | select name,pm | format-table @{n='Name';e={$_.Name};align='right'},PM

или в вашем случае:

$outData | Format-Table Name,
                  @{n="Freespace(byte)";e={"{0:N0}" -f $_.FreeSpace};a="right"}
1 голос
/ 25 марта 2018

Учитывая обновления к Powershell за последние 8 лет, этот ответ мог отсутствовать в 10 году.

Хитрость заключается в том, чтобы назначить количество столбцов в блоке формата вычисленного выражения {0:N0}, после назначения он выровняет столбец вправо.

В исходном примере включить ,15 как часть форматирования числа:

@{Name="Freespace(byte)"; Expression={"{0,15:N0}" -f $_.FreeSpace}}

Обычно я использую количество символов значения Name =, чтобы убедиться, что все имя видно.

0 голосов
/ 16 ноября 2018

вот один уродливый лайнер, который строится из нескольких других потоков:

Get-WmiObject win32_LogicalDisk | where { $_.DriveType -eq 3 } | Format-Table DeviceID,VolumeName,@{N="Size";E={'{0:N0}' -f $_.Size};a="right"},@{N="FreeSpace";E={'{0:N0}' -f $_.FreeSpace};a="right"},@{N="Used";E={'{0:N0}' -f ($_.Size - $_.FreeSpace)};a="right"}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...