Odnajdź usługę MSDTC

Microsoft.MSDTC.10.0.DataSource.ServiceDiscovery (DataSourceModuleType)

Element properties:

TypeDataSourceModuleType
IsolationAny
AccessibilityInternal
RunAsDefault
OutputTypeSystem.Discovery.Data

Member Modules:

ID Module Type TypeId RunAs 
Scheduler DataSource System.Discovery.Scheduler Default
RegistryProbe ProbeAction Microsoft.Windows.RegistryProbe Default
ScriptProbe ProbeAction Microsoft.Windows.ScriptDiscoveryProbe Default
WMIProbe ProbeAction Microsoft.Windows.WmiProbe Default
Filter ConditionDetection System.ExpressionFilter Default
Filter2 ConditionDetection System.ExpressionFilter Default

Overrideable Parameters:

IDParameterTypeSelectorDisplay NameDescription
TimeoutSecondsint$Config/TimeoutSeconds$Limit czasu skryptu (sekundy)Limit czasu skryptu (sekundy)
LogDetailbool$Config/LogDetail$Szczegóły dziennikaSzczegóły dziennika
IntervalSecondsint$Config/IntervalSeconds$Interwał (w sekundach)Interwał (w sekundach)

Source Code:

<DataSourceModuleType ID="Microsoft.MSDTC.10.0.DataSource.ServiceDiscovery" Accessibility="Internal" Batching="false">
<Configuration>
<xsd:element xmlns:xsd="http://www.w3.org/2001/XMLSchema" minOccurs="1" name="IntervalSeconds" type="xsd:integer"/>
<xsd:element xmlns:xsd="http://www.w3.org/2001/XMLSchema" minOccurs="1" name="ComputerName" type="xsd:string"/>
<xsd:element xmlns:xsd="http://www.w3.org/2001/XMLSchema" minOccurs="1" name="IsVirtual" type="xsd:boolean"/>
<xsd:element xmlns:xsd="http://www.w3.org/2001/XMLSchema" minOccurs="1" name="LogDetail" type="xsd:boolean"/>
<xsd:element xmlns:xsd="http://www.w3.org/2001/XMLSchema" minOccurs="1" name="TimeoutSeconds" type="xsd:integer"/>
<xsd:element xmlns:xsd="http://www.w3.org/2001/XMLSchema" minOccurs="1" name="SourceId" type="xsd:string"/>
</Configuration>
<OverrideableParameters>
<OverrideableParameter ID="IntervalSeconds" Selector="$Config/IntervalSeconds$" ParameterType="int"/>
<OverrideableParameter ID="LogDetail" Selector="$Config/LogDetail$" ParameterType="bool"/>
<OverrideableParameter ID="TimeoutSeconds" Selector="$Config/TimeoutSeconds$" ParameterType="int"/>
</OverrideableParameters>
<ModuleImplementation Isolation="Any">
<Composite>
<MemberModules>
<DataSource ID="Scheduler" TypeID="System!System.Discovery.Scheduler">
<Scheduler>
<SimpleReccuringSchedule>
<Interval Unit="Seconds">$Config/IntervalSeconds$</Interval>
</SimpleReccuringSchedule>
<ExcludeDates/>
</Scheduler>
</DataSource>
<ProbeAction ID="ScriptProbe" TypeID="Windows!Microsoft.Windows.ScriptDiscoveryProbe">
<ScriptName>DiscoverMSDTCServer.vbs</ScriptName>
<Arguments>"$Config/SourceId$" $Target/Id$ $Config/ComputerName$ "$Config/IsVirtual$" "$Config/LogDetail$"</Arguments>
<ScriptBody><Script>option explicit
SetLocale("en-us")

Const SCRIPT_NAME = "DiscoverMSDTCServer.vbs"

Const EVENT_LEVEL_ERROR = 1
Const EVENT_LEVEL_WARNING = 2
Const EVENT_LEVEL_INFO = 4

Const EVENTNO_SCRIPT_STARTED = 14101
Const EVENTNO_SCRIPT_ENDED = 14102
Const EVENTNO_SERVER_FOUND = 14110
Const EVENTNO_SERVER_FOUND_WRONGVERSION = 14111
Const EVENTNO_SERVER_SUBMITTED = 14112
Const EVENTNO_DISCDATA_SUBMITTED = 14113
Const EVENTNO_NOSERVER_FOUND = 14119
Const EVENTNO_ERROR_WMI = 14181
Const EVENTNO_EMPTY = 14182

Const HKEY_CURRENT_USER = &amp;H80000001
Const HKEY_LOCAL_MACHINE = &amp;H80000002

Dim aux1
Dim oAPI, oArgs, oDiscoveryData, sMessage
Dim SourceId, ManagedEntityId, sComputer, bIsVirtual, bLogDetail
Dim oWMI, oWMIcluster, cServices, cClusterResources, oClusterResource
Dim sResourceName, wshNetwork

aux1 = 0
Set oAPI = CreateObject("MOM.ScriptAPI")

Set oArgs = WScript.Arguments
If oArgs.Count &lt; 4 Then Call ShowUsage()
SourceId = oArgs(0)
ManagedEntityId = oArgs(1)
sComputer = oArgs(2)
If Len(oArgs(3)) &gt; 0 Then
bIsVirtual = CBool(oArgs(3))
Else
bIsVirtual = False
End If

If Len(oArgs(4)) &gt; 0 Then
bLogDetail = CBool(oArgs(4))
Else
bLogDetail = False
End If

Set wshNetwork = CreateObject("Wscript.Network")

sMessage = "Discovery started with following parameters: " &amp; VbCrLf &amp; _
"Source ID: " &amp; SourceId &amp; VbCrLf &amp; _
"Managed Entity ID: " &amp; ManagedEntityId &amp; VbCrLf &amp; _
"Computer: " &amp; sComputer &amp; VbCrLf &amp; _
"Network: " &amp; wshNetwork.ComputerName &amp; VbCrLf &amp; _
"Discover bIsVirtual : " &amp; bIsVirtual &amp; VbCrLf &amp; _
"User credentials: " &amp; wshNetwork.UserDomain &amp; "\" &amp; wshNetwork.UserName

Call LogDetail(EVENTNO_SCRIPT_STARTED,sMessage)

Set oDiscoveryData = oAPI.CreateDiscoveryData(0, SourceId, ManagedEntityId)

On Error Resume Next
Set oWMI = GetObject("winmgmts:\\" &amp; sComputer &amp; "\root\cimv2")


Set cServices = oWMI.ExecQuery("select * from win32_service where name = 'MSDTC'")
If Err &lt;&gt; 0 Then Call ThrowScriptError(EVENTNO_ERROR_WMI,EVENT_LEVEL_ERROR,"Error attempting to locate MSDTC service through WMI.",True)
On Error GoTo 0

If bIsVirtual = True Then
Call LogDetail(EVENTNO_EMPTY, "Start clusted discovery")

Set oWMIcluster = GetObject("winmgmts:\\" &amp; sComputer &amp; "\root\mscluster")


Set cClusterResources = oWMIcluster.ExecQuery("select * from MSCluster_Resource where type like 'Distributed Transaction Coordinator%'")
If Err &lt;&gt; 0 Then Call ThrowScriptError(EVENTNO_ERROR_WMI,EVENT_LEVEL_ERROR,"Error attempting to locate MSDTC service through WMI.",True)
On Error GoTo 0

'Check for clustered instances
For Each oClusterResource In cClusterResources
Dim roleName
Dim cResources, oResource, sNameResource, cGroups, oGroup

Set cGroups = oWMIcluster.ExecQuery("ASSOCIATORS OF {mscluster_Resource='" &amp; oClusterResource.Name &amp; "'} where AssocClass = MSCluster_ResourceGroupToResource Role=PartComponent")
If Err &lt;&gt; 0 Then Call ThrowScriptError(EVENTNO_ERROR_WMI,EVENT_LEVEL_ERROR,"Error attempting to locate MSDTC service through WMI.",True)
On Error GoTo 0
For Each oGroup In cGroups
roleName = oGroup.Name
Next

aux1 = aux1 + 1

Call LogDetail(EVENTNO_EMPTY, oClusterResource.Name)

Call LogDetail(EVENTNO_SERVER_FOUND,"Clustered MSDTC role " &amp; oClusterResource.Name &amp; " found on " &amp; sComputer &amp; " .")
Call CreateServiceInstance("MSDTCClusteredRole",oClusterResource.Name, roleName)
Next

If aux1 = 0 Then
Call LogDetail(EVENTNO_EMPTY,"No clustered MSDTC service found!")
End If

Else
'Check for regular instances
If cServices.Count &gt; 0 Then
Call LogDetail(EVENTNO_SERVER_FOUND,"Local MSDTC instance found on " &amp; sComputer &amp; " .")
Call CreateServiceInstance("MSDTCService","MSDTC", "MSDTC")
else
Call LogDetail(EVENTNO_EMPTY,"No local MSDTC service found!")
End If
End If

oAPI.Return(oDiscoveryData)
Call LogDetail(EVENTNO_DISCDATA_SUBMITTED,"Discovery data submitted.")
Call LogDetail(EVENTNO_SCRIPT_ENDED,"MSDTC Server Discovery script ended.")

