2009/03/05

WSUS 2.0SP1用SQL その2

WSUS 2.0では, Windows updateのエージェントのIDが変わると,
管理コンソール上(データベース上)でエントリが別々になるので,
SQLを少し変更

さらに前に作っていたSQL文では, Excel等でホストの一覧と, 未適用パッチ一覧とを
リンクさせようとした場合に, ホスト名部分を使わなければいけなかった.
WSUS 3.0では, Windows updateのエージェントのIDが変わっても,
トラッキングしてくれて, ちゃんと元のエントリを指してくれるが,
WSUS 2.0ではだめなので, ホスト個別IDを使用できる文に変更

ついでに未適用パッチ一覧の重複行も削除するように変更
ホスト一覧取得
SELECT C.*, A.Name
FROM
SUSDB.dbo.tbTargetGroup A
LEFT OUTER JOIN
SUSDB.dbo.tbTargetInTargetGroup B ON B.TargetGroupID = A.TargetGroupID
RIGHT OUTER JOIN
SUSDB.dbo.tbComputerTarget C ON B.TargetID = C.TargetID
WHERE
C.LastSyncTime = (
  SELECT max(LastSyncTime) 
  FROM
  SUSDB.dbo.tbComputerTarget CC 
  WHERE 
  CC.FullDomainName=C.FullDomainName
)
order by FullDomainName

---------------------------------------
未適用のパッチ一覧取得
SELECT distinct B.targetID, B.FullDomainName, B.IPAddress, B.RequestedTargetGroupName, 
H.Title AS category, C.Title, A.SummarizationState, 
B.LastReportedStatusTime, F.SecurityBulletinID, I.KBArticleID, D.updateID
FROM 
SUSDB.dbo.tbUpdateStatusPerComputer A
INNER JOIN
SUSDB.dbo.tbComputerTarget B ON A.targetID = B.targetID
INNER JOIN
SUSDB.dbo.tbPreComputedLocalizedProperty C ON C.updateID = A.updateID
INNER JOIN
SUSDB.dbo.tbUpdate D ON A.updateID = D.UpdateID
INNER JOIN
SUSDB.dbo.tbRevision E ON D.localUpdateID = E.localUpdateID
LEFT OUTER JOIN
SUSDB.dbo.tbSecurityBulletinForRevision F ON E.RevisionID = F.RevisionID
INNER JOIN
SUSDB.dbo.tbRevisionInCategory G ON E.RevisionID = G.RevisionID
INNER JOIN
SUSDB.dbo.tbPrecomputedCategoryLocalizedProperty H ON G.CategoryID = H.CategoryID
LEFT OUTER JOIN
SUSDB.dbo.tbKBArticleForRevision I ON E.RevisionID = I.RevisionID
WHERE (H.ShortLanguage = 'en') AND (C.ShortLanguage = 'en') AND 
(H.CategoryType = 'UpdateClassification') AND (NOT (A.SummarizationState IN (1, 4)))

---------------------------------------
SUSDB.dbo.tbUpdateStatusPerComputerのSummarizationStateの
意味は以下のとおり.
1 = Not Applicable
2 = Needed
3 = Downloaded
4 = Installed
5 = Failed
6 = Reboot Required

0 件のコメント: