Detect Sametime Release use by Notes Client

I am looking for a way to know what release of Sametime our users are using. Each Notes Release have his default Sametime release:
Notes 8.0 = Sametime 7.5.1
Notes 8.0.1 = Sametime 8.0
Notes 8.0.2 = Sametime 8.0 + some fixes
Notes 8.5 = Sametime 8.0.1
Notes 8.5.1 = Sametime 8.0.2 (specifically 8.0.2.20090919-0400)
Notes 8.5.2 = Sametime 8.0.2 (specifically 8.0.2.20100802-0849)
Notes 8.5.3 = Sametime 8.5.1

IBM Notes/Domino 9.0.1 currently includes IBM Sametime 8.5.2 IFR1

User can use setup program files to update their Sametime client to a later release, like Sametime 901.

As an admin, how can I detect by script who is using what release? We have severals hundred of computers, and we don’t want to make that survey by going into each of them and looking it manually via Help - About IBM Notes and Click of Feature Details.

Is there any API, script, class, file, registry key, or anything else that exist to get that info?

Thank,

Subject: Responses posted in other forum

Date Topic Author
Link Notes://Notes2/8525744900544E5F/5049EE164C54799785256BFF00519260/022ABA4F1C5C25AB85257DF800523120 You could see what client they are using in the stlog.nsf on the server (Created by Carl Tyler on 02/26/2015)
Link Notes://Notes2/8525744900544E5F/5049EE164C54799785256BFF00519260/ECBCBE6DE5C6B3BE85257DF8005235F8 stlog (Created by Barry Shapiro on 02/26/2015)

Subject: I did some work in this area

A few years ago, I worked with a company to parse the docs in stlog.nsf and dump them to a view so that you don’t end up with many entries per user. I don’t remember all of the details, but here was the code that handled that part. You could use that as a starting point for something similar.

%REM
Agent User Versions
Created Jun 27, 2012 by Chad Scott/Austin/IBM
Description: Pulls information from the user logins view and stores it as
a static, per-user document in a new view of stlog.nsf.
%END REM

Option Public
Option Declare

Private Const AGENT_VERSION = “User Versions 0.1”
Private Const ST_USER_LOGINS_VIEW = “Notes Community Server Login and Logout Events by User”
Private Const ST_USER_VERSION_VIEW = “User Client Versions”
Private Const ST_USER_VERSION_FORM = “ClientVersions”
Private Const ST_USER_ID = “UserID”
Private Const ST_APP_NAME = “ApplicationName”
Private Const ST_IP_ADDRESS = “NetworkAddress”

Sub Initialize

Dim s As New NotesSession
Dim stLogDb As NotesDatabase
Dim userLoginView As NotesView
Dim userLoginViewDC As NotesDocumentCollection
Dim userLoginViewDoc As NotesDocument
Dim userLoginViewUserID As Variant
Dim userVersionView As NotesView
Dim userVersionViewDoc As NotesDocument
Dim userVersionViewUserID As String
Dim counter As Long

Set stLogDb = s.CurrentDatabase
counter = 0

’ See if our target view exists. If not, log a message that it needs to be created and
’ exit. This view is required because we need to correlate entries in it with entries in
’ the user login view."
Set userVersionView = stLogDb.GetView(ST_USER_VERSION_VIEW)
If (userVersionView Is Nothing) Then
Print “The User Client Versions view does not exist. Please create it and re-run the agent.”
Exit Sub
End If

’ Get the unprocessed documents from our source view
Set userLoginViewDC = stLogDb.UnprocessedDocuments
’ Print stLoginViewDC.Count

’ Loop through the unprocessed documents
Set userLoginViewDoc = userLoginViewDC.GetFirstDocument
While (Not userLoginViewDoc Is Nothing)
counter = counter + 1
’ Look for a document in the User Client Versions view for this same user
userLoginViewUserID = userLoginViewDoc.GetItemValue(ST_USER_ID)
If (userLoginViewUserID(0) = “”) Then
Goto NextDoc
Else
userVersionViewUserID = userLoginViewUserID(0)
Set userVersionViewDoc = userVersionView.GetDocumentByKey(userVersionViewUserID)
If (Not userVersionViewDoc Is Nothing) Then
’ We found a match, so update it
Call UpdateClientInfo(userLoginViewDoc, UserVersionViewDoc, False)
Else
’ We didn’t find a match. Create a new doc and update it
Set userVersionViewDoc = stLogDb.CreateDocument
If (userVersionViewDoc Is Nothing) Then
Print “Error creating a new document for “, userID
Goto NextDoc
End If
Call UpdateClientInfo(userLoginViewDoc, UserVersionViewDoc, True)
End If
’ Add $NoPurge so the docs won’t age out of the log
Call userVersionViewDoc.AppendItemValue(”$NoPurge”, “1”)
Call userVersionViewDoc.Save(False, False)
End If
NextDoc:
Call s.UpdateProcessedDoc(userLoginViewDoc)
Set userLoginViewDoc = userLoginViewDC.GetNextDocument(userLoginViewDoc)
Wend

Print AGENT_VERSION ": Documents processed: ", counter

End Sub

Sub UpdateClientInfo(userLoginViewDoc As NotesDocument, userVersionViewDoc As NotesDocument, isNewlyTrackedUser As Boolean)
Dim userID As Variant
Dim currentClientVersion As Variant
Dim existingClientVersion As Variant
Dim currentIPAddress As Variant
Dim existingIPAddress As Variant

userID = userLoginViewDoc.GetItemValue(ST_USER_ID)
currentClientVersion = userLoginViewDoc.GetItemValue(ST_APP_NAME)
currentIPAddress = userLoginViewDoc.GetItemValue(ST_IP_ADDRESS)

If ( userID(0) <> “” And currentClientVersion(0) <> “” ) Then
If (isNewlyTrackedUser = True) Then
’ If this is a user who does not already exist in our User Client Versions view, we can just update the doc with no further ado
Call userVersionViewDoc.AppendItemValue(ST_USER_ID, userID(0))
Call userVersionViewDoc.AppendItemValue(ST_APP_NAME, currentClientVersion(0))
Call userVersionViewDoc.AppendItemValue(ST_IP_ADDRESS, currentIPAddress(0))
Call userVersionViewDoc.AppendItemValue(“Form”, ST_USER_VERSION_FORM)
Else
’ If this user already exists in the User Client Versions view, see if the ST client version
’ and IP address info remain the same. If either one is different, update it
existingClientVersion = userVersionViewDoc.GetItemValue(ST_APP_NAME)
existingIPAddress = userVersionViewDoc.GetItemValue(ST_IP_ADDRESS)
If (currentClientVersion(0) <> existingClientVersion(0)) Then
Call userVersionViewDoc.ReplaceItemValue(ST_APP_NAME, currentClientVersion(0))
End If
If (currentIPAddress(0) <> existingIPAddress(0)) Then
Call userVersionViewDoc.ReplaceItemValue(ST_IP_ADDRESS, currentIPAddress(0))
End If
End If
End If
End Sub