PowerShell脚本中的缩进格式表输出

问题描述 投票:0回答:6

如何将Format-Table Cmdlet的输出缩进到特定列?

我有:

> $SomeValues | Format-Table -HideTableHeaders
A    1                
B    2
C    3

但我想:

    A    1                
    B    2
    C    3
powershell indentation
6个回答
4
投票

谢谢大家的回答。他们帮助我弄清楚如何使用计算属性做我想做的事情。由于表中列之间的自动单字符空间,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

1
投票
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>

?


0
投票

$SomeValues | Format-Table -HideTableHeaders -Auto怎么样?


0
投票

实际上,您可以使用ft和-autosize

 $a= @{A=1;B=2;C=3}
 $a.getenumerator() | ft blah,name,value -hidetableheaders -auto

      A        1
      B        2
      C        3

0
投票

这应该做到这一点

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

0
投票

对于通用解决方案

 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) "
© www.soinside.com 2019 - 2024. All rights reserved.