Dim oApi, oArgs, wshNetwork, sUser, sDomain, sMessage
Dim SourceId, ManagedEntityId, sComputer, bIsVirtual, oServiceName, bLogDetail
Dim sregRoot, oDiscoveryData, oServerInstance
Dim sMessageFilesFolder, sMessageLoggerFolder, stransactionLoggerFolder
Set oAPI = CreateObject("MOM.ScriptAPI")
Set oArgs = WScript.Arguments
If oArgs.Count < 6 Then Call ShowUsage()
SourceId = oArgs(0)
ManagedEntityId = oArgs(1)
sComputer = oArgs(2)
If Len(oArgs(3)) > 0 Then
bIsVirtual = CBool(oArgs(3))
Else
bIsVirtual = False
End If
oServiceName = oArgs(4)
bLogDetail = CBool(oArgs(5))
Set wshNetwork = CreateObject("Wscript.Network")
sUser = wshNetwork.UserName
sDomain = wshNetwork.UserDomain
sMessage = "MSMQ Disk Relationship discovery started with following parameters: " & VbCrLf & _
"Source ID: " & SourceId & VbCrLf & _
"Managed Entity ID: " & ManagedEntityId & VbCrLf & _
"Computer: " & sComputer & VbCrLf & _
"Network: " & wshNetwork.ComputerName & VbCrLf & _
"IsVirtual: " & bIsVirtual & VbCrLf & _
"Service Name :" & oServiceName & VbCrLf & _
"User credentials: " & sDomain & "\" & sUser
Call LogDetail(EVENTNO_SCRIPT_STARTED, sMessage)
If bIsVirtual = True Then
sRegRoot = "SOFTWARE\Microsoft\MSMQ\Clustered QMs\" & oServiceName
Else
sRegRoot = "SOFTWARE\Microsoft\MSMQ"
End If
Set oDiscoveryData = oAPI.CreateDiscoveryData(0, SourceId, ManagedEntityId)
Set oServerInstance = oDiscoveryData.CreateClassInstance("$MPElement[Name='Microsoft.MSMQ.2008R2.Servers']$")
Call oServerInstance.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.Computer']/PrincipalName$", sComputer)
sMessageFilesFolder = GetRegStringValue(sComputer,sRegRoot & "\Parameters","StorePersistentPath")
sMessageLoggerFolder = GetRegStringValue(sComputer,sRegRoot & "\Parameters","StoreLogPath")
sTransactionLoggerFolder = GetRegStringValue(sComputer,sRegRoot & "\Parameters","StoreXactLogPath")
oAPI.Return(oDiscoveryData)
Call LogDetail(EVENTNO_DISCDATA_SUBMITTED,"Discovery data submitted.")
Call LogDetail(EVENTNO_SCRIPT_ENDED, "Discover MSMQ Disk Relationship ended.")
Sub AddDiskRelationship(Path)
Dim sDrive, WMI, cDrives, oDrive, oDisk, oRelationship
sDrive = Left(Path,2)
If Right(sDrive,1) = ":" Then
Set WMI = GetObject("winmgmts:\\" & sComputer & "\root\cimv2")
Set cDrives = WMI.ExecQuery("select * from win32_logicaldisk where caption = '" & sDrive & "'")
For Each oDrive In cDrives
Set oDisk = oDiscoveryData.CreateClassInstance("$MPElement[Name='Server2K8!Microsoft.Windows.Server.2008.LogicalDisk']$")
Call oDisk.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.Computer']/PrincipalName$", sComputer)
Call oDisk.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.LogicalDevice']/DeviceID$", sDrive)
Next
Set oRelationship = oDiscoveryData.CreateRelationshipInstance("$MPElement[Name='Microsoft.MSMQ.2008R2.Relationship.ServerContainsLogicalDisk']$")
oRelationship.Source = oServerInstance
oRelationship.Target = oDisk
Call oDiscoveryData.AddInstance(oRelationship)
End If
End Sub
Function GetRegStringValue(Computer,RegKeyPath,RegValueName)
Dim oReg, Value
Set oReg = GetObject("winmgmts:\\" & Computer & "\root\default:StdRegProv")
oReg.GetStringValue HKEY_LOCAL_MACHINE,RegKeyPath,RegValueName,Value
GetRegStringValue = Value
End Function
Sub LogDetail(EventNo,Message)
Message = VbCrLf & "Calling MP Element ID: $MPElement$" & vbcrlf & Message
If bLogDetail = True Then
Call oAPI.LogScriptEvent(SCRIPT_NAME,EventNo,EVENT_LEVEL_INFO,Message)
End If
End Sub
Sub ThrowScriptError(EventNo,Severity,Message,Abort)
Message = VbCrLf & Message
Call oAPI.LogScriptEvent(SCRIPT_NAME,EventNo,Severity,Message)
If Abort = True Then WScript.Quit