Set objReg = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\default:StdRegProv")
objReg.EnumKey HKEY_LOCAL_MACHINE, strKeyPath, arrValueNames
If IsNull(arrValueNames) Then
Call oDiscoveryData.AddInstance(null)
Else
' Create application class instance.
Set oInst = oDiscoveryData.CreateClassInstance("$MPElement[Name='Microsoft.Dynamics.AX.Management.Pack.DynamicsServer']$")
Call oInst.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.Computer']/PrincipalName$", TargetComputer)
Call oInst.AddProperty("$MPElement[Name='System!System.Entity']/DisplayName$", Ucase("$Target/Host/Property[Type='Windows!Microsoft.Windows.Computer']/NetbiosComputerName$"))
Call oInst.AddProperty("$MPElement[Name='Microsoft.Dynamics.AX.Management.Pack.DynamicsServer']/DynamicsEventSourceAttribute$", "Dynamics Server ")
Call oDiscoveryData.AddInstance(oInst)
'Discovery Services
For Each strInstanceId In arrValueNames
Dim strInstanceName, strDatabase, strDBServer, strPort, strDBServerMachineName, strSessionStartDate, strIsBatchServer, intMaxSessions, strSSCID, strServiceName
Dim strInstanceConfigKeyPath
Dim strDBServerType
Dim strOracleUseTNS, strOracleTNSName, strOraclePort, strOracleSchema
Dim strSchema
Dim strAOSExePath, strAOSExeVersion, objFSO
' getting data from DB
Dim cnADOConnection, strConnectionString, strSQLCustomers, ServerDbId, strAosServerPort, intSessionStatus
Set cnADOConnection = CreateObject("ADODB.Connection")
cnADOConnection.ConnectionTimeout = 30
If strDBServerType = SQLSERVERDISPLAY Then
cnADOConnection.Provider = "sqloledb"
strConnectionString = "Server=" & strDBServer & ";Database=" & strDatabase & ";Trusted_Connection=yes"
Else
If strOracleUseTNS = "1" Then
strConnectionString = "Provider=MSDAORA;Data Source=" & strOracleTNSName & ";Persist Security Info=False;OSAuthent=1;"
Else
strConnectionString = "Provider=MSDAORA;Data Source=(DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = " & strDBServer & ")(PORT = " & strOraclePort & ")))(CONNECT_DATA = (SERVICE_NAME = " & strDatabase & ")));Persist Security Info=False;OSAuthent=1;"
End If
End If
Set recordset = CreateObject("ADODB.Recordset")
recordset.ActiveConnection = cnADOConnection
If strDBServerType = SQLSERVERDISPLAY Then
'Get Machine Name of SQL Server
recordset.Source = "select SERVERPROPERTY ('MachineName')"
Else
recordset.Source = "SELECT sys_context('USERENV', 'SERVER_HOST') FROM dual"
End If
Dim strAOSIDName, strAOSServerID, strAOSBatchID
strAOSIDName = Ucase("$Target/Host/Property[Type='Windows!Microsoft.Windows.Computer']/NetbiosComputerName$") & "@" & strPort
recordset.Source = "select " & strSchema & "SYSSERVERSESSIONS.AOSID, " & _
strSchema & "SYSSERVERSESSIONS.SERVERID " & _
"FROM " & strSchema & "SYSSERVERSESSIONS " & _
"WHERE " & strSchema & "SYSSERVERSESSIONS.AOSID = '" & strAOSIDName & "'"
Err.Clear
recordset.Open
If Err.number = 0 Then
strAOSServerID = recordset(1)
End If
recordset.Close
strAOSBatchID = CStr(strInstanceId) & "@" & Ucase("$Target/Host/Property[Type='Windows!Microsoft.Windows.Computer']/NetbiosComputerName$")
' Collect Batch Task info
recordset.Source = "SELECT " & strSchema & "BATCH.CAPTION, " & _
strSchema & "BATCH.SERVERID, " & _
strSchema & "BATCH.EXECUTEDBY, " & _
strSchema & "BATCH.COMPANY, " & _
strSchema & "BATCH.STATUS, " & _
strSchema & "BATCH.STARTDATETIME, " & _
strSchema & "BATCH.RECID, " & _
strSchema & "BATCH.RUNTYPE, " & _
strSchema & "BATCH.BATCHJOBID, " & _
strSchema & "BATCHJOB.CAPTION " & _
"FROM " & strSchema & "BATCH, " & strSchema & "BATCHJOB " & _
"WHERE " & strSchema & "BATCH.BATCHJOBID = " & strSchema & "BATCHJOB.RECID " & _
"AND " & strSchema & "BATCH.SERVERID = '" & strAOSBatchID & "'" & _
"AND (" & strSchema & "BATCH.STATUS = 0 " & _
"OR " & strSchema & "BATCH.STATUS = 2 " & _
"OR " & strSchema & "BATCH.STATUS = 3 " & _
"OR " & strSchema & "BATCH.STATUS = 7 " & _
"OR " & strSchema & "BATCH.STATUS = 8)"
recordset.Open
If Err.number = 0 Then
Do While Not recordset.EOF
Dim strBatchName, strBatchServerID, strBatchExecutedBy, strBatchCompany, intBatchStatus, strBatchStatus
Dim strBatchJobID, strBatchStartDateTime, strBatchID, intBatchRunType, strBatchRunType, strBatchJobCaption
recordset.Source = "SELECT " & strSchema & "SYSCLIENTSESSIONS.USERID, " & _
strSchema & "SYSCLIENTSESSIONS.CLIENTTYPE, " & _
strSchema & "SYSCLIENTSESSIONS.STATUS, " & _
strSchema & "SYSCLIENTSESSIONS.SID, " & _
strSchema & "SYSCLIENTSESSIONS.LOGINDATETIME, " & _
strSchema & "SYSCLIENTSESSIONS.SESSIONID, " & _
strSchema & "SYSCLIENTSESSIONS.CLIENTCOMPUTER, " & _
strSchema & "USERINFO.NAME, " & _
strSchema & "USERINFO.RECID, " & _
strSchema & "USERINFO.NETWORKDOMAIN, " & _
strSchema & "USERINFO.NETWORKALIAS, " & _
strSchema & "BATCHJOB.CAPTION, " & _
strSchema & "BATCHJOB.STATUS, " & _
strSchema & "BATCHJOB.ORIGSTARTDATETIME, " & _
strSchema & "BATCHJOB.STARTDATETIME, " & _
strSchema & "BATCHJOB.CREATEDBY, " & _
strSchema & "BATCHJOB.COMPANY, " & _
strSchema & "BATCHJOB.RECID " & _
"FROM " & strSchema & "SYSCLIENTSESSIONS INNER JOIN " & strSchema & "USERINFO " & _
"ON " & strSchema & "SYSCLIENTSESSIONS.USERID = " & strSchema & "USERINFO.ID " & _
"LEFT OUTER JOIN " & strSchema & "BATCHJOB " & _
"ON " & strSchema & "USERINFO.ID = " & strSchema & "BATCHJOB.CREATEDBY " & _
"WHERE " & strSchema & "SYSCLIENTSESSIONS.STATUS != 0" & _
" AND " & strSchema & "SYSCLIENTSESSIONS.SERVERID = " & strAOSServerID & _
" ORDER BY " & strSchema & "SYSCLIENTSESSIONS.USERID, " & strSchema & "SYSCLIENTSESSIONS.SESSIONID"
Dim intActiveSessionCount
intActiveSessionCount = 0
Err.Clear
recordset.Open
If Err.number = 0 Then
Dim intLastUserId
Dim intCurSession
intLastUserId = ""
intCurSession = -1
' Get rid of the weird 0x02 bug
If strDBServerType <> "odbc" Then
strTemp = chr(2)
If strUserName = strTemp Then
strUserName = ""
End If
End If
If (len(intLastUserId) = 0) Or (intLastUserId <> strUserId) or ((intLastUserId = strUserId) and (Cint(strSessionId) <> intCurSession)) Then
If (len(intLastUserId) = 0) Or (intLastUserId <> strUserId) Then
intLastUserId = strUserId
'Now we scan for all the batch jobs made by this user; they will all have the same session id
Dim intSession
intSession = intCurSession
Do While (Not recordset.EOF) AND (intCurSession = intSession)
Dim strJobName, strJobStatus, intJobStatus, strJobStartDT, strJobCreateBy, strJobId, strJobActDT, strCompany
' Return data to the datasource.
Call oAPI.Return(oDiscoveryData)
Sub FormatDate(strDT)
If (strDT = "1/1/1900") Then
strDT = "1/1/1900 12:00:00 AM"
End If
End Sub
Sub GetSessionStatusString(intSessionStatus, strSessionStatus)
'0 - Dead
'1 - Alive
'2 - Draining
If intSessionStatus = 0 Then
strSessionStatus = "Dead"
Else If intSessionStatus = 1 Then
strSessionStatus = "Alive"
Else If intSessionStatus = 2 Then
strSessionStatus = "Draining"
Else
strSessionStatus = intSessionStatus
End If
End If
End If
End Sub
Sub GetClientSessionStatusString(intSessionStatus, strSessionStatus)
' 0 - Inactive
' 1 - Running
' 2 - Ending - Waiting for AOS
' 3 - Ending – Blocked
If intSessionStatus = 0 Then
strSessionStatus = "Inactive"
Else If intSessionStatus = 1 Then
strSessionStatus = "Running"
Else If intSessionStatus = 2 Then
strSessionStatus = "Ending - Waiting for AOS"
Else If intSessionStatus = 2 Then
strSessionStatus = "Ending – Blocked"
End If
End If
End If
End If
End Sub
Sub GetClientTypeString(intSessionType, strSessionType)
' 0 - User
' 1 - Business Connector
' 3 - Worker
' 5 - Web User
Select Case intSessionType
case 0
strSessionType = "User"
case 1
strSessionType = "Business Connector"
case 3
strSessionType = "Worker"
case 5
strSessionType = "Web User"
End Select
End Sub
Sub GetBatchStatusString(intBatchStatus, strBatchStatus)
Select Case intBatchStatus
Case 0
strBatchStatus = "Hold"
Case 1
strBatchStatus = "Waiting"
Case 2
strBatchStatus = "Executing"
Case 3
strBatchStatus = "Error"
Case 4
strBatchStatus = "Finished"
Case 5
strBatchStatus = "Ready"
Case 6
strBatchStatus = "NotRun"
Case 7
strBatchStatus = "Cancelling"
Case 8
strBatchStatus = "Canceled"
End Select
End Sub
Sub GetRunTypeString(intRunType, strRunType)
' 0 - Client
' 1 - Server
If intRunType = 1 Then
strRunType = "Server"
Else
strRunType = "Client"
End If
End Sub
Sub WriteLog(FileName, strMSG)
Dim FileSystemObject, Text, FolderName
Set FileSystemObject = CreateObject("Scripting.FileSystemObject")
FolderName = "SCOM LOG"
' If Not FileSystemObject.FolderExists("c:\" & FolderName) Then
' Set Fldr = FileSystemObject.CreateFolder ("c:\" & FolderName)
' End If
' Set Text = FileSystemObject.OpenTextFile("c:\" & FolderName & "\" & FileName, 8, True)
' Text.WriteLine strMSG
' Text.Close
End Sub
Sub GetLogFileName(FileName)
FileName = Day(Now) & "." & Hour(Now) & "." & Minute(Now) & "." & Second(Now)& ".txt"
End Sub </Script></ScriptBody>
<TimeoutSeconds>240</TimeoutSeconds>
</DataSource>
</Discovery>