SCCM Software Updates Deployments Troubleshooting – 3
Herkese Merhaba;
SCCM Software Update Deployments altyapısı ile ilgili troubleshooting makale serisinin 3.’sünde sizlerle bazı dinamik SQL sorgular paylaşıyor olacağım.
Bildiğiniz gibi SCCM ile birlikte client veya server’lardan çok fazla veri gelmektedir. Özellikle troubleshooting yapmak için hangi verinin hangi tabloda tutulduğunu, hangi view’lerin kullanıldığını bilmek, çözüme daha hızlı ulaşmamızı sağlayabiliyor.
Bu yüzden, öncelikle SCCM DB’de hazır view’lere ait detay bilgilere aşağıdaki URL’den ulaşabilirsiniz.
https://gallery.technet.microsoft.com/SCCM-Configmgr-2012-R2-SQL-5fefdd3b
Şimdi sorgulara bir bakalım:
Query -1
Bu sorguyu çalıştırdığınızda hazırladığınız Software Update Groupların detay bilgilerine ulaşabilirsiniz.
select * from fn_rbac_AuthListInfo(1033, ‘disabled’)
Query-2
Bu query herhangi bir update group için deployment sonucunu bizlere göstermektedir. Sorguda status değerlerine baktığımızda 1 ve 3 compliant durumu,2 non-compliant durumu, 0 ise unknown (yani scan edilmemiş makineleri) durumu göstermektedir.
Yani Haziran 2018 için örneğin bir update group oluşturup deploy ettiğinizde scop_id yi değiştirip status u (1,3) seçmeniz durumunda update’leri yüklenmiş makine sayılarını bulabilirsiniz.
select t0.ResourceID,Max(t3.Netbios_Name0) Name0
from v_Update_ComplianceStatusAll t0
INNER JOIN v_ConfigurationItems t1 ON t0.CI_ID = t1.CI_ID
INNER JOIN fn_rbac_AuthListInfo(1033, ‘disabled’) t2 ON t1.CI_UniqueID = t2.CI_UniqueID
INNER JOIN v_R_System t3 ON t0.ResourceID = t3.ResourceID
where status in (1,3)
and t2.CI_UniqueID = ‘ScopeId_XXX’
group by t0.ResourceID
order by t0.ResourceID asc
Query -3
Agent ‘ın genel sağlık durumunu bu query ile alabilir ve buna göre özellikle wsusscan durum bilgisine göre analiz yapabilirsiniz.
A1.ResourceID as AgentHealthStatus_ResourceID,
DATEDIFF (day,A2.LastHWScan,GetDate()) AS LastHWScanDays,
DATEDIFF (day,A3.LastScanDate,GetDate()) AS LastSWScanDays,
DATEDIFF (day,A4.LastScanTime,GetDate()) AS LastWSUSScanDays,
case
WHEN DATEDIFF (day,A2.LastHWScan,GetDate())<14 tHEN ‘Healthy’ ELSE ‘UnHealthy’ end AS HWScanStatus,
case
WHEN DATEDIFF (day,A3.LastScanDate,GetDate())<14 tHEN ‘Healthy’ ELSE ‘UnHealthy’ end AS SWScanStatus,
case
WHEN DATEDIFF (day,A4.LastScanTime,GetDate())<14 tHEN ‘Healthy’ ELSE ‘UnHealthy’ end AS WSUSScanStatus
FROM v_r_system A1
LEFT JOIN v_GS_WORKSTATION_STATUS A2 ON A1.ResourceID = A2.ResourceID
LEFT JOIN v_GS_LastSoftwareScan A3 ON A1.ResourceID = A3.ResourceID
LEFT JOIN v_UpdateScanStatus A4 ON A1.ResourceID = A4.ResourceID
Query -4
Update deployment sonrasında Inprogress detay bilgileri aşağıdaki sorgu ile erişebilirsiniz.
select
distinct vr.ResourceID,vr.Netbios_Name0,StateName
from fn_rbac_CIAssignment(‘disabled’) a
cross apply(
select StateType, StateID, ResourceID from .fn_rbac_AssignmentState_Combined(‘disabled’) SC
where AssignmentID=a.AssignmentID and StateType in (300,301) ) sc
left join fn_rbac_StateNames(‘disabled’) sn on sn.TopicType=sc.StateType and sn.StateID=sc.StateID
left join v_r_system vr on sc.ResourceID=vr.ResourceID
where (sn.TopicType = 301 and sn.StateID in(1,7,8,10))
and
a.AssignmentID in
(
select AssignmentID from fn_rbac_CIAssignment(‘disabled’) where Assignment_UniqueID in
(
select DeploymentID = cia.Assignment_UniqueID
from fn_rbac_CIAssignment(‘disabled’) cia
left join fn_rbac_CIAssignmentToGroup(‘disabled’) atg on cia.AssignmentType=5 and atg.AssignmentID=cia.AssignmentID
left join fn_rbac_AuthListInfo(1033, ‘disabled’) grp on cia.AssignmentType=5 and grp.CI_ID=atg.AssignedUpdateGroup
where cia.AssignmentType in (1,5)
)
)
Query -5
Software Update deployment failed alan makinelerin genel durum bilgisi, aşağıdaki sorgudan alınabilir.
select t1.ResourceID,vr.Netbios_Name0, t3.Hex,ISNULL(t3.Description,’Unknown Error’)Description
from fn_rbac_UpdateAssignmentStatus_Live(‘disabled’) t1
INNER JOIN
(
select MAX(assc.LastEnforcementMessageTime)LastEnforcementMessageTime, assc.ResourceID
from fn_rbac_CIAssignment(‘disabled’) cia
join fn_rbac_UpdateAssignmentStatus_Live(‘disabled’) assc
on assc.AssignmentID = cia.AssignmentID
and isnull(assc.IsCompliant, 0)=0
and assc.LastEnforcementMessageID in (6,9)
join fn_rbac_R_System(‘disabled’) sys on assc.ResourceID=sys.ResourceID and isnull(sys.Obsolete0,0)=0
where cia.Assignment_UniqueID
in
( select DeploymentID = cia.Assignment_UniqueID
from fn_rbac_CIAssignment(‘disabled’) cia
left join fn_rbac_CIAssignmentToGroup(‘disabled’) atg on cia.AssignmentType=5 and atg.AssignmentID=cia.AssignmentID
left join fn_rbac_AuthListInfo(1033, ‘disabled’) grp on cia.AssignmentType=5 and grp.CI_ID=atg.AssignedUpdateGroup
where cia.AssignmentType in (1,5)
)
Group by assc.ResourceID
) t2 ON t1.ResourceID = t2.ResourceID and t1.LastEnforcementMessageTime=t2.LastEnforcementMessageTime
LEFT OUTER JOIN [ErrorCodeDescription] t3 ON t1.LastEnforcementErrorCode = t3.SignedInt
INNER JOIN v_R_System vr ON T1.ResourceID= vr.ResourceID
Hata kodlarına da bu query ile ulaşılabilir.
select * from [ErrorCodeDescription]
State tiplerine göre detay bilgilere de link’ten ulaşabilirsiniz.
https://technet.microsoft.com/en-us/library/bb932203.aspx
Bu query’leri SCCM Database (CM_XYZ) üzerinde çalıştırarak sonuçları görebilirsiniz.