如何将Format-Table
Cmdlet的输出缩进到特定列?
我有:
> $SomeValues | Format-Table -HideTableHeaders
A 1
B 2
C 3
但我想:
A 1
B 2
C 3
谢谢大家的回答。他们帮助我弄清楚如何使用计算属性做我想做的事情。由于表中列之间的自动单字符空间,Expression
必须比缩进量少一个。
如果您使用的是-AutoSize
标志:
Write-Host "Not indented"
Write-Host " Indented"
$a = @{ Aa = 1; Bbb = 2; Cccc = 300}
$a | Format-Table -Property @{Expression=" "},Name,Value -AutoSize -HideTableHeaders
如果您没有使用-AutoSize
标志:
Write-Host "Not indented"
Write-Host " Indented"
$a = @{ Aa = 1; Bbb = 2; Cccc = 300}
$a | Format-Table -Property @{Expression={}; Width=3},Name,Value -HideTableHeaders
输出如下:
Not indented
Indented
Bbb 2
Aa 1
Cccc 300
PS> $a= @{A=1;B=2;C=3}
PS> $a.GetEnumerator()|%{ "{0,10}{1,5}" -f $_.key,$_.value}
A 1
B 2
C 3
PS>
?
$SomeValues | Format-Table -HideTableHeaders -Auto
怎么样?
实际上,您可以使用ft和-autosize
$a= @{A=1;B=2;C=3}
$a.getenumerator() | ft blah,name,value -hidetableheaders -auto
A 1
B 2
C 3
这应该做到这一点
function Indent-ConsoleOutput($output, $indent=4){
if(!($output -eq $null)){
if(!( $indent -is [string])){
$indent = ''.PadRight($indent)
}
$width = (Get-Host).UI.RawUI.BufferSize.Width - $indent.length
($output| out-string).trim().replace( "`r", "").split("`n").trimend()| %{
for($i=0; $i -le $_.length; $i+=$width){
if(($i+$width) -le $_.length){
"$indent"+$_.substring($i, $width)
}else{
"$indent"+$_.substring($i, $_.length - $i)
}
}
}
}
}
'## Get-Process'
Indent-ConsoleOutput ((get-process)[0..5]|format-table) 4
''
'## Log Stye Output'
Indent-ConsoleOutput ((get-process)[0..5]|format-table) " $(Get-Date) "
对于通用解决方案
function Indent-ConsoleOutput($output, $indent=4){
if(!($output -eq $null)){
if(!( $indent -is [string])){
$indent = ''.PadRight($indent)
}
$width = (Get-Host).UI.RawUI.BufferSize.Width - $indent.length
($output| out-string).trim().replace( "`r", "").split("`n").trimend()| %{
for($i=0; $i -le $_.length; $i+=$width){
if(($i+$width) -le $_.length){
"$indent"+$_.substring($i, $width)
}else{
"$indent"+$_.substring($i, $_.length - $i)
}
}
}
}
}
'## Get-Process'
Indent-ConsoleOutput ((get-process)[0..5]|format-table) 4
''
'## Log Stye Output'
Indent-ConsoleOutput ((get-process)[0..5]|format-table) " $(Get-Date) "