问题
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