将对象格式化为整齐的列表

时间:2016-10-29 16:13:52

标签: list powershell object format output

我试图输出这样的对象:

Preferred output

管道包含Format-List对象的变量会产生空行,从而产生问题。我在使用$obj = $obj | ? {$_}

时因某些原因无法移除空行

我希望包含对象的变量包含正确的对象数。

当我首先运行$Host(具有我正在寻找的格式)然后运行变量$obj时,我感到非常有趣,然后我得到了我正在寻找的结果。

非常感谢任何帮助。

以下是代码:

$String = @"


   FileName: O:\iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii
iiiiiiiiiiiiiii.txt

:`$DATA                                      9
SummaryInformation                       128
{4c8cc155-6c1e-11d1-8e41-00c04fb9386d}      0




   FileName: O:\ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss
sssssssssssssss.txt

:`$DATA                                      9
SummaryInformation                       128
{4c8cc155-6c1e-11d1-8e41-00c04fb9386d}      0




   FileName: 
O:\aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.txt

:`$DATA      0
Lzip        7



"@

[regex]$pattern1 = '(?s)\s+FileName:\s+(?<FullName>.*?)\s+:\$DATA'
$Match1 = $String | Select-String -Pattern $pattern1 -AllMatches |
          % { $_.Matches }  

[regex]$pattern2 = '(?sm)(?:(?<Stream>^:\$DATA.*?)\s+FileName|(?<Stream>^:.*))'
$Match2 = $String | Select-String -Pattern $pattern2 -AllMatches |
          % { $_.Matches }

$obj = 0..($Match1.Count -1) | % {    
    New-Object -TypeName PsObject -Property @{
        FullName = $Match1[$_].Groups['FullName'].Value
        Streams  = $Match2[$_].Groups['Stream'].Value
    }
}

$obj

编辑:这是我按照建议删除换行符时得到的输出:

FullName
--------
O:\iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii...
O:\ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss...
O:\aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.txt

1 个答案:

答案 0 :(得分:0)

您不会从您从字符串中解析的文件名中删除换行符。这很可能是因为你的列表输出没有按照你想要的方式进行包装。

改变这个:

$obj = 0..($Match1.Count -1) | % {    
    New-Object -TypeName PsObject -Property @{
        FullName = $Match1[$_].Groups['FullName'].Value
        Streams  = $Match2[$_].Groups['Stream'].Value
    }
}

到此:

$obj = 0..($Match1.Count -1) | % {    
    New-Object -TypeName PsObject -Property @{
        FullName = $Match1[$_].Groups['FullName'].Value -replace '[\r\n]+'
        Streams  = $Match2[$_].Groups['Stream'].Value
    }
}

问题应该消失。