PowerShell 输出 returns 个比所选字段更多的字段
PowerShell output returns more fields than selected
过去一个月我一直在学习 PowerShell,并且经常通过 select 语句或 -properties iirc 发现我获得了我不需要的额外数据。
希望有人能指出为什么它吐出额外的数据。
示例:
Get-WmiObject -query "Select name,vendor,version from win32_product where name = 'Service Name'" -property name,vendor,version
结果:
__GENUS : 2
__CLASS : Win32_Product
__SUPERCLASS :
__DYNASTY :
__RELPATH :
__PROPERTY_COUNT : 3
__DERIVATION : {}
__SERVER :
__NAMESPACE :
__PATH :
Name : <name stuff>
Vendor : <vendor stuff>
Version : <version number stuff>
PSComputerName :
当我只指定 3 个时,为什么要给我所有这些附加字段?
首先必须提醒:
CIM cmdlet(例如,Get-CimInstance
) superseded the WMI cmdlets (e.g., Get-WmiObject
) in PowerShell v3 (released in September 2012). Therefore, the WMI cmdlets should be avoided, not least because PowerShell (Core) v6+, where all future effort will go, doesn't even have them anymore. Note that WMI still underlies the CIM cmdlets, however. For more information, see this answer。
因此,我在下面使用 Get-CimInstance
;将其替换为 Get-WmiObject
通常 有效,但存在一些基本差异 - 请参阅链接的答案。
让 PowerShell 在事后提取感兴趣的 属性 值更容易,使用 Select-Object
:
Get-CimInstance -Class Win32_Product -Filter "Name = 'Service Name'" |
Select-Object -Property name, vendor, version
使用 Select-Object
确保输出对象具有指定的属性 只有 ,而不是 __
前缀的属性 Get-CimInstance
的输出对象装饰有(除了默认情况下 不显示 的其他通用属性)。
注意:出于性能原因,我怀疑它是必需的,但您也可以限制 属性 源检索 :
$props = 'name', 'vendor', 'version'
Get-CimInstance -Class Win32_Product -Filter "Name = 'Service Name'" -Property $props |
Select-Object -Property $props
过去一个月我一直在学习 PowerShell,并且经常通过 select 语句或 -properties iirc 发现我获得了我不需要的额外数据。 希望有人能指出为什么它吐出额外的数据。
示例:
Get-WmiObject -query "Select name,vendor,version from win32_product where name = 'Service Name'" -property name,vendor,version
结果:
__GENUS : 2
__CLASS : Win32_Product
__SUPERCLASS :
__DYNASTY :
__RELPATH :
__PROPERTY_COUNT : 3
__DERIVATION : {}
__SERVER :
__NAMESPACE :
__PATH :
Name : <name stuff>
Vendor : <vendor stuff>
Version : <version number stuff>
PSComputerName :
当我只指定 3 个时,为什么要给我所有这些附加字段?
首先必须提醒:
CIM cmdlet(例如,
Get-CimInstance
) superseded the WMI cmdlets (e.g.,Get-WmiObject
) in PowerShell v3 (released in September 2012). Therefore, the WMI cmdlets should be avoided, not least because PowerShell (Core) v6+, where all future effort will go, doesn't even have them anymore. Note that WMI still underlies the CIM cmdlets, however. For more information, see this answer。因此,我在下面使用
Get-CimInstance
;将其替换为Get-WmiObject
通常 有效,但存在一些基本差异 - 请参阅链接的答案。
让 PowerShell 在事后提取感兴趣的 属性 值更容易,使用 Select-Object
:
Get-CimInstance -Class Win32_Product -Filter "Name = 'Service Name'" |
Select-Object -Property name, vendor, version
使用 Select-Object
确保输出对象具有指定的属性 只有 ,而不是 __
前缀的属性 Get-CimInstance
的输出对象装饰有(除了默认情况下 不显示 的其他通用属性)。
注意:出于性能原因,我怀疑它是必需的,但您也可以限制 属性 源检索 :
$props = 'name', 'vendor', 'version'
Get-CimInstance -Class Win32_Product -Filter "Name = 'Service Name'" -Property $props |
Select-Object -Property $props