I do this via the logon script, which is in VBS. The relevant part of which is:
Set objTS = objFileSystem.OpenTextFile(strLogFile, 2, True)
Set oReg=GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputerName & "\root\default:StdRegProv")
oReg.EnumKey &H80000002, "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\", arrSubKeys
For Each subKey In arrSubKeys
strDisplayName = ""
strDisplayVersion = ""
On Error Resume Next
strDisplayName = LCase(WshShell.RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\" & subKey & "\DisplayName"))
strDisplayVersion = LCase(WshShell.RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\" & subKey & "\DisplayVersion"))
On Error Goto 0
If Left(subKey, 2) = "KB" = 0 And Left(strDisplayName, 18) = "update for windows" = 0 And Instr(strDisplayName, "hotfix") = 0 And len(strDisplayName) > 0 Then
objTS.WriteLine Now() & vbTab & subKey & ";" & strDisplayName & ";" & strDisplayVersion
End If
Next