'Create discovery data
Sub CreateServiceInstance(ServiceType,Name,DisplayName)
Dim oServices, oInstance
Select Case (ServiceType)
Case "MSDTCService"
Set oInstance = oDiscoveryData.CreateClassInstance("$MPElement[Name='Microsoft.MSDTC.10.0.Servers']$")
Call oInstance.AddProperty("$MPElement[Name='Microsoft.MSDTC.10.0.ServerRole']/ServiceName$", Name)
Case "MSDTCClusteredRole"
Set oInstance = oDiscoveryData.CreateClassInstance("$MPElement[Name='Microsoft.MSDTC.10.0.ClusteredRoles']$")
Call oInstance.AddProperty("$MPElement[Name='Microsoft.MSDTC.10.0.ClusteredRoles']/RoleName$", Name)
End Select
Call oInstance.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.Computer']/PrincipalName$", sComputer)
Call oInstance.AddProperty("$MPElement[Name='System!System.Entity']/DisplayName$", DisplayName)
Call oDiscoveryData.AddInstance(oInstance)
End Sub

'Log event information
Sub LogDetail(EventNo,Message)
Message = VbCrLf &amp; "Calling MP Element ID: $MPElement$" &amp; vbcrlf &amp; Message
If bLogDetail = True Then
Call oAPI.LogScriptEvent(SCRIPT_NAME,EventNo,EVENT_LEVEL_INFO,Message)
End If
End Sub

'Log event and quit the script if Abort is set to true
Sub ThrowScriptError(EventNo,Severity,Message,Abort)
Message = VbCrLf &amp; Message
Call oAPI.LogScriptEvent(SCRIPT_NAME,EventNo,Severity,Message)
If Abort = True Then WScript.Quit
End Sub

'Display usage information
Sub ShowUsage
WScript.Echo "Usage: "
WScript.Echo "cscript DiscoverMSDTCServer.vbs &lt;CallingRuleGUID&gt; &lt;TargetEntityGUID&gt; &lt;Computer&gt; &lt;IsVirtual&gt; &lt;LogDetail&gt;"
WScript.Echo
WScript.Echo "Example:"
WScript.Echo "cscript DiscoverMSDTCServer.vbs {b3e9befe-173b-78a2-3e41-e19ecb58d9d5} {2fa43439-afc4-cc64-9b3a-9642ec898c1c} srv1.contoso.com false false"
WScript.Quit
End Sub
</Script></ScriptBody>
<TimeoutSeconds>$Config/TimeoutSeconds$</TimeoutSeconds>
</ProbeAction>
<ProbeAction ID="RegistryProbe" TypeID="Windows!Microsoft.Windows.RegistryProbe">
<ComputerName>$Target/Property[Type='Windows!Microsoft.Windows.Computer']/NetworkName$</ComputerName>
<RegistryAttributeDefinitions>
<RegistryAttributeDefinition>
<AttributeName>WindowsCurrentVersion</AttributeName>
<Path>SOFTWARE\Microsoft\Windows NT\CurrentVersion\CurrentVersion</Path>
<PathType>1</PathType>
<AttributeType>1</AttributeType>
</RegistryAttributeDefinition>
</RegistryAttributeDefinitions>
</ProbeAction>
<ProbeAction ID="WMIProbe" TypeID="Windows!Microsoft.Windows.WmiProbe">
<NameSpace>\\$Target/Property[Type='Windows!Microsoft.Windows.Computer']/NetworkName$\root\cimv2</NameSpace>
<Query>select ProductType, Version from Win32_OperatingSystem</Query>
</ProbeAction>
<ConditionDetection ID="Filter" TypeID="System!System.ExpressionFilter">
<Expression>
<SimpleExpression>
<ValueExpression>
<XPathQuery>Values/WindowsCurrentVersion</XPathQuery>
</ValueExpression>
<Operator>Equal</Operator>
<ValueExpression>
<Value>6.3</Value>
</ValueExpression>
</SimpleExpression>
</Expression>
</ConditionDetection>
<ConditionDetection ID="Filter2" TypeID="System!System.ExpressionFilter">
<Expression>
<And>
<Expression>
<SimpleExpression>
<ValueExpression>
<XPathQuery Type="Integer">Property[@Name='ProductType']</XPathQuery>
</ValueExpression>
<Operator>NotEqual</Operator>
<ValueExpression>
<Value Type="Integer">1</Value>
</ValueExpression>
</SimpleExpression>
</Expression>
<Expression>
<RegExExpression>
<ValueExpression>
<XPathQuery>Property[@Name='Version']</XPathQuery>
</ValueExpression>
<Operator>ContainsSubstring</Operator>
<Pattern>10.0.</Pattern>
</RegExExpression>
</Expression>
</And>
</Expression>
</ConditionDetection>
</MemberModules>
<Composition>
<Node ID="ScriptProbe">
<Node ID="Filter2">
<Node ID="WMIProbe">
<Node ID="Filter">
<Node ID="RegistryProbe">
<Node ID="Scheduler"/>
</Node>
</Node>
</Node>
</Node>
</Node>
</Composition>
</Composite>
</ModuleImplementation>
<OutputType>System!System.Discovery.Data</OutputType>
</DataSourceModuleType>