使用 powershell 从 WQL 中的不同表返回多个属性

Returning multiple properties from different tables in WQL with powershell

我正在尝试从 SCCM 查询到 return 在 powershell 中的相同输出。 运行 SCCM return 中的查询两列:SMS_G_SYSTEM_COMPUTER_SYSTEM.name 和 SMS_G_SYSTEM_SYSTEM_ENCLOSURE.chassistypes,对于一组给定的机箱类型

然后我尝试将查询语言直接粘贴到 powershell 中的 WQL 查询中;

$computername = "sccmserver"
$namespace = "root\sms\site_sitecode"
$query = @"select SMS_G_System_COMPUTER_SYSTEM.Name,SMS_G_System_SYSTEM_ENCLOSURE.chassistypes from  SMS_R_System inner join SMS_G_System_COMPUTER_SYSTEM on SMS_G_System_COMPUTER_SYSTEM.ResourceID = SMS_R_System.ResourceId inner join SMS_G_System_SYSTEM_ENCLOSURE on SMS_G_System_SYSTEM_ENCLOSURE.ResourceId = SMS_R_System.ResourceId where SMS_G_System_SYSTEM_ENCLOSURE.ChassisTypes in ("1","2","3","4","6","7","9","10","15")
"@
Get-WMIObject -Query $query -computername $computername -namespace $namespace

这 return 是预期的对象,但没有属性。相反,我得到:

SMS_G_System_COMPUTER_SYSTEM  : System.Management.ManagementBaseObject
SMS_G_System_SYSTEM_ENCLOSURE : System.Management.ManagementBaseObject

如果我 运行 相同的查询,但只告诉 select 一个 属性,它会按预期工作: 例如 - ChassisTypes : 1

如何正确地获得 return 这两个值?

首先,我会尝试:

Get-CimInstance -Query $query -computername $computername -namespace $namespace

该命令通常会更好地格式化 WMI/CIM 输出,因为它是在 PowerShell v1.0 之后出现的。

我猜的直接答案是:

Get-WMIObject -Query $query -computername $computername -namespace $namespace |
    Select-Object -Property @{n='Name';e={$_.SMS_G_System_COMPUTER_SYSTEM.Name}}, @{n='chassistypes';e={$_.SMS_G_System_SYSTEM_ENCLOSURE.chassistypes}}