如何格式化1-liner以打印对象属性

时间:2013-12-17 17:10:34

标签: powershell

如何写一个快速的1-liner用于写主机对象属性(比方说Name)?这是我要打印Name ...

的对象
Get-WmiObject -Class win32_ComputerSystem -namespace "root\CIMV2"

我试过......

 write-host $_.name | Get-WmiObject -Class win32_ComputerSystem -namespace "root\CIMV2"

但这似乎仍会打印所有对象属性。我该怎么做才能修复这个命令?

2 个答案:

答案 0 :(得分:4)

您可以使用Select-Object cmdlet-ExpandProperty参数来仅检索计算机名称,然后将其传递给Write-Host(格式化为多行以便于阅读):

Get-WmiObject -Class win32_ComputerSystem -namespace "root\CIMV2" `
    | Select-Object -ExpandProperty 'Name' `
    | Write-Host;

或者,使用ForEach-Object cmdlet获取Name属性:

Get-WmiObject -Class win32_ComputerSystem -namespace "root\CIMV2" `
    | ForEach-Object { $_.Name; } `
    | Write-Host;

这不是一个单行,而是另一种类似于你尝试过的方法:

$computer = Get-WmiObject -Class win32_ComputerSystem -namespace "root\CIMV2";
Write-Host $computer.Name;

请注意,由于您只关心Name的{​​{1}}属性,因此最好使用Win32_ComputerSystem参数将其传达给Get-WmiObject,这样就不会打扰返回将被丢弃的信息:

-Property

答案 1 :(得分:3)

除了BACON的答案之外,还有另外一个选择(需要PowerShell v3或更高版本):

Write-Host (Get-WmiObject -Class win32_ComputerSystem -namespace "root\CIMV2").Name