Replicated Folder Discovery (Windows Server 2008 R2)

Microsoft.Windows.FileServer.DFSR.2008R2.ReplicatedFolderDiscovery (Discovery)

This object discovers replicated folders hosted on servers running Windows Server 2008 R2.

Knowledge Base article:

Summary

This object discovers replicated folders hosted on servers running Windows Server 2008 R2. This discovery rule queries the DFS Replication WMI class DfsrReplicatedFolderInfo to discover replicated folders and properties such as the following:

Configuration

Users with Author or Administrator permissions in Operations Manager can use overrides to change the following parameters:

Additional

Element properties:

TargetMicrosoft.Windows.FileServer.DFSR.2008R2.Service
EnabledTrue
Frequency14400
RemotableFalse

Object Discovery Details:

Discovered Classes and their attribuets:
Discovered relationships and their attribuets:

Member Modules:

ID Module Type TypeId RunAs 
Microsoft.Windows.TimedScript.DiscoveryProvider DataSource Microsoft.Windows.TimedScript.DiscoveryProvider Microsoft.Windows.FileServer.DFSR.MonitoringAccount

Source Code:

<Discovery ID="Microsoft.Windows.FileServer.DFSR.2008R2.ReplicatedFolderDiscovery" Enabled="true" Target="Microsoft.Windows.FileServer.DFSR.2008R2.Service" ConfirmDelivery="false" Remotable="true" Priority="Normal">
<Category>Discovery</Category>
<DiscoveryTypes>
<DiscoveryClass TypeID="DFSRLib!Microsoft.Windows.FileServer.DFSR.ReplicationGroupMember">
<Property TypeID="DFSRLib!Microsoft.Windows.FileServer.DFSR.ReplicationGroupMember" PropertyID="RGName"/>
<Property TypeID="DFSRLib!Microsoft.Windows.FileServer.DFSR.ReplicationGroupMember" PropertyID="MemberName"/>
<Property TypeID="DFSRLib!Microsoft.Windows.FileServer.DFSR.ReplicationGroupMember" PropertyID="ReplicationGroupGUID"/>
<Property TypeID="DFSRLib!Microsoft.Windows.FileServer.DFSR.ReplicationGroupMember" PropertyID="MemberGUID"/>
<Property TypeID="System!System.Entity" PropertyID="DisplayName"/>
<Property TypeID="DFSRLib!Microsoft.Windows.FileServer.DFSR.ReplicationGroupMember" PropertyID="IsClustered"/>
<Property TypeID="DFSRLib!Microsoft.Windows.FileServer.DFSR.ReplicationGroupMember" PropertyID="ClusterGroupName"/>
</DiscoveryClass>
<DiscoveryClass TypeID="Microsoft.Windows.FileServer.DFSR.2008R2.ClusteredReplicatedFolder">
<Property TypeID="DFSRLib!Microsoft.Windows.FileServer.DFSR.ReplicatedFolderExtension" PropertyID="ReplicatedFolderGUID"/>
<Property TypeID="DFSRLib!Microsoft.Windows.FileServer.DFSR.ReplicatedFolderExtension" PropertyID="RootPath"/>
<Property TypeID="DFSRLib!Microsoft.Windows.FileServer.DFSR.ReplicatedFolderExtension" PropertyID="ReplicationGroupGUID"/>
<Property TypeID="DFSRLib!Microsoft.Windows.FileServer.DFSR.ReplicatedFolderExtension" PropertyID="VolumeGUID"/>
<Property TypeID="System!System.Entity" PropertyID="DisplayName"/>
<Property TypeID="Microsoft.Windows.FileServer.DFSR.2008R2.ClusteredReplicatedFolder" PropertyID="ClusterResourceName"/>
<Property TypeID="Microsoft.Windows.FileServer.DFSR.2008R2.ClusteredReplicatedFolder" PropertyID="ClusterGroupName"/>
<Property TypeID="Microsoft.Windows.FileServer.DFSR.2008R2.ClusteredReplicatedFolder" PropertyID="ClusterResourceState"/>
</DiscoveryClass>
<DiscoveryClass TypeID="Microsoft.Windows.FileServer.DFSR.2008R2.ReadOnlyReplicatedFolder">
<Property TypeID="DFSRLib!Microsoft.Windows.FileServer.DFSR.ReplicatedFolderExtension" PropertyID="ReplicatedFolderGUID"/>
<Property TypeID="DFSRLib!Microsoft.Windows.FileServer.DFSR.ReplicatedFolderExtension" PropertyID="RootPath"/>
<Property TypeID="DFSRLib!Microsoft.Windows.FileServer.DFSR.ReplicatedFolderExtension" PropertyID="ReplicationGroupGUID"/>
<Property TypeID="DFSRLib!Microsoft.Windows.FileServer.DFSR.ReplicatedFolderExtension" PropertyID="VolumeGUID"/>
<Property TypeID="System!System.Entity" PropertyID="DisplayName"/>
</DiscoveryClass>
<DiscoveryClass TypeID="DFSRLib!Microsoft.Windows.FileServer.DFSR.ReplicatedFolder">
<Property TypeID="DFSRLib!Microsoft.Windows.FileServer.DFSR.ReplicatedFolder" PropertyID="RGName"/>
<Property TypeID="DFSRLib!Microsoft.Windows.FileServer.DFSR.ReplicatedFolder" PropertyID="MemberName"/>
<Property TypeID="DFSRLib!Microsoft.Windows.FileServer.DFSR.ReplicatedFolder" PropertyID="Enabled"/>
<Property TypeID="DFSRLib!Microsoft.Windows.FileServer.DFSR.ReplicatedFolder" PropertyID="RootPath"/>
<Property TypeID="DFSRLib!Microsoft.Windows.FileServer.DFSR.ReplicatedFolder" PropertyID="State"/>
<Property TypeID="DFSRLib!Microsoft.Windows.FileServer.DFSR.ReplicatedFolder" PropertyID="StagingPath"/>
<Property TypeID="DFSRLib!Microsoft.Windows.FileServer.DFSR.ReplicatedFolder" PropertyID="StagingSize"/>
<Property TypeID="DFSRLib!Microsoft.Windows.FileServer.DFSR.ReplicatedFolder" PropertyID="ConflictPath"/>
<Property TypeID="DFSRLib!Microsoft.Windows.FileServer.DFSR.ReplicatedFolder" PropertyID="ConflictSize"/>
<Property TypeID="DFSRLib!Microsoft.Windows.FileServer.DFSR.ReplicatedFolder" PropertyID="IsReadOnly"/>
<Property TypeID="DFSRLib!Microsoft.Windows.FileServer.DFSR.ReplicatedFolder" PropertyID="IsClustered"/>
<Property TypeID="DFSRLib!Microsoft.Windows.FileServer.DFSR.ReplicatedFolder" PropertyID="ClusterResourceName"/>
<Property TypeID="DFSRLib!Microsoft.Windows.FileServer.DFSR.ReplicatedFolder" PropertyID="ClusterResourceState"/>
<Property TypeID="DFSRLib!Microsoft.Windows.FileServer.DFSR.ReplicatedFolder" PropertyID="ReplicatedFolderGUID"/>
<Property TypeID="System!System.Entity" PropertyID="DisplayName"/>
<Property TypeID="DFSRLib!Microsoft.Windows.FileServer.DFSR.ReplicatedFolder" PropertyID="ReplicationGroupGUID"/>
<Property TypeID="DFSRLib!Microsoft.Windows.FileServer.DFSR.ReplicatedFolder" PropertyID="VolumeGUID"/>
<Property TypeID="DFSRLib!Microsoft.Windows.FileServer.DFSR.ReplicatedFolder" PropertyID="ClusterGroupName"/>
</DiscoveryClass>
<DiscoveryRelationship TypeID="DFSRLib!Microsoft.Windows.FileServer.DFSR.Service.Contains.ReplicationGroupMembers"/>
<DiscoveryRelationship TypeID="DFSRLib!Microsoft.Windows.FileServer.DFSR.ReplicatedFolder.Contains.ReplicatedFolderExtension"/>
<DiscoveryRelationship TypeID="Microsoft.Windows.FileServer.DFSR.2008R2.ReadOnlyReplicatedFolder.Contains.ReadOnlyFilter"/>
<DiscoveryRelationship TypeID="DFSRLib!Microsoft.Windows.FileServer.DFSR.ReplicationGroupMembers.Contains.ReplicatedFolders"/>
<DiscoveryRelationship TypeID="DFSRLib!Microsoft.Windows.FileServer.DFSR.Volume.Contains.ReplicatedFolder"/>
</DiscoveryTypes>
<DataSource ID="Microsoft.Windows.TimedScript.DiscoveryProvider" RunAs="DFSRLib!Microsoft.Windows.FileServer.DFSR.MonitoringAccount" TypeID="Windows!Microsoft.Windows.TimedScript.DiscoveryProvider">
<IntervalSeconds>14400</IntervalSeconds>
<SyncTime/>
<ScriptName>ReplicatedFolderDiscovery2008R2.vbs</ScriptName>
<Arguments>0 $MPElement$ $Target/Id$ $Target/Host/Property[Type="Windows!Microsoft.Windows.Computer"]/PrincipalName$ $Target/Property[Type="DFSRLib!Microsoft.Windows.FileServer.DFSR.Service"]/IsVirtualNode$</Arguments>
<ScriptBody><Script>Option Explicit
On Error Resume Next

