Powershell:右对齐格式 - 表格格式的Select-Object中的列值

时间:2010-04-28 17:42:48

标签: powershell

我有几个列的数组值$ outData。我不确定如何对齐某些列?

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

工作正常。但是,当我尝试将freespace列的align用于右侧时:

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

我收到错误消息“不支持指定的方法”。不确定是否有任何方法可以将值对齐?

3 个答案:

答案 0 :(得分:6)

align指令位于为Format-Table cmdlet指定的散列表中。 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 :(得分:1)

鉴于Powershell在过去8年中的更新,这个答案在'10中可能不存在。

诀窍是在计算表达式的格式块{0:N0}中分配多个列,一旦分配,它将使列与右侧对齐。

在原始示例中,包含 ,15 作为数字格式的一部分:

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

我通常使用Name =值的字符数来确保整个名称可见。

答案 2 :(得分:0)

这是一个看起来很丑陋的内胆,它是由其他几个线程构成的:

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"}