Powershell列表到格式化表

时间:2016-02-16 18:31:56

标签: arrays list powershell

我正在导入一个格式如下的CSV:

$lines = Import-Csv "c:\scripts\mysystems.csv"
$max = 0
foreach ($system in $lines)
{
    if ($system.systemname.Length -gt $max)
    {
        $max = $system.systemname.Length
    }
}
$cols = 5    
$temparray = @()
$temprow = @()
$tempname = ""
$i=0
$j=0
foreach ($system in $lines)
{
    $tempname = $system.systemname
    if ($system.systemname.Length -lt $max)
    {
        $x = $max - $system.systemname.Length
        while ($x -gt 0)
        {
            $tempname += " "
            $x--
        }
    }
    if ($i -le $cols-2)
    {
        $temprow += @($tempname)
        $i++
        $j++
        if ($j -eq $lines.Count)
        {
            $temparray += ,@($temprow)                  
        }
    }
    else
    {
        $temprow += @($tempname)
        $temparray += ,@($temprow)
        $temprow = @()    
        $j++
        $i=0
    }            
}
write-output $temparray | % {$_ -join "`t`t"} 

我需要将每个系统名称输出到屏幕。仅此一项很容易,但如果有很多系统,它会将它全部放在一列并占用太多空间。所以我想把所有这些系统名放在一个表中,以便在输出时看起来很漂亮。我想出了以下内容,但有一个更简单的方法。这确实有用,顺便说一下。只是......这么多行。

{{1}}

关于更简单解决方案的想法?

1 个答案:

答案 0 :(得分:0)

您可以使用Format-Wide缩短至:

Import-Csv "c:\scripts\mysystems.csv" |
Format-Wide -Column 5

输出:

Server1                 Server2                 Server3                 Server4                 Server11
Server12                Server13                Server14                Server21                Server22
Server23                Server24

间距将根据控制台宽度而变化。我个人希望Format-Wide支持同时使用-Column 5 -AutoSize来最小化列之间的空间,但-AutoSize仅用于自动检测列数(取决于控制台宽度)atm。我已在UserVoice上添加了一条建议,使其缩小Format-Table -AutoSize之间的间距。