Ответ 1
Подводя итог и дополняя полезные комментарии, сделанные PetSerAl и Ansgar Wiechers:
ТЛ; др
Get-CimInstance -ClassName win32_operatingsystem -ComputerName $pclist |
Sort-Object CSName |
Format-Table CSName, LastBootUpTime -AutoSize
-AutoSize
гарантирует, что CSName
(имя компьютера) будет настолько широким, насколько это необходимо для отображения всех значений в полном объеме.
Get-CimInstance
принимает массив имен компьютеров, поэтому цикл не нужен; однако, поскольку целевые компьютеры запрашиваются параллельно, порядок возвращаемых объектов обычно не будет соответствовать порядку ввода имен компьютеров - это исправляется с Sort-Object CSName
вызова Sort-Object CSName
.
Читайте дальше, чтобы узнать больше о форматировании таблицы.
По сути, ваш вопрос заключается в том, как управлять шириной выходного столбца табличного вывода, которая применяется к любому выводу командлета.
Используйте командлет Format-Table
(напрямую) для табличного вывода, а не Select-Object
: целью Select-Object
является создание пользовательских объектов, а не форматирование вывода; если такие объекты (как правило, экземпляры любого типа без предопределенных представлений форматирования) имеют 4 или менее свойств, они по умолчанию отформатированы с помощью Format-Table
за кулисами (но вы не можете применять параметры); в противном случае это неявно используемый Format-List
. Спасибо, PetSerAl.
-
Format-Table
неизменно ограничивает выходные строки доступной шириной экрана, что означает:- Столбцы могут вообще не печататься.
- В последнем столбце, который печатается, его значение может быть усечено, а отсутствующая часть обозначена
...
(хотя обратите внимание, что все напечатанные столбцы могут иметь усеченные значения).
-
Если вы хотите создать более длинные строки,
Format-Table
выводFormat-Table
в| Out-File -Width <int>
| Out-File -Width <int>
или| Out-String -Stream -Width <int>
| Out-String -Stream -Width <int>
; обратите внимание, что если вы напечатаете последний на экране, строки будут перенесены (но дополнительные разрывы строк не будут частью данных).-
Предупреждение: в Windows PowerShell НЕ используйте
-Width ([int]::MaxValue)
, поскольку данные в формате таблицы для типов с данными форматирования безоговорочно дополняются пробелами до полной ширины, что может занимать чрезмерное количество памяти/пробел в выходном файле, и вы можете даже не хватает памяти. В PowerShell Core это было исправлено, по крайней мере, начиная с версии 6.1. -
Альтернатива в Windows (не работает в PowerShell Core на Unix-подобных платформах) - использовать
[console]::BufferWidth = <column-count>
чтобы расширить экранный буфер, чтобы разрешить более длинные строки, которые не переносятся, но требуют горизонтального переноса прокрутки.
Кроме того, на Windows это работает только в обычной консоли, а не в ISE.
-
-
Для управления шириной столбцов, которая косвенно определяет, сколько столбцов поместится, используйте следующие параметры:
-
-AutoSize
... указываетFormat-Table
сделать столбцы настолько широкими, насколько это необходимо, чтобы соответствовать всем значениям данных, но учтите, что это может привести к тому, что будет отображаться меньше (реже: больше) столбцов. -
-Wrap
... заставляет значения последнего напечатанного столбца занимать несколько строк, если необходимо, чтобы избежать усечения. -
Чтобы указать настраиваемую ширину столбца, передайте хеш
Format-Table
со свойствомWidth
в качестве элемента параметруFormat-Table
-Property
; например, следующий пример ограничивает первый выходной столбец 5 символами:[pscustomobject] @{ prop1='1234567890'; prop2='other' } | Format-Table -Property @{ e='prop1'; width = 5 }, prop2
Если происходит усечение, индикатор усечения...
неизменно принимает последние 3 символа усеченного значения; в приведенном вышеprop1
значениеprop1
отображается как12...
для 5 символов.
Кроме того, указание хотя бы одной настраиваемой ширины означает, что вы должны явно перечислить все свойства для вывода в аргументе-Property
, даже те, которые не нуждаются в настраиваемой ширине.
-