gpt4 book ai didi

PowerShell 输出返回的字段多于所选字段

转载 作者:行者123 更新时间:2023-12-05 04:31:07 26 4
gpt4 key购买 nike

在过去的一个月里,我一直在学习 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)取代了 PowerShell v3(2012 年 9 月发布)中的 WMI cmdlet(例如,Get-WmiObject)。因此,应避免使用 WMI cmdlet,尤其是因为 PowerShell (Core) v6+(所有 future 的努力都将用于此)甚至不再它们。但是请注意,WMI 仍然是 CIM cmdlet 的基础。有关详细信息,请参阅 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 输出返回的字段多于所选字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71897469/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com