PowerShell: Format-таблица без заголовков
в сценарии PowerShell у меня есть некоторые объекты, которые я передаю .
Вывод моего скрипта выглядит так:
Something...
Operation AttributeName AttributeValue
--------- ------------- --------------
Delete Member John Doe
Something else...
поскольку значение полей довольно понятно, я хотел бы удалить заголовки, разделители "- - - " и пустые строки в начале и в конце из вывода Format-Table.
Я не думаю, что командлет поддерживает это (или, по крайней мере, если для этого есть параметр, я не смог его найти).
Как лучше всего оставить только строки с фактическими значениями из вывода Format-Table?
6 ответов
попробовать до Format-Table
:
gci | ft -HideTableHeaders
(Я использую PowerShell v2. Я не знаю, было ли это в v1.)
на -HideTableHeaders
параметр, к сожалению, по-прежнему вызывает печать пустых строк (и заголовки таблиц по-прежнему рассматриваются для ширины столбца). Единственный способ, которым я знаю, что может надежно работать здесь, - это отформатировать вывод самостоятельно:
| % { '{0,10} {1,20} {2,20}' -f $_.Operation,$_.AttributeName,$_.AttributeValue }
попробовать -ExpandProperty
. Например, я использую это для отправки чистой переменной в Out-Gridview -PassThru
, в противном случае переменная имеет сохраненную информацию заголовка.
пример:
Get-Aduser -filter *| select name -expandproperty name
другой подход-использовать ForEach-Object в проект отдельных элементов в строку, а затем использовать Out-String командлет для проецирования конечных результатов в строку или массив строк:
gci Microsoft.PowerShell.Core\Registry::HKEY_CLASSES_ROOT\CID | foreach { "CID Key {0}" -f $_.Name } | Out-String
#Result: One multi-line string equal to:
@"
CID Key HKEY_CLASSES_ROOT\CIDa621c8a-7d4b-4d7b-ad60-a957fd70b0d0
CID Key HKEY_CLASSES_ROOT\CIDec6f5b2-8cdc-461e-9157-ffa84c11ba7d
CID Key HKEY_CLASSES_ROOT\CIDda2ceaf-bc35-46e0-aabd-bd826023359b
CID Key HKEY_CLASSES_ROOT\CID\d13ad82e-d4fb-495f-9b78-01d2946e6426
"@
gci Microsoft.PowerShell.Core\Registry::HKEY_CLASSES_ROOT\CID | foreach { "CID Key {0}" -f $_.Name } | Out-String -Stream
#Result: An array of single line strings equal to:
@(
"CID Key HKEY_CLASSES_ROOT\CIDa621c8a-7d4b-4d7b-ad60-a957fd70b0d0",
"CID Key HKEY_CLASSES_ROOT\CIDec6f5b2-8cdc-461e-9157-ffa84c11ba7d",
"CID Key HKEY_CLASSES_ROOT\CIDda2ceaf-bc35-46e0-aabd-bd826023359b",
"CID Key HKEY_CLASSES_ROOT\CID\d13ad82e-d4fb-495f-9b78-01d2946e6426")
преимущество этого подхода заключается в том, что вы можете сохранить результат в переменную, и у нее не будет пустых строк.
вот как я это решаю. Я просто передаю вывод В Out-String, а затем передаю этот вывод функции .NET Trim:
(gci | ft -HideTableHeaders | Out-String).Trim()
Это вычеркнет разрывы строк до и после таблицы.
вы также можете использовать TrimStart, чтобы просто позаботиться о разрыве строки заголовка, если вы все еще хотите разрывы конечной линии.
(gci | ft -HideTableHeaders | Out-String).TrimStart()
Я знаю, что это на 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()}
}
}
Note1: это решение не будет масштабироваться чтобы понравиться миллионам объектов (он не обрабатывает конвейер последовательно)
Note2: вы все еще можете добавить опцию-noheaddings. Если вам интересно, почему я использовал здесь scriptblock, это позволяет перегружать, как отправлять на диск-файл или другие выходные потоки.