Dim SourceType, SourceID, ManagedEntityId, oArgs, oAPI, sDfsrServerName, ReplicatedFolderInfo, oDfsrServerRole, ReplicationGroupInfo, oReplicationGroupList, ReplicationGroupData
Dim objWMIService, ListOfReplicatedFolders, oDfsrClusterObj, oRelCluster, oDfsrRoObj, oRelRo, oDfsrRoDriverObj, oRelRoDriver, memberClusterGroupName, memberClustered, IsCoreResource
Dim objClusterWMI, oResourceInfoList, oResourceInfo, dfsrClusterResourceName, dfsrClusterResourceState, oClusterGroupList, oClusterGroup, NetworkResourceName

SetLocale("en-us")

Set oAPI = CreateObject("MOM.ScriptAPI")
Set oArgs = WScript.Arguments

if oArgs.Count &lt; 4 Then
call oAPI.LogScriptEvent("ReplicatedFolderDiscovery2008R2.vbs", 100, 1, "Expected 4 arguments. There were only " &amp; oArgs.Count &amp; " arguments. Exiting script.")
Wscript.Quit -1
End If

Dim oDiscData, oReplicatedFolder, stateStr, oRel, oRGMembers, oRFConfig, oRFConfigCollection, oRGMemberCollection, queryRFConfig, oRFVolume, oRelVol

