使用 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}}
我正在尝试从 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}}