Мы пытаемся получить данные, поступающие из нескольких таблиц в 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}}