Const DebugScript = False
Dim FileSystemObject
Set FileSystemObject = CreateObject("Scripting.FileSystemObject")
Dim ParseOIDs, OidLookup, descLookup, DescrMap
'Arguments
' args(0) = ipaddress
' args(1) = version
' .
' args(N) args(N+1) - oid value
Dim oArgs(), oAPI, oBag, logMessage, myOid, tempSplit, drsCAMessage, drsCASubSystem, tOid, tOidValue
Dim logLevel : logLevel = 0
GetArguments WScript.Arguments, oArgs
Dim myIP: myIP = Trim(oArgs(0))
Dim trapver: trapver = Trim(oArgs(1))
Dim serviceTag: serviceTag = Trim(oArgs(2))
Dim status: status = Trim(oArgs(3))
Dim severity: severity = Trim(oArgs(4))
CreateLog myIP
InitLookups
Set oAPI = CreateMOMScriptAPI
Set oBag = CreatePropertyBag(oAPI)
Dim cnt : cnt = 0
For cnt = 5 To UBound(oArgs) step 2
tOid = Trim(Replace(oArgs(cnt),"\n",""))
tOidValue = oArgs(cnt+1)
If(Strcomp(tOid, "") <> 0) Then
PropertyBagPopulator oBag, tOid, tOidValue
end If
Next
'Add Status
oBagAddValue oBag, "Status", status
'Add Severity
oBagAddValue oBag, "Severity", severity
'Add SNMP Version to property bag
oBagAddValue oBag, "Version", trapver
ReturnData oAPI, oBag
set oAPI = nothing
'ProperyBagPopulator
Function PropertyBagPopulator(ByRef oBag, oid, val)
If descLookup.Exists(oid) then
oBagAddValue oBag, descLookup.Item(oid), val
OidLookup.Add oid, val
Else
Dim i
Dim tstr: tstr = ""
Dim tSplit: tSplit = Split(oid,".")
for i=1 to Ubound(tSplit)-1
tstr = tstr+"."+tSplit(i)
next
If descLookup.Exists(tstr) then
oBagAddValue oBag, descLookup.Item(tstr), val
else
oBagAddValue oBag, tstr, val
end if
OidLookup.Add tstr, val
End If
End Function
Function InitLookups
Set OidLookup = CreateObject("Scripting.Dictionary")
Function GetArguments(ByRef arglist, ByRef argArray)
Dim ArgumentIterator, ArgumentCounter, ArgumentBuffer , ArgumentTemp
ArgumentIterator = 0: ArgumentCounter = 0
Do
ArgumentTemp = arglist(ArgumentIterator)
' #*# is used as a delimiter between each of the arguments.
' ### is used as a token to show end of argument list.
if (StrComp(ArgumentTemp,"#*#") = 0) Then
ArgumentCounter = ArgumentCounter + 1
End if
' Going to the next argument delimited by space
ArgumentIterator = ArgumentIterator + 1
Loop while Not(StrComp(ArgumentTemp,"###") = 0)
Redim argArray(ArgumentCounter)
ArgumentIterator = 0: ArgumentCounter = 0
ArgumentBuffer = "Not Available"
Do
' iterate through the arguments passed to the VB Script
ArgumentTemp = arglist(ArgumentIterator)
' #*# is used as a delimiter between each of the arguments.
' ### is used as a token to show end of argument list.
if (StrComp(ArgumentTemp,"#*#") = 0) Or (StrComp(ArgumentTemp,"###") = 0) Then
argArray(ArgumentCounter) = ArgumentBuffer
' Going to the next actual argument delimited by #*#
ArgumentCounter = ArgumentCounter + 1
ArgumentBuffer = "Not Available"
elseif (StrComp(ArgumentBuffer,"Not Available") = 0) Then
ArgumentBuffer = ArgumentTemp
else
ArgumentBuffer = ArgumentBuffer & " " & ArgumentTemp
End if
' Going to the next argument delimited by space
ArgumentIterator = ArgumentIterator + 1
Loop while Not(StrComp(ArgumentTemp,"###") = 0)
End Function
' Begin Logheader
Dim objLogTextFile
Function CreateLog(myIP)
If logLevel <> 0 Then
Dim fileSize, strOutFile, newFilename, dateStr, datesuffix, timesuffix, subStrLoc, hyphenIP
Const ForAppending = 8
Const ForWriting = 2
Const MaxFileSize = 524288 'File Size is limited to 512 KB
Dim strFileName
dim wsShell : Set wsShell = Createobject("WScript.Shell")
dim wshSysEnv : Set wshSysEnv = wsShell.Environment
dim tFolder : tFolder = wshSysEnv("TEMP")
dim mdmpFolder : mdmpFolder = "drac_Traps_Logs"
dim wshPrcEnv : Set wshPrcEnv = wsShell.Environment("Process")
tFolder = Replace(tFolder, "%SystemRoot%", wshPrcEnv("SYSTEMROOT"), 1, -1, vbTextCompare)
hyphenIP = myIP
If ( InStr(hyphenIP,".") > 0 ) Then
hyphenIP = Replace(hyphenIP,".","_")
End If
If ( InStr(hyphenIP,":") > 0 ) Then
hyphenIP = Replace(hyphenIP,":","_")
End If
strFileName = "SNMPTraps" & hyphenIP & ".log"
If Not FileSystemObject.FolderExists(tFolder) Then
FileSystemObject.CreateFolder(tFolder)
End If
If Not FileSystemObject.FolderExists(tFolder & "\" & mdmpFolder) Then
FileSystemObject.CreateFolder(tFolder & "\" & mdmpFolder)
End If
strOutFile = tFolder & "\"& mdmpFolder & "\" & strFileName
DebugOut "Logging to " & strOutFile
If Not FileSystemObject.FileExists(strOutFile) Then
Set objLogTextFile = FileSystemObject.CreateTextFile(strOutFile)
objLogTextFile.Close()
End If
fileSize = FileSystemObject.GetFile(strOutFile).Size
If (fileSize > MaxFileSize) Then
dateStr = CDate(Now())
datesuffix = ( Year(dateStr)*100 + Month(dateStr) )*100 + Day(dateStr)
timesuffix = Right((Hour(dateStr)*100+Minute(dateStr))*100+Second(dateStr)+1e7, 6)
subStrLoc = Instr(1, strOutFile,".")
newFilename = Mid(strOutFile,1,(subStrLoc-1))
newFilename = newFilename &"-"& datesuffix &"-"&timesuffix&".log"
DebugOut "MoveFile " & strOutFile & " to " & newFilename
FileSystemObject.MoveFile strOutFile, newFilename
Set objLogTextFile = FileSystemObject.OpentextFile(strOutFile, ForWriting, True)
Else
Set objLogTextFile = FileSystemObject.OpentextFile(strOutFile, ForAppending, True)
End If
Err.Clear
End If
End Function
Sub MOMDebugLog (ByVal debugLevel, ByVal Message)
DebugOut Message
If (debugLevel > 0) and (debugLevel <= logLevel) Then
objLogTextFile.WriteLine(Now() & " ---- " & Message)
Err.Clear
End If
End Sub
' End of Logheader
'********** SCOM Functions
Function CreateMOMScriptAPI
If DebugScript = False Then
Set CreateMOMScriptAPI = CreateObject("MOM.ScriptAPI")
Else
Set CreateMOMScriptAPI = New RegExp
End If
logMessage = "INFO: New MOM.ScriptAPI"
MOMDebugLog 1, logMessage
End Function
Function CreatePropertyBag(ByRef oAPI)
If DebugScript = False Then
set CreatePropertyBag = oAPI.CreatePropertyBag()
Else
Set CreatePropertyBag = New RegExp
End If
logMessage = "INFO: New Property Bag"
MOMDebugLog 1, logMessage
End Function
Function ReturnData (ByRef oAPI, ByRef oData)
If DebugScript = False Then
Call oAPI.Return(oData)
End If
logMessage = "INFO: Returning Data to SCOM"
MOMDebugLog 1, logMessage
End Function
Sub oBagAddValue(ByRef oBag, prop, val)
If DebugScript = False Then
Call oBag.AddValue(prop, val)
End If
logMessage = "INFO: Set " & prop & " = " & val
MOMDebugLog 1, logMessage
End Sub
Sub oAPIAddItem(ByRef oAPI, ByRef oBag)
If DebugScript = False Then
Call oAPI.AddItem(oBag)
End If
logMessage = "INFO: Add Instance to Property Bag"
MOMDebugLog 1, logMessage
End Sub
Function DebugOut(message)
If DebugScript Then WScript.Echo message
End Function </Script></ScriptBody>
<TimeoutSeconds>300</TimeoutSeconds>
</ProbeAction>
<ConditionDetection ID="Mapper" TypeID="System!System.Event.GenericDataMapper">
<EventOriginId>$Config/EventOriginId$</EventOriginId>
<PublisherId>$Config/PublisherId$</PublisherId>
<PublisherName>$Config/PublisherName$</PublisherName>
<Channel>$Config/Channel$</Channel>
<LoggingComputer>$Config/LoggingComputer$</LoggingComputer>
<EventNumber>$Config/EventNumber$</EventNumber>
<EventCategory>$Config/EventCategory$</EventCategory>
<EventLevel>$Config/EventLevel$</EventLevel>
<UserName>$Config/UserName$</UserName>
<Params>$Config/Params$</Params>
</ConditionDetection>
</MemberModules>
<Composition>
<Node ID="Mapper">
<Node ID="PA">
<Node ID="DS"/>
</Node>
</Node>
</Composition>
</Composite>
</ModuleImplementation>
<OutputType>System!System.Event.Data</OutputType>
</DataSourceModuleType>