0

我尝试了各种方法来格式化 poweshell 命令的输出,并且希望仅将列表中的一些行项打印为一行中 aa 列的一部分。

也许更容易说明:

# 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]

这怎么能轻松完成?

(巧合的是,在这种情况下,我想要所有行,但如果它还包含我们不想要的行,则更一般的答案可能会更有用。)

4

3 回答 3

3

PowerShell 通常返回对象并将它的字符串表示形式输出到主机。您需要自定义字符串格式输出到主机。您可以通过多种方式实现这一点,但最快的方式和我的建议是使用-f operator

$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

但是,您应该尽可能多地使用对象,并且只要可能。

于 2018-12-08T12:39:59.043 回答
1

只需使用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 *
于 2018-12-08T13:19:01.480 回答
1

我相信这应该对你有用:

$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"))]"
于 2018-12-08T12:34:59.060 回答