2016-10-29 5 views
0

Я пытаюсь вывести объекты, как например:Форматирование объекта как аккуратно смотрит список

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 

Edit: Вот результат я получаю даже при удалении разрывов строк, как предложено:

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

Попробуйте метод Trim, чтобы удалить лишние пробелы. – user4317867

+0

Спасибо, я думаю, что имею дело с объектами, а не с строкой. Можете ли вы привести пример? – Mack

+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 
    } 
}

и проблема должна исчезнуть.

+0

Спасибо. Проверьте мое сообщение выше для обновления. – Mack

Смежные вопросы