Formating an Object as a neatly looking List

徘徊边缘 提交于 2019-12-25 08:16:14

问题


I'm trying to output the objects as such:

Piping the variable containing the objects thru Format-List produces empty lines which creates problems. I'm not able to remove the empty lines for some reason when using $obj = $obj | ? {$_}

I expect the variable containing the objects to contain the right count of objects.

Interesting enough when I run $Host first (which has the formatting I'm looking for) and then run the variable $obj, then I get the results I'm looking for.

Any help is much appreciated.

Here's the code:

$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

Edit: Here is the output I get even when removing line breaks as suggested:

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

回答1:


You don't remove linebreaks from the filenames you parsed from the string. That's most likely why your list output doesn't wrap the way you want it to.

Change this:

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

to this:

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

and the problem should disappear.



来源:https://stackoverflow.com/questions/40321069/formating-an-object-as-a-neatly-looking-list

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!