2016-12-29 22 views
0

SCCMでカスタムレポートを作成しようとしていますが、特定のKBがサーバのプールにインストールされているかどうかがわかり、バイナリ回答を返します(この場合はyesまたはno )。サーバ上のKBステータスを返すSCCMレポート

問題は、1 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、1の結果の数百を取得:私はこれを実行しています。目的のKBではない更新のためのすべてのレコードは、KB Installedの場合は'No'の値を持ちますが、それでも表示されます。私はSELECT DISTINCTを試してみましたが、それは私に別の結果を持っているかどうかを確認しようとしました。

私が望むのは、KBが存在するかどうかを判断し、存在するかどうかを確認することです。私は、このコードで「インストールされているかどうか」の基本的な質問をしていないように感じていますが、これを別の方法で尋ねる方法は考えられません。これはクエリの代わりにレポートビルダーで行うべきことですか?

答えて

0

免責事項:私はあなたが1つを提供しなかったとして、設定された代表データでこれをテストしていませんが、私は、これはあなたが達成しようとしている何をすべきだと思う:

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 

だから、これは効果的に返しますすべてのコンピュータの個別のリストとLEFT JOINこれが、それぞれの特定のコンピュータの該当するアップデートの単なるレコードのセットになります。したがって、LEFT JOINから返されたフィールドがNULLの場合、更新はインストールされておらず、その逆もありません。

あなたの質問に答えるために、私は個人的には(何らかの形でレポートの代わりに)クエリでこれをやっているといいと思います。それは私がやるところです。

+0

更新のための特定のコンプライアンス状態にあるコンピュータ - コンプライアンス8 \コンプライアンスこれはやってます、ありがとう!私はこの問題で絶対に死んでしまった。 – Eric

+0

この場合、SELECT DISTINCTとSELECTのどちらを使用していますか?同様に、CASE文などの出力を変更しますか? – Eric

+0

これは、各 's1.Name0'の値が一度しか現れないことを意味します(実際には、各値は' v_R_System'テーブルに何度も現れることがあります)。あなたのクエリから 'DISTINCT'を取り除き、どんな結果が得られたかを見てください。 :) – 3N1GM4

0

以下このクエリを実行してください:

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

を私のテストラボでは、1キロバイトの数に対応する複数のレコードがあります。この方法は完璧な解決策ではないかもしれません。 enter image description here

あなたは組み込みのレポート試みることができる:\概要\レポーティング\監視\ は\ソフトウェアアップデートをレポート - (二次)

関連する問題