Итак, я пытался отформатировать вывод на консоль , используя цвета, основанные на различных условиях, используя обычные пробелы и табуляции, и быстро обнаружил, что я создавал так много операторов "if" и "elseif" , Это было не красиво. Я также не закончил, потому что в таблице данных так много «столбцов», а свойство length значения каждого столбца в таблице может варьироваться в любом месте от 6 до 20+ символов. Это действительно было ужасно. Вот тогда я начал пытаться использовать объект DataTable. У меня есть что-то вроде этого:
$queueTable = New-Object System.Data.DataTable
$Queue.Columns.Add("Identity",[string]) | Out-Null
#same thing for 5 more columns, just different column names and types
Теперь добавьте данные в таблицу:
$queues = Get-Queue
foreach ($queue in $queues) {
$NewRow = $queueTable.NewRow()
$NewRow.Identity = $queue.Identity
#And so for the next 5 columns
$queueTable.Rows.Add($NewRow)
}
Теперь я пытаюсь вывести объект DataTable на экран, но отформатированный цветом в зависимости от условия. Вот что у меня есть для этого произведения:
foreach ($row in $queueTable) {
if ($row.item("MessageCount") -gt 1) {Write-Host -ForegroundColor Red $row
else {Write-Host $row}
}
Выход для этого кода - просто «System.Data.Row», а не данные внутри строки. Я также попытался использовать Write-Output
, и это на самом деле выводит данные, но не красиво, и это также не позволяет форматирование с цветом.
Когда я запускаю $queueTabel | Format-Table
, он выдает выходные данные в формате таблицы, как я ищу, но не позволяет мне выполнять условное форматирование.
Помните, я пытаюсь записать это на консоль, поэтому Out-GridView, DataGrid или DataGridView не будут работать.