Я могу использовать следующие команды для получения желаемого результата без каких-либо пустых строк.
PS C:\> Get-ChildItem $Home | Out-String | ForEach-Object {($_.tostring()).split([Environment]::Newline)} | Where-Object {$_}
Directory: C:\Users\user
Mode LastWriteTime Length Name
---- ------------- ------ ----
d-r-- 03/04/2019 15:50 Contacts
d-r-- 19/03/2020 10:48 Desktop
d-r-- 19/03/2020 10:48 Documents
d-r-- 03/04/2019 15:50 Downloads
d-r-- 03/04/2019 15:50 Favorites
d-r-- 03/04/2019 15:50 Links
d-r-- 03/04/2019 15:50 Music
d-r-- 03/04/2019 15:50 Pictures
d-r-- 03/04/2019 15:50 Saved Games
d-r-- 03/04/2019 15:50 Searches
d-r-- 03/04/2019 15:50 Videos
PS C:\>
Однако, если я создаю фильтр для выполнения той же работы, он не работает.
PS C:\> filter Strip-Blanks ()
>> {
>> $input | Out-String | ForEach-Object {($_.tostring()).split([Environment]::Newline)} | Where-Object {$_}
>> }
>>
PS C:\> Get-ChildItem $Home | Strip-Blanks
Directory: C:\Users\user
Mode LastWriteTime Length Name
---- ------------- ------ ----
d-r-- 03/04/2019 15:50 Contacts
Directory: C:\Users\user
Mode LastWriteTime Length Name
---- ------------- ------ ----
d-r-- 19/03/2020 10:48 Desktop
Directory: C:\Users\user
Mode LastWriteTime Length Name
---- ------------- ------ ----
d-r-- 19/03/2020 10:48 Documents
Directory: C:\Users\user
Mode LastWriteTime Length Name
---- ------------- ------ ----
d-r-- 03/04/2019 15:50 Downloads
Directory: C:\Users\user
Mode LastWriteTime Length Name
---- ------------- ------ ----
d-r-- 03/04/2019 15:50 Favorites
Directory: C:\Users\user
Mode LastWriteTime Length Name
---- ------------- ------ ----
d-r-- 03/04/2019 15:50 Links
Directory: C:\Users\user
Mode LastWriteTime Length Name
---- ------------- ------ ----
d-r-- 03/04/2019 15:50 Music
Directory: C:\Users\user
Mode LastWriteTime Length Name
---- ------------- ------ ----
d-r-- 03/04/2019 15:50 Pictures
Directory: C:\Users\user
Mode LastWriteTime Length Name
---- ------------- ------ ----
d-r-- 03/04/2019 15:50 Saved Games
Directory: C:\Users\user
Mode LastWriteTime Length Name
---- ------------- ------ ----
d-r-- 03/04/2019 15:50 Searches
Directory: C:\Users\user
Mode LastWriteTime Length Name
---- ------------- ------ ----
d-r-- 03/04/2019 15:50 Videos
PS C:\>
Очевидно, что при передаче результатов из Get-ChildItem
в мой фильтр каждый объект (файл / папка) передается отдельно и в итоге отображается с собственным заголовком. Вопрос в том, почему этого не происходит при передаче по выводу через Out-String
в первом примере, и могу ли я заставить свой фильтр работать так же?
Спасибо.