SourceType = oArgs(0)
SourceId = oArgs(1)
ManagedEntityId = oArgs(2)
sDfsrServerName = oArgs(3)

memberClusterGroupName = "N/A"
memberClustered = "False"
IsCoreResource = "False"

if (oArgs.Count = 5) then
memberClustered = oArgs(4)
end if

set oDiscData = oAPI.CreateDiscoveryData(SourceType, SourceId, ManagedEntityId)

Rem Get the server's cluster group name and check if there are any not online disks in that group

if (memberClustered = "True") then

Set objClusterWMI = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" &amp; sDfsrServerName &amp; "\root\mscluster")
if Err.Number &lt;&gt; 0 then
strErr = "Unable to connect to local mscluster WMI provider. Error: 0x" &amp; Hex(Err.Number) &amp; " " &amp; Err.Description
WScript.Echo strErr
Wscript.Quit -1
End If

Set oResourceInfoList = objClusterWMI.ExecQuery ("Select Name, CoreResource from MSCluster_Resource Where PrivateProperties.DnsName='" &amp; Left(sDfsrServerName, InStr(sDfsrServerName, ".")-1) &amp; "'")
if Err.Number &lt;&gt; 0 then
strErr = "Unable to query MSCluster_Resource from local mscluster WMI provider. Error: 0x" &amp; Hex(Err.Number) &amp; " " &amp; Err.Description
WScript.Echo strErr
Wscript.Quit -1
End If

for each oResourceInfo in oResourceInfoList

NetworkResourceName = oResourceInfo.Name
IsCoreResource = oResourceInfo.CoreResource

if IsCoreResource = "False" then

Set oClusterGroupList = objClusterWMI.ExecQuery ("Select GroupComponent from MSCluster_ResourceGroupToResource Where PartComponent='MSCluster_Resource.Name=" &amp; Chr(34) &amp; oResourceInfo.Name &amp; Chr(34) &amp; "'")
if Err.Number &lt;&gt; 0 then
strErr = "Unable to query MSCluster_ResourceGroupToResource from local mscluster WMI provider. Error: 0x" &amp; Hex(Err.Number) &amp; " " &amp; Err.Description
WScript.Echo strErr
Wscript.Quit -1
End If

for each oClusterGroup in oClusterGroupList

memberClusterGroupName = Replace(Right(oClusterGroup.GroupComponent, Len(oClusterGroup.GroupComponent) - InStr(oClusterGroup.GroupComponent, CStr(Chr(34)) )), CStr(Chr(34)), "")

Exit For
Next

End if

Exit For

Next

Rem Check if any of the disk in this cluster group are not online. If so then the data returned by DFSR might not be complete then mark it as snapshot

Rem Get list of not online disk resources

if IsCoreResource = "False" then

Set oResourceInfoList = objClusterWMI.ExecQuery ("Select Name from MSCluster_Resource Where State &lt;&gt; 2 and ResourceClass = 1")
if Err.Number &lt;&gt; 0 then
strErr = "Unable to query MSCluster_Resource for not online disks from local mscluster WMI provider. Error: 0x" &amp; Hex(Err.Number) &amp; " " &amp; Err.Description
WScript.Echo strErr
Wscript.Quit -1
End If

for each oResourceInfo in oResourceInfoList
Dim DiskGroupName

Rem check if they belong to the same group

Set oClusterGroupList = objClusterWMI.ExecQuery ("Select GroupComponent from MSCluster_ResourceGroupToResource Where PartComponent='MSCluster_Resource.Name=" &amp; Chr(34) &amp; oResourceInfo.Name &amp; Chr(34) &amp; "'")
if Err.Number &lt;&gt; 0 then
strErr = "Unable to query disk group name against MSCluster_ResourceGroupToResource from local mscluster WMI provider. Error: 0x" &amp; Hex(Err.Number) &amp; " " &amp; Err.Description
WScript.Echo strErr
Wscript.Quit -1
End If

for each oClusterGroup in oClusterGroupList
DiskGroupName = Replace(Right(oClusterGroup.GroupComponent, Len(oClusterGroup.GroupComponent) - InStr(oClusterGroup.GroupComponent, CStr(Chr(34)) )), CStr(Chr(34)), "")

Exit For
Next

if DiskGroupName = memberClusterGroupName then
Rem we found a not online disk in the group

oDiscData.IsSnapshot=false

Exit For
End if
Next
end if
end if

if IsCoreResource = "False" then
set oDfsrServerRole = oDiscData.CreateClassInstance("$MPElement[Name='Microsoft.Windows.FileServer.DFSR.2008R2.Service']$")

call oDfsrServerRole.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.Computer']/PrincipalName$", sDfsrServerName)

Call oDiscData.AddInstance(oDfsrServerRole)

Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" &amp; sDfsrServerName &amp; "\root\microsoftdfs")
if Err.Number &lt;&gt; 0 then
strErr = "Unable to connect to local WMI provider. Error: 0x" &amp; Hex(Err.Number) &amp; " " &amp; Err.Description
WScript.Echo strErr
Wscript.Quit -1
End If

Set oRGMemberCollection = objWMIService.ExecQuery("Select MemberGuid, MemberName, ReplicationGroupGuid from DfsrLocalMemberConfig where MemberName = '" &amp; Left(sDfsrServerName, InStr(sDfsrServerName, ".")-1) &amp; "'")
if Err.Number &lt;&gt; 0 then
strErr = "Unable to query DfsrLocalMemberConfig from local WMI provider. Error: 0x" &amp; Hex(Err.Number) &amp; " " &amp; Err.Description
WScript.Echo strErr
Wscript.Quit -1
End If

for each ReplicationGroupInfo in oRGMemberCollection
Set oReplicationGroupList = objWMIService.ExecQuery("Select ReplicationGroupName from DfsrReplicationGroupConfig where ReplicationGroupGuid = '" &amp; ReplicationGroupInfo.ReplicationGroupGuid &amp; "'")
if Err.Number &lt;&gt; 0 then
strErr = "Unable to query DfsrReplicationGroupConfig from local WMI provider. Error: 0x" &amp; Hex(Err.Number) &amp; " " &amp; Err.Description
WScript.Echo strErr
Err.Clear
oDiscData.IsSnapshot=false
Else
Dim sReplicationGroupName

For Each ReplicationGroupData in oReplicationGroupList
sReplicationGroupName = ReplicationGroupData.ReplicationGroupName
Next

set oRGMembers = oDiscData.CreateClassInstance("$MPElement[Name='DFSRLib!Microsoft.Windows.FileServer.DFSR.ReplicationGroupMember']$")

call oRGMembers.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.Computer']/PrincipalName$", sDfsrServerName)
call oRGMembers.AddProperty("$MPElement[Name='DFSRLib!Microsoft.Windows.FileServer.DFSR.ReplicationGroupMember']/MemberGUID$", ReplicationGroupInfo.MemberGuid)
call oRGMembers.AddProperty("$MPElement[Name='DFSRLib!Microsoft.Windows.FileServer.DFSR.ReplicationGroupMember']/MemberName$", ReplicationGroupInfo.MemberName)
call oRGMembers.AddProperty("$MPElement[Name='DFSRLib!Microsoft.Windows.FileServer.DFSR.ReplicationGroupMember']/ReplicationGroupGUID$", ReplicationGroupInfo.ReplicationGroupGuid)
call oRGMembers.AddProperty("$MPElement[Name='DFSRLib!Microsoft.Windows.FileServer.DFSR.ReplicationGroupMember']/RGName$", sReplicationGroupName)
call oRGMembers.AddProperty("$MPElement[Name='System!System.Entity']/DisplayName$", ReplicationGroupInfo.MemberName &amp; " (Replication Group: " &amp; sReplicationGroupName &amp; ")")

queryRFConfig = "Select ReplicatedFolderGuid, ReplicatedFolderName, MemberGuid, ReplicationGroupGuid, VolumeGuid, RootPath, IsClustered, ReadOnly, "

queryRFConfig = queryRFConfig &amp; "StagingPath, StagingSizeInMb, ConflictPath, ConflictSizeInMb, Enabled from DfsrReplicatedFolderConfig Where MemberGuid ='" &amp; ReplicationGroupInfo.MemberGuid &amp; "'"

Set oRFConfigCollection = objWMIService.ExecQuery(queryRFConfig)
if Err.Number &lt;&gt; 0 then
strErr = "Unable to query DfsrReplicatedFolderConfig from local WMI provider. Error: 0x" &amp; Hex(Err.Number) &amp; " " &amp; Err.Description
WScript.Echo strErr
Err.Clear
oDiscData.IsSnapshot=false
Else
For Each oRFConfig in oRFConfigCollection
stateStr = "UNINITIALIZED"

set oReplicatedFolder = oDiscData.CreateClassInstance("$MPElement[Name='DFSRLib!Microsoft.Windows.FileServer.DFSR.ReplicatedFolder']$")

call oReplicatedFolder.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.Computer']/PrincipalName$", sDfsrServerName)
call oReplicatedFolder.AddProperty("$MPElement[Name='System!System.Entity']/DisplayName$", oRFConfig.ReplicatedFolderName &amp; " (Member: " &amp; ReplicationGroupInfo.MemberName &amp;")")
call oReplicatedFolder.AddProperty("$MPElement[Name='DFSRLib!Microsoft.Windows.FileServer.DFSR.ReplicatedFolder']/ReplicatedFolderGUID$", oRFConfig.ReplicatedFolderGuid)
call oReplicatedFolder.AddProperty("$MPElement[Name='DFSRLib!Microsoft.Windows.FileServer.DFSR.ReplicatedFolder']/ReplicationGroupGUID$", oRFConfig.ReplicationGroupGuid)
call oReplicatedFolder.AddProperty("$MPElement[Name='DFSRLib!Microsoft.Windows.FileServer.DFSR.ReplicatedFolder']/VolumeGUID$", oRFConfig.VolumeGuid)
call oReplicatedFolder.AddProperty("$MPElement[Name='DFSRLib!Microsoft.Windows.FileServer.DFSR.ReplicatedFolder']/RGName$", sReplicationGroupName)
call oReplicatedFolder.AddProperty("$MPElement[Name='DFSRLib!Microsoft.Windows.FileServer.DFSR.ReplicatedFolder']/MemberName$", ReplicationGroupInfo.MemberName)
call oReplicatedFolder.AddProperty("$MPElement[Name='DFSRLib!Microsoft.Windows.FileServer.DFSR.ReplicatedFolder']/RootPath$", oRFConfig.RootPath)

call oReplicatedFolder.AddProperty("$MPElement[Name='DFSRLib!Microsoft.Windows.FileServer.DFSR.ReplicatedFolder']/IsClustered$", oRFConfig.IsClustered)
call oReplicatedFolder.AddProperty("$MPElement[Name='DFSRLib!Microsoft.Windows.FileServer.DFSR.ReplicatedFolder']/IsReadOnly$", oRFConfig.ReadOnly)

if (CStr(oRFConfig.ReadOnly) = "True") then
set oDfsrRoObj = oDiscData.CreateClassInstance("$MPElement[Name='Microsoft.Windows.FileServer.DFSR.2008R2.ReadOnlyReplicatedFolder']$")

call oDfsrRoObj.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.Computer']/PrincipalName$", sDfsrServerName)
call oDfsrRoObj.AddProperty("$MPElement[Name='System!System.Entity']/DisplayName$", oRFConfig.ReplicatedFolderName &amp; " (Member: " &amp; ReplicationGroupInfo.MemberName &amp;")")
call oDfsrRoObj.AddProperty("$MPElement[Name='DFSRLib!Microsoft.Windows.FileServer.DFSR.ReplicatedFolderExtension']/ReplicatedFolderGUID$", oRFConfig.ReplicatedFolderGuid)
call oDfsrRoObj.AddProperty("$MPElement[Name='DFSRLib!Microsoft.Windows.FileServer.DFSR.ReplicatedFolderExtension']/ReplicationGroupGUID$", oRFConfig.ReplicationGroupGuid)
call oDfsrRoObj.AddProperty("$MPElement[Name='DFSRLib!Microsoft.Windows.FileServer.DFSR.ReplicatedFolderExtension']/VolumeGUID$", oRFConfig.VolumeGuid)
call oDfsrRoObj.AddProperty("$MPElement[Name='DFSRLib!Microsoft.Windows.FileServer.DFSR.ReplicatedFolderExtension']/RootPath$", oRFConfig.RootPath)

Call oDiscData.AddInstance(oDfsrRoObj)

Set oRelRo = oDiscData.CreateRelationshipInstance("$MPElement[Name='DFSRLib!Microsoft.Windows.FileServer.DFSR.ReplicatedFolder.Contains.ReplicatedFolderExtension']$")

oRelRo.Source = oReplicatedFolder
oRelRo.Target = oDfsrRoObj

Call oDiscData.AddInstance(oRelRo)

set oDfsrRoDriverObj = oDiscData.CreateClassInstance("$MPElement[Name='Microsoft.Windows.FileServer.DFSR.2008R2.ReadOnlyFilterDriver']$")

call oDfsrRoDriverObj.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.Computer']/PrincipalName$", sDfsrServerName)
call oDfsrRoDriverObj.AddProperty("$MPElement[Name='System!System.Entity']/DisplayName$", Left(sDfsrServerName, InStr(sDfsrServerName, ".")-1))

Call oDiscData.AddInstance(oDfsrRoDriverObj)

Set oRelRoDriver = oDiscData.CreateRelationshipInstance("$MPElement[Name='Microsoft.Windows.FileServer.DFSR.2008R2.ReadOnlyReplicatedFolder.Contains.ReadOnlyFilter']$")

oRelRoDriver.Source = oDfsrRoObj
oRelRoDriver.Target = oDfsrRoDriverObj

Call oDiscData.AddInstance(oRelRoDriver)
end if


if (CStr(oRFConfig.IsClustered) = "True") then

dfsrClusterResourceName = "DFSR " &amp; oRFConfig.RootPath
dfsrClusterResourceState = "NOT KNOWN"

Set objClusterWMI = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" &amp; sDfsrServerName &amp; "\root\mscluster")
if Err.Number &lt;&gt; 0 then
strErr = "Unable to connect to local mscluster WMI provider. Error: 0x" &amp; Hex(Err.Number) &amp; " " &amp; Err.Description
WScript.Echo strErr
Err.Clear
oDiscData.IsSnapshot=false
Else
Set oResourceInfoList = objClusterWMI.ExecQuery ("Select State from MSCluster_Resource where Name='" &amp; Replace(dfsrClusterResourceName, "\", "\\") &amp; "'")
if Err.Number &lt;&gt; 0 then
strErr = "Unable to query MSCluster_Resource from local mscluster WMI provider. Error: 0x" &amp; Hex(Err.Number) &amp; " " &amp; Err.Description
WScript.Echo strErr
Err.Clear
oDiscData.IsSnapshot=false
End If
End If

for each oResourceInfo in oResourceInfoList
Select Case oResourceInfo.State
Case 1
dfsrClusterResourceState = "INITIALIZING"

Case 2
dfsrClusterResourceState = "ONLINE"

Case 3
dfsrClusterResourceState = "OFFLINE"

Case 4
dfsrClusterResourceState = "FAILED"

Case 128
dfsrClusterResourceState = "PENDING"

Case 129
dfsrClusterResourceState = "ONLINE PENDING"

Case 130
dfsrClusterResourceState = "OFFLINE PENDING"

Case else
dfsrClusterResourceState = "INVALID STATE"
End Select

Exit For
Next


call oReplicatedFolder.AddProperty("$MPElement[Name='DFSRLib!Microsoft.Windows.FileServer.DFSR.ReplicatedFolder']/ClusterResourceName$", dfsrClusterResourceName)
call oReplicatedFolder.AddProperty("$MPElement[Name='DFSRLib!Microsoft.Windows.FileServer.DFSR.ReplicatedFolder']/ClusterResourceState$", dfsrClusterResourceState)
call oReplicatedFolder.AddProperty("$MPElement[Name='DFSRLib!Microsoft.Windows.FileServer.DFSR.ReplicatedFolder']/ClusterGroupName$", memberClusterGroupName)

set oDfsrClusterObj = oDiscData.CreateClassInstance("$MPElement[Name='Microsoft.Windows.FileServer.DFSR.2008R2.ClusteredReplicatedFolder']$")

call oDfsrClusterObj.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.Computer']/PrincipalName$", sDfsrServerName)
call oDfsrClusterObj.AddProperty("$MPElement[Name='System!System.Entity']/DisplayName$", oRFConfig.ReplicatedFolderName &amp; " (Member: " &amp; ReplicationGroupInfo.MemberName &amp;")")
call oDfsrClusterObj.AddProperty("$MPElement[Name='DFSRLib!Microsoft.Windows.FileServer.DFSR.ReplicatedFolderExtension']/ReplicatedFolderGUID$", oRFConfig.ReplicatedFolderGuid)
call oDfsrClusterObj.AddProperty("$MPElement[Name='DFSRLib!Microsoft.Windows.FileServer.DFSR.ReplicatedFolderExtension']/RootPath$", oRFConfig.RootPath)
call oDfsrClusterObj.AddProperty("$MPElement[Name='DFSRLib!Microsoft.Windows.FileServer.DFSR.ReplicatedFolderExtension']/ReplicationGroupGUID$", oRFConfig.ReplicationGroupGuid)
call oDfsrClusterObj.AddProperty("$MPElement[Name='DFSRLib!Microsoft.Windows.FileServer.DFSR.ReplicatedFolderExtension']/VolumeGUID$", oRFConfig.VolumeGuid)
call oDfsrClusterObj.AddProperty("$MPElement[Name='Microsoft.Windows.FileServer.DFSR.2008R2.ClusteredReplicatedFolder']/ClusterResourceName$", dfsrClusterResourceName)
call oDfsrClusterObj.AddProperty("$MPElement[Name='Microsoft.Windows.FileServer.DFSR.2008R2.ClusteredReplicatedFolder']/ClusterGroupName$", memberClusterGroupName)
call oDfsrClusterObj.AddProperty("$MPElement[Name='Microsoft.Windows.FileServer.DFSR.2008R2.ClusteredReplicatedFolder']/ClusterResourceState$", dfsrClusterResourceState)

Call oDiscData.AddInstance(oDfsrClusterObj)

Set oRelCluster = oDiscData.CreateRelationshipInstance("$MPElement[Name='DFSRLib!Microsoft.Windows.FileServer.DFSR.ReplicatedFolder.Contains.ReplicatedFolderExtension']$")

oRelCluster.Source = oReplicatedFolder
oRelCluster.Target = oDfsrClusterObj

Call oDiscData.AddInstance(oRelCluster)
else
call oReplicatedFolder.AddProperty("$MPElement[Name='DFSRLib!Microsoft.Windows.FileServer.DFSR.ReplicatedFolder']/ClusterResourceName$", "N/A")
call oReplicatedFolder.AddProperty("$MPElement[Name='DFSRLib!Microsoft.Windows.FileServer.DFSR.ReplicatedFolder']/ClusterResourceState$", "N/A")
call oReplicatedFolder.AddProperty("$MPElement[Name='DFSRLib!Microsoft.Windows.FileServer.DFSR.ReplicatedFolder']/ClusterGroupName$", "N/A")
end if

call oReplicatedFolder.AddProperty("$MPElement[Name='DFSRLib!Microsoft.Windows.FileServer.DFSR.ReplicatedFolder']/StagingPath$", oRFConfig.StagingPath)
call oReplicatedFolder.AddProperty("$MPElement[Name='DFSRLib!Microsoft.Windows.FileServer.DFSR.ReplicatedFolder']/StagingSize$", oRFConfig.StagingSizeInMb)
call oReplicatedFolder.AddProperty("$MPElement[Name='DFSRLib!Microsoft.Windows.FileServer.DFSR.ReplicatedFolder']/ConflictPath$", oRFConfig.ConflictPath)
call oReplicatedFolder.AddProperty("$MPElement[Name='DFSRLib!Microsoft.Windows.FileServer.DFSR.ReplicatedFolder']/ConflictSize$", oRFConfig.ConflictSizeInMb)
call oReplicatedFolder.AddProperty("$MPElement[Name='DFSRLib!Microsoft.Windows.FileServer.DFSR.ReplicatedFolder']/Enabled$", oRFConfig.Enabled)

Set ListOfReplicatedFolders = objWMIService.ExecQuery ("Select State from DfsrReplicatedFolderInfo Where ReplicatedFolderGuid ='" &amp; oRFConfig.ReplicatedFolderGuid &amp; "'")
if Err.Number &lt;&gt; 0 then
strErr = "Unable to query DfsrReplicatedFolderInfo from local WMI provider. Error: 0x" &amp; Hex(Err.Number) &amp; " " &amp; Err.Description
WScript.Echo strErr
stateStr = "UNAVAILABLE"
Err.Clear
oDiscData.IsSnapshot=false
Else
For Each ReplicatedFolderInfo in ListOfReplicatedFolders
Select Case ReplicatedFolderInfo.State
Case 0
stateStr = "UNINITIALIZED"
Case 1
stateStr = "INITIALIZED"

Case 2
stateStr = "INITIAL SYNC"

Case 3
stateStr = "AUTO RECOVERY"

Case 4
stateStr = "NORMAL"

Case 5
stateStr = "IN ERROR"

Case else
stateStr = "INVALID STATE"
End Select
Next
End if

call oReplicatedFolder.AddProperty("$MPElement[Name='DFSRLib!Microsoft.Windows.FileServer.DFSR.ReplicatedFolder']/State$", stateStr)

Call oDiscData.AddInstance(oReplicatedFolder)

Set oRel = oDiscData.CreateRelationshipInstance("$MPElement[Name='DFSRLib!Microsoft.Windows.FileServer.DFSR.ReplicationGroupMembers.Contains.ReplicatedFolders']$")

oRel.Source = oRGMembers
oRel.Target = oReplicatedFolder

Call oDiscData.AddInstance(oRel)

set oRFVolume = oDiscData.CreateClassInstance("$MPElement[Name='DFSRLib!Microsoft.Windows.FileServer.DFSR.Volume']$")

call oRFVolume.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.Computer']/PrincipalName$", sDfsrServerName)
call oRFVolume.AddProperty("$MPElement[Name='DFSRLib!Microsoft.Windows.FileServer.DFSR.Volume']/VolumeGUID$", oRFConfig.VolumeGuid)

Call oDiscData.AddInstance(oRFVolume)

Set oRelVol = oDiscData.CreateRelationshipInstance("$MPElement[Name='DFSRLib!Microsoft.Windows.FileServer.DFSR.Volume.Contains.ReplicatedFolder']$")

oRelVol.Source = oRFVolume
oRelVol.Target = oReplicatedFolder

Call oDiscData.AddInstance(oRelVol)
Next
End if

call oRGMembers.AddProperty("$MPElement[Name='DFSRLib!Microsoft.Windows.FileServer.DFSR.ReplicationGroupMember']/IsClustered$", memberClustered)
call oRGMembers.AddProperty("$MPElement[Name='DFSRLib!Microsoft.Windows.FileServer.DFSR.ReplicationGroupMember']/ClusterGroupName$", memberClusterGroupName)

Call oDiscData.AddInstance(oRGMembers)

Set oRel = oDiscData.CreateRelationshipInstance("$MPElement[Name='DFSRLib!Microsoft.Windows.FileServer.DFSR.Service.Contains.ReplicationGroupMembers']$")

oRel.Source = oDfsrServerRole
oRel.Target = oRGMembers

Call oDiscData.AddInstance(oRel)

End if
Next
End if

Call oAPI.Return(oDiscData)</Script></ScriptBody>
<TimeoutSeconds>900</TimeoutSeconds>
</DataSource>
</Discovery>