如何在 powershell 中仅列打印列表的某些行部分?
How to column print only certain row parts of a list in powershell?
我已经尝试了多种方法来格式化 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]
这怎么能轻松完成?
(巧合的是,我想要这种情况下的所有行,但更笼统的答案可能更有用,如果它还包括我们不想要的行。)
我相信这对你有用:
$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"))]"
PowerShell 通常 returns 对象并将其字符串表示形式输出到主机。您希望将自定义字符串格式输出到主机。您可以通过多种方式实现这一目标,但最快的方式和我的建议是使用 -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
但是,您应该尽可能多地使用对象,只要可能。
只需使用 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 *
我已经尝试了多种方法来格式化 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]
这怎么能轻松完成?
(巧合的是,我想要这种情况下的所有行,但更笼统的答案可能更有用,如果它还包括我们不想要的行。)
我相信这对你有用:
$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"))]"
PowerShell 通常 returns 对象并将其字符串表示形式输出到主机。您希望将自定义字符串格式输出到主机。您可以通过多种方式实现这一目标,但最快的方式和我的建议是使用 -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
但是,您应该尽可能多地使用对象,只要可能。
只需使用 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 *