如何写一个快速的1-liner用于写主机对象属性(比方说Name
)?这是我要打印Name
...
Get-WmiObject -Class win32_ComputerSystem -namespace "root\CIMV2"
我试过......
write-host $_.name | Get-WmiObject -Class win32_ComputerSystem -namespace "root\CIMV2"
但这似乎仍会打印所有对象属性。我该怎么做才能修复这个命令?
答案 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