Я знаю, что прошло 2 года, но эти ответы помогли мне сформулировать функцию фильтра для вывода объектов и обрезки результирующих строк. Поскольку я должен отформатировать все в строку в своем окончательном решении, я пошел по-другому.
Длинная рука, моя проблема очень похожа, и выглядит примерно так
$verbosepreference="Continue"
write-verbose (ls | ft | out-string) # this generated too many blank lines
Вот мой пример:
ls | Out-Verbose # out-verbose formats the (pipelined) object(s) and then trims blanks
Моя функция Out-Verbose выглядит следующим образом:
filter Out-Verbose{
Param([parameter(valuefrompipeline=$true)][PSObject[]]$InputObject,
[scriptblock]$script={write-verbose "$_"})
Begin {
$val=@()
}
Process {
$val += $inputobject
}
End {
$val | ft -autosize -wrap|out-string |%{$_.split("`r`n")} |?{$_.length} |%{$script.Invoke()}
}
}
Примечание 1: Это решение не будет масштабироваться до миллионов объектов (оно не обрабатывает конвейер последовательно)
Примечание 2: Вы все еще можете добавить опцию -noheaddings.
Если вам интересно, почему я использовал здесь скрипт-блок, это позволяет перегрузке, например, отправлять на диск-файл или в другие потоки вывода.