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

使用powershell从WQL中的不同表返回多个属性,powershell,sccm,wql,Powershell,Sccm,Wql,我正在尝试从SCCM获取一个查询,以在powershell中返回相同的输出。对于给定的一组机箱类型,在SCCM中运行查询将返回两列:SMS_G_SYSTEM_COMPUTER_SYSTEM.name和SMS_G_SYSTEM_SYSTEM_ENCLOSURE.chassistypes 然后我尝试将查询语言直接粘贴到powershell中的WQL查询中 $computername = "sccmserver" $namespace = "root\sms\site_sitecode" $query

我正在尝试从SCCM获取一个查询,以在powershell中返回相同的输出。对于给定的一组机箱类型,在SCCM中运行查询将返回两列: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
这将返回预期的对象,但不返回属性。相反,我得到:

SMS_G_System_COMPUTER_SYSTEM  : System.Management.ManagementBaseObject
SMS_G_System_SYSTEM_ENCLOSURE : System.Management.ManagementBaseObject
如果我运行相同的查询,但告诉它仅选择一个属性,则它将按预期工作: 例如 种类:1

如何让它正确返回这两个值?

首先,我会尝试:

Get-CimInstance -Query $query -computername $computername -namespace $namespace
由于该命令是在PowerShell v1.0之后出现的,因此它通常可以更好地格式化WMI/CIM输出

我想直接的答案是:

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}}

实际上,我最初尝试获取CIMInstance,但它抛出了一个错误:root/sms/site\u sitecode命名空间中不存在类\uu GENERIC。不过,您关于将属性添加为哈希表的建议非常有效,谢谢!尝试将其转换为json | ConvertTo json,以便更好地理解查询真正返回的内容。我想它不像你想象的那么平。。。