Объединить два запроса WQL в один - PullRequest
0 голосов
/ 19 февраля 2019

Мы пытаемся получить данные, поступающие из нескольких таблиц в SCCM.На данный момент мы используем PowerShell для форматирования объекта с нужными нам данными.

Было бы замечательно, если бы мы могли изменить оператор SELECT, чтобы он включал поля из нескольких таблиц, например SELECT SMS_G_System_COMPUTER_SYSTEM.Model, SMS_G_System_SYSTEM_ENCLOSURE.ChassisTypes FROM ....Но это не представляется возможным.Даже при использовании псевдонима AS.

Есть ли лучший или более простой способ сделать это, чем обходной путь, который мы нашли ниже?

$Query = "
SELECT *
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
"

$WMIQueryParams = @{
    NameSpace    = $NameSpace
    ComputerName = $SCCMServer
    Query        = $Query
}
$Result = Get-WmiObject @WMIQueryParams | select -First 1

$Result |
    Select-Object @{N = 'Name'; E = { $_.SMS_G_System_COMPUTER_SYSTEM.Name}},
    @{N = 'Manufacturer'; E = { $_.SMS_G_System_COMPUTER_SYSTEM.Manufacturer}},
    @{N = 'Model'; E = { $_.SMS_G_System_COMPUTER_SYSTEM.Model}},
    @{N = 'ChassisTypes'; E = { $_.SMS_G_System_SYSTEM_ENCLOSURE.ChassisTypes}},
    @{N = 'DeviceType'; E = {
        switch -Regex ($_.SMS_G_System_SYSTEM_ENCLOSURE.ChassisTypes) {
            '8|9|10|11|12|14|18|21' { 'Laptop' }
            '3|4|5|6|7|15|16' { 'Desktop' }
            '23' { 'Server' }
            Default {'Unknown'}
        }
    }},
@{N = 'OS'; E = { $_.SMS_R_System.operatingSystem}},
@{N = 'OSversion'; E = { $_.SMS_R_System.operatingSystemVersion}}
...