Powershell 如何设置打印对象特性的1行线格式

Powershell 如何设置打印对象特性的1行线格式,powershell,Powershell,如何编写一个用于写入对象属性(比如Name)的快速单行程序?这是我想要打印的对象的名称 Get-WmiObject -Class win32_ComputerSystem -namespace "root\CIMV2" 我试过 write-host $_.name | Get-WmiObject -Class win32_ComputerSystem -namespace "root\CIMV2" 但这似乎仍然打印所有对象属性。如何修复此命令?您可以使用的-ExpandProperty参数

如何编写一个用于写入对象属性(比如
Name
)的快速单行程序?这是我想要打印的对象的
名称

Get-WmiObject -Class win32_ComputerSystem -namespace "root\CIMV2"
我试过

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

但这似乎仍然打印所有对象属性。如何修复此命令?

您可以使用的
-ExpandProperty
参数仅检索计算机名,然后将其传送到
写入主机(格式为多行以便于阅读):

或者,使用获取
名称
属性:

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;
请注意,由于您只关心
Win32\u ComputerSystem
Name
属性,因此最好使用
-property
参数与
获取WmiObject
进行通信,这样就不会返回将被丢弃的信息:

Get-WmiObject -Class win32_ComputerSystem -namespace "root\CIMV2" -Property 'Name'

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


在你的前两个答案中,最后一个
写主机
是必要的吗?顺便说一句,感谢您全面回答我的问题。如果您只是在控制台中以交互方式运行这些命令,那么您可以省略
Write Host
,并且计算机名仍将打印到控制台上。在没有写入主机的情况下,命令输出将传递给下一个命令(如果该命令在函数或脚本中运行);如果没有下一个命令,那么默认情况下,它将写入控制台。使用
Write Host
明确指示PowerShell写入控制台。啊,是的。我没想到要把我的第三段代码变成这样的一行代码。顺便说一句,这在PowerShell v2上有效。嗯。我认为这是v3的一个补充。虽然在反射中,我想因为它只返回一个对象,所以在v2中就可以了。我认为使用这种语法从数组中选择属性是在v3中添加的。
Get-WmiObject -Class win32_ComputerSystem -namespace "root\CIMV2" -Property 'Name'
Write-Host (Get-WmiObject -Class win32_ComputerSystem -namespace "root\CIMV2").Name