SCCM 报告服务器上的 return KB 状态
SCCM report to return KB status on servers
我正在尝试在 SCCM 中创建一个自定义报告,它将告诉我是否在服务器池上安装了特定的知识库,以及 return 二进制答案(在这种情况下,是或否)。
我遇到的问题是我无法将其设置为 return 只有一个 KB 的状态。我是运行这个:
SELECT
SYS.Name0 'Computer',
SYS.operatingSystem0 'OS',
UIN.Title 'Update',
CASE
WHEN UIN.Title LIKE '%KB3092627%' THEN 'Yes'
ELSE 'No'
END 'KB Installed'
FROM v_R_System SYS
INNER JOIN v_UpdateComplianceStatus UCS ON SYS.ResourceID = UCS.ResourceID
INNER JOIN v_UpdateInfo UIN ON UCS.CI_ID = UIN.CI_ID
WHERE SYS.operatingSystem0 LIKE '%Server 2008%'
ORDER BY SYS.Name0
但每个 SYS.Name0
我都会得到数百个结果,每个检测到的更新都有一个。所有不是所需 KB 的更新记录的 KB Installed
的值为 'No'
,但它们仍被列出。我试过 SELECT DISTINCT
看看它是否给我带来了不同的结果,但没有。
我想要的是确定 KB 是否存在,以及 return 是否存在。我觉得我什至没有用这段代码问 "Is installed or not" 的基本问题,但我想不出一种不同的方式来问这个问题。这是我应该在 Report Builder 而不是查询中做的事情吗?
免责声明:我没有在代表性数据集上对此进行测试,因为您没有提供,但我认为这应该可以实现您想要实现的目标:
SELECT DISTINCT
s1.Name0 'Computer',
s1.operatingSystem0 'OS',
CASE WHEN matches.Computer IS NULL THEN 'No' ELSE 'Yes' END 'KB Installed'
FROM v_R_System s1
LEFT JOIN
(
SELECT s2.Name0 'Computer',
FROM v_R_System s2
INNER JOIN v_UpdateComplianceStatus UCS ON s2.ResourceID = UCS.ResourceID
INNER JOIN v_UpdateInfo UIN ON UCS.CI_ID = UIN.CI_ID
WHERE UIN.Title LIKE '%KB3092627%'
) AS matches ON s1.Name0 = matches.Computer
WHERE s1.operatingSystem0 LIKE '%Server 2008%'
ORDER BY s1.Name0
因此,这实际上是 returns 所有计算机的不同列表,并且 LEFT JOIN
将其添加到每个给定计算机的相关更新记录的结果集中。因此,当 LEFT JOIN
返回的字段是 NULL
时,更新尚未安装,反之亦然。
为了回答你的问题,我个人认为在查询中这样做很好(而不是在你的报告中以某种方式)——我会在这做。
请运行以下查询:
SELECT DISTINCT
SYS.Name0 'Computer',
SYS.Operating_System_Name_and0 'OS',
UIN.Title 'Update',
CASE
WHEN UIN.Title LIKE '%KB3079343%' THEN 'Yes'
ELSE 'No'
END 'KB Installed'
FROM v_R_System SYS
left JOIN v_UpdateComplianceStatus UCS ON SYS.ResourceID = UCS.ResourceID
left JOIN v_UpdateInfo UIN ON UCS.CI_ID = UIN.CI_ID
WHERE UIN.Title LIKE '%KB3079343%'
ORDER BY SYS.Name0
在我的测试实验室中,有多个记录对应一个 KB 号。此方法可能不是完美的解决方案。
您可以试试内置报告:
\Monitoring\Overview\Reporting\Reports\Software 更新 - 合规性\
合规性 8 - 处于更新的特定合规性状态的计算机(次要)
我正在尝试在 SCCM 中创建一个自定义报告,它将告诉我是否在服务器池上安装了特定的知识库,以及 return 二进制答案(在这种情况下,是或否)。
我遇到的问题是我无法将其设置为 return 只有一个 KB 的状态。我是运行这个:
SELECT
SYS.Name0 'Computer',
SYS.operatingSystem0 'OS',
UIN.Title 'Update',
CASE
WHEN UIN.Title LIKE '%KB3092627%' THEN 'Yes'
ELSE 'No'
END 'KB Installed'
FROM v_R_System SYS
INNER JOIN v_UpdateComplianceStatus UCS ON SYS.ResourceID = UCS.ResourceID
INNER JOIN v_UpdateInfo UIN ON UCS.CI_ID = UIN.CI_ID
WHERE SYS.operatingSystem0 LIKE '%Server 2008%'
ORDER BY SYS.Name0
但每个 SYS.Name0
我都会得到数百个结果,每个检测到的更新都有一个。所有不是所需 KB 的更新记录的 KB Installed
的值为 'No'
,但它们仍被列出。我试过 SELECT DISTINCT
看看它是否给我带来了不同的结果,但没有。
我想要的是确定 KB 是否存在,以及 return 是否存在。我觉得我什至没有用这段代码问 "Is installed or not" 的基本问题,但我想不出一种不同的方式来问这个问题。这是我应该在 Report Builder 而不是查询中做的事情吗?
免责声明:我没有在代表性数据集上对此进行测试,因为您没有提供,但我认为这应该可以实现您想要实现的目标:
SELECT DISTINCT
s1.Name0 'Computer',
s1.operatingSystem0 'OS',
CASE WHEN matches.Computer IS NULL THEN 'No' ELSE 'Yes' END 'KB Installed'
FROM v_R_System s1
LEFT JOIN
(
SELECT s2.Name0 'Computer',
FROM v_R_System s2
INNER JOIN v_UpdateComplianceStatus UCS ON s2.ResourceID = UCS.ResourceID
INNER JOIN v_UpdateInfo UIN ON UCS.CI_ID = UIN.CI_ID
WHERE UIN.Title LIKE '%KB3092627%'
) AS matches ON s1.Name0 = matches.Computer
WHERE s1.operatingSystem0 LIKE '%Server 2008%'
ORDER BY s1.Name0
因此,这实际上是 returns 所有计算机的不同列表,并且 LEFT JOIN
将其添加到每个给定计算机的相关更新记录的结果集中。因此,当 LEFT JOIN
返回的字段是 NULL
时,更新尚未安装,反之亦然。
为了回答你的问题,我个人认为在查询中这样做很好(而不是在你的报告中以某种方式)——我会在这做。
请运行以下查询:
SELECT DISTINCT
SYS.Name0 'Computer',
SYS.Operating_System_Name_and0 'OS',
UIN.Title 'Update',
CASE
WHEN UIN.Title LIKE '%KB3079343%' THEN 'Yes'
ELSE 'No'
END 'KB Installed'
FROM v_R_System SYS
left JOIN v_UpdateComplianceStatus UCS ON SYS.ResourceID = UCS.ResourceID
left JOIN v_UpdateInfo UIN ON UCS.CI_ID = UIN.CI_ID
WHERE UIN.Title LIKE '%KB3079343%'
ORDER BY SYS.Name0
在我的测试实验室中,有多个记录对应一个 KB 号。此方法可能不是完美的解决方案。
您可以试试内置报告: \Monitoring\Overview\Reporting\Reports\Software 更新 - 合规性\ 合规性 8 - 处于更新的特定合规性状态的计算机(次要)