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

标签 powershell wql

在过去的一个月里,我一直在学习 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/

相关文章:

powershell - 无法使用 WQL 查询搜索目录子树

powershell - 如何计算从 WQL 查询返回的总行数?

windows - WQL 中的 IN 运算符

powershell - Powershell更新失败

deployment - 无法运行 Set-AzureDeployment

powershell - 如何使用 xWebConfigKeyValue 设置多个 AppSettings 值?

powershell - 您能否在发布管理中将一个 PowerShell 任务的输出通过管道传输到另一个任务?

sql - 有人有 WQL 查询来查找 SQL Server 实例的版本吗?

PowerShell -gt 比较运算符不起作用

c# - WQL Like 语句和语法