Как вывести в столбец только определенные части строки списка в powershell? - PullRequest
0 голосов
/ 08 декабря 2018

Я пытался различными способами отформатировать вывод команды poweshell и хотел бы печатать только некоторые элементы строки в списке как часть столбца в одной строке.

Возможно, более легко проиллюстрировать:

# I want the output from:
Get-CimInstance Win32_OperatingSystem | select Caption,Version,OSArchitecture,InstallDate | fl

Caption        : Microsoft HAL 9000
Version        : 6.3.9000
OSArchitecture : 64-bit
InstallDate    : 2018-08-16 00:50:01

# To look like this:
Microsoft HAL 9000 (6.3.9000) 64-bit  [2018-08-16 00:50:01]

Как это легко сделать?

(По совпадению я хочу, чтобы все строки в этом случае, ноболее общий ответ может быть более полезным, если он также включает строки, которые нам не нужны.)

Ответы [ 3 ]

0 голосов
/ 08 декабря 2018

PowerShell обычно возвращает объекты и выводит их строковое представление на хост.Вы хотите, чтобы пользовательский формат строки выводился на хост.Вы можете достичь этого различными способами, однако самый быстрый способ, и я рекомендую использовать оператор -f .

$OS = Get-CimInstance Win32_OperatingSystem

'{0} ({1}) {2} [{3}]' -f $OS.Caption, $OS.Version, $OS.OSArchitecture, $OS.InstallDate

с помощью here-strings использование может сделать то же самое смногострочный.

$OS = Get-CimInstance Win32_OperatingSystem

@'
My OS is {0} {1})
Architecture --> {2}
Installation Date: [{3}]
'@ -f $OS.Caption, $OS.Version, $OS.OSArchitecture, $OS.InstallDate

Тем не менее, вы должны работать с объектами столько, сколько - и как можно дольше.

0 голосов
/ 08 декабря 2018

Просто используйте Format-Table вместо Format-List.Они оба поддерживают список свойств, которые вы хотите увидеть.Поэтому, если вы не хотите, чтобы все столбцы, перечислите те, которые вы хотите.

# 'default' properties in a table
Get-CimInstance Win32_OperatingSystem | ft

# only some properties in a table
Get-CimInstance Win32_OperatingSystem | ft Caption, OSArchitecture

# without table headers
Get-CimInstance Win32_OperatingSystem | ft Caption, OSArchitecture -HideTableHeaders

# all properties in a list (because there are too many for a table)
Get-CimInstance Win32_OperatingSystem | fl *
0 голосов
/ 08 декабря 2018

Я бы поверил, что это должно сработать для вас:

$temp = (Get-CimInstance Win32_OperatingSystem | Select-Object Caption, Version, OSArchitecture,InstallDate)

Select-Object гарантирует, что вы получите желаемые свойства.Имея переменную со всеми деталями, мы можем объединить ее так:

"$($temp.Caption) ($($temp.version)) $($temp.OSArchitecture) [$($temp.InstallDate.ToString("yyyy-MM-dd hh:mm:ss"))]"
...