<?xml version="1.0" encoding="windows-1251"?>
<document type="SelFTrendxTest" version="0.0" xmlns:m="xTest">
     <xTest type="USER_SCRIPT" alias="MS FRS Mon" 
            TitleRus="Тест оценки 'здоровья' службы MS File Replication Service" 
            TitleRootRus="Тесты оценки 'здоровья' серверов MS Windows WMI" 
            TitleEng="MS File Replication Service Performance Test" 
            TitleRootEng="MS Windows Servers Performance Tests WMI"
            TrafficLightsName="MS File Replication Service Performance Test"
            Version="1.1">
	<Files>
		<File type="conf" name="VB.WP.MSFRS.xTest.xml"/>
		<File type="help" name="XT.VB.what-Performance.html"/>
		<File type="dll" name="ST_SCTest.dll"/>
	</Files>
  <Keywords>
   <Keyword>Microsoft</Keyword>
   <Keyword>Windows</Keyword>
   <Keyword>WMI</Keyword>
   <Keyword>FRS</Keyword>
   <Keyword>Active Directory</Keyword>
  </Keywords>

  <xTestProps>
        <log_level_def>0</log_level_def>
        <truncate_log>1</truncate_log>
        <AverInervDuration>60</AverInervDuration>
	    <discovery_func>OnDiscovery</discovery_func>
	    <work_func>OnDataReceived</work_func>
	</xTestProps>

    <parameters TitleRus="Список контролируемых ресурсов:" TitleEng="Servers List:">
        <resources>
           <resource_id TitleRus="Имя Windows компьютера" TitleEng="Name"></resource_id>
        </resources>

      <common_attribs TitleRus="Список параметров (общие):" TitleEng="Parameters List (common):" SubTitleRus="Параметр" SubTitleEng="Parameter">
        <!-- Type: "String", "Bool", "Integer", "Double" -->

        <Attrib Type="String" TitleRus="Пороги метрики 'Неудачных проверок подлинности' (через ;)" TitleEng="Tresholds for 'Authentications Error' (; separated)" Alias="Thrld.AuthenticationsinError">"20;10;5;0"</Attrib>
        <Attrib Type="String" TitleRus="Пороги метрики 'Неудачных запросов привязки RPC к серверу' (через ;)" TitleEng="Tresholds for 'Bindings Error' (; separated)" Alias="Thrld.BindingsinError">"20;10;5;0"</Attrib>
        <Attrib Type="String" TitleRus="Пороги метрики 'Ошибок отправки пакетов данных из-за таймаута' (через ;)" TitleEng="Tresholds for 'Communication Timeouts' (; separated)" Alias="Thrld.CommunicationTimeouts">"100;50;10;0"</Attrib>
        <Attrib Type="String" TitleRus="Пороги метрики 'Количестро пакетов, отправленных с какой-либо ошибкой' (через ;)" TitleEng="Tresholds for 'Packets sent with some error' (; separated)" Alias="Thrld.PacketsSentinError">"100;50;20;5"</Attrib>
        <Attrib Type="String" TitleRus="Пороги метрики 'Ошибок привязки к службе каталогов Active Directory' (через ;)" TitleEng="Tresholds for 'Active Directory Binding Error' (; separated)" Alias="Thrld.DSBindingsinError">"10;5;2;0"</Attrib>
        <Attrib Type="String" TitleRus="Пороги метрики 'Неверных объектов конфигурации FRS получено от Active Directory' (через ;)" TitleEng="Tresholds for 'Invalid FRS Objects received from Active Directory' (; separated)" Alias="Thrld.DSObjectsinError">"10;5;2;0"</Attrib>
        <Attrib Type="String" TitleRus="Пороги метрики 'Количестро запросов конфигурации у службы Active Directory' (через ;)" TitleEng="Tresholds for 'FRS Requests sent to Active Directory' (; separated)" Alias="Thrld.DSPolls">"40;20;10;5"</Attrib>
      </common_attribs>

      <resource_attribs TitleRus="Список параметров:" TitleEng="Parameters List:" SubTitleRus="Параметр" SubTitleEng="Parameter" >
            <!-- Type: "String", "Bool", "Integer", "Double" -->
        <Attrib Type="Enum" TitleRus="Тип аутентификации" TitleEng="Type of authentication" Alias="Auth">
          <Attrib_enum TitleRus="Использовать встроенную систему безопасности Windows NT" TitleEng="Use Windows NT Integrated security" Selected="Yes">"1"</Attrib_enum>
          <Attrib_enum TitleRus="Использовать заданные имя пользователя и пароль" TitleEng="Use a specific user name and password" Selected="No">"2"</Attrib_enum>
        </Attrib>
        <Attrib Type="String" TitleRus="Имя пользователя" TitleEng="Username" Alias="User">user</Attrib>
        <Attrib Type="SecureString" TitleRus="Пароль" TitleEng="Password" Alias="Pass">pass</Attrib>
        </resource_attribs>
    </parameters>

    <popupdisplay>
    	<!-- function: "EventCount", "Average", "Maximum", "Minimum" -->
	    <description ru="Тест оценки 'здоровья' службы MS File Replication Service" en="MS File Replication Service Performance Test"></description>
    </popupdisplay>

<Script language="VBScript">
<!--
Option Explicit

Dim g_objLocalWMIService	' Постоянный объект - локальный WMI сервис

Sub OnDiscovery(ByRef ResSet)
    Dim ResCount, i, CompName, Auth, User, Pass, Unid
    Dim SLAEventName, SLAAliasName, Error, TLError, l_strTLName_ru, l_strTLName_en
    Dim l_arrThrld, colInstances, l_objItem
    
    On Error Resume Next
    'stop
    Err.Clear
	
    ResSet.LogMsg("*** Start Sub OnDiscovery ***")
    ResSet.SendProgressMessage("Start Script")
    ResCount=ResSet.Count
    Unid = ResSet.UnidBase
    ResSet.LogMsg("ResSet.Count: " & ResSet.Count & " ResSet.UnidBase: " & ResSet.UnidBase)

    For i=0 To ResCount - 1
        Dim l_ObjWMIService, l_ObjLocator, l_FrsPresent
        
        CompName=ResSet.Resource(i).Name
        ResSet.SendProgressMessage("Check: " & CompName & ". Just a second, please...")
        Auth = ResSet.Resource(i).Attrib("Auth").Value
        User = ResSet.Resource(i).Attrib("User").Value
        Pass = ResSet.Resource(i).Attrib("Pass").Value
        
        If Auth = "1" Then
            Set l_ObjWMIService = GetObject("WinMgmts:\\" & CompName & "\root\CIMV2") 
        Else
            Set l_ObjLocator = CreateObject("WbemScripting.SWbemLocator")
            Set l_ObjWMIService = l_ObjLocator.ConnectServer (CompName, "", User, Pass)
        End If
        
        If Err.Number <> 0 Then
            ResSet.ScriptError = -1
            ResSet.ScriptErrorInfo = "Ошибка при запуске теста. Нет возможности работать с компьютером: '" & CompName & "'. Подробности в файле: xfiles_log.txt"
            ResSet.LogMsg ("*** Start Description Error ***")
            ResSet.LogMsg ("Computer name: " & CompName)
            ResSet.LogMsg ("Error number: " & Err.Number)
            ResSet.LogMsg ("Error Description: " & Err.Description)
            ResSet.LogMsg ("*** End Description Error ***")
            Exit Sub
        End If
        
        ' Проверить наличие FRS
        l_FrsPresent = False
        Set colInstances = l_ObjWMIService.ExecQuery ("select * from Win32_PerfRawData_FileReplicaSet_FileReplicaSet where Name='_Total'",,32)
        
        If Err.Number <> 0 Then
            ResSet.ScriptError = -1
            ResSet.ScriptErrorInfo = "Ошибка при запуске теста. Нет возможности работать с компьютером: '" & CompName & "'. Подробности в файле: xfiles_log.txt"
            ResSet.LogMsg ("*** Start Description Error ***")
            ResSet.LogMsg ("Computer name: " & CompName)
            ResSet.LogMsg ("Error number: " & Err.Number)
            ResSet.LogMsg ("Error Description: " & Err.Description)
            ResSet.LogMsg ("*** End Description Error ***")
            Exit Sub
        Else
            For Each l_objItem In colInstances
               l_FrsPresent = True
            Next
        End If

        If l_FrsPresent = False Then
            ResSet.ScriptError = -1
            ResSet.ScriptErrorInfo = "Ошибка при запуске теста. На компьютере: '" & CompName & "' недоступна служба MS FRS."
            ResSet.LogMsg ("*** Start Description Error ***")
            ResSet.LogMsg (ScriptErrorInfo)
            ResSet.LogMsg ("*** End Description Error ***")
            Exit Sub
        End If

        ' Availability(%)
        SLAEventName = "[" & UCase(CompName) & "] Availability(%)"
        SLAAliasName = "Availability_" &  UCase(CompName)
        Error = ResSet.EventAdd(SLAEventName, SLAAliasName, Unid)
        Unid = Unid + 1
        l_strTLName_ru = SLAEventName
        l_strTLName_en = SLAEventName
        TLError = ResSet.AddTrafficLight(SLAAliasName, l_strTLName_ru, l_strTLName_en, "Average", "<", 50, 70, 80, 99)

'// \MS FRS\Authentications Error                Win32_PerfRawData_FileReplicaSet_FileReplicaSet   AuthenticationsinError
'// \MS FRS\Bindings Error                       BindingsinError
'// \MS FRS\Communication Timeouts               CommunicationTimeouts
'// \MS FRS\Packets sent with some error         PacketsSentinError
'// \MS FRS\Active Directory Binding Error       DSBindingsinError
'// \MS FRS\Invalid FRS Objects received from Active Directory       DSObjectsinError
'// \MS FRS\FRS Requests sent to Active Directory   DSPolls

        'MS FRS\Authentications Error
        SLAEventName = "[" & UCase(CompName) & "] MS FRS\Authentications Error"
        SLAAliasName = "AuthenticationsinError_" &  UCase(CompName)
        Error = ResSet.EventAdd(SLAEventName, SLAAliasName, Unid)
        Unid = Unid + 1
        l_arrThrld = GetThresholdForTL(ResSet.CommonProp.Attrib("Thrld.AuthenticationsinError").Value)
        If IsArray(l_arrThrld) Then
            l_strTLName_ru = SLAEventName
            l_strTLName_en = SLAEventName
            TLError = ResSet.AddTrafficLight(SLAAliasName, l_strTLName_ru, l_strTLName_en, "Average", ">", l_arrThrld(0), l_arrThrld(1), l_arrThrld(2), l_arrThrld(3))
        Else
		        ResSet.ScriptError = 3
		        ResSet.ScriptErrorInfo = "Пороговые значения для Thrld.AuthenticationsinError в свойствах теста указаны не верно! Проверьте настройки и повторите запуск тестов."
		        Exit Sub
        End If

        'MS FRS\Bindings Error
        SLAEventName = "[" & UCase(CompName) & "] MS FRS\Bindings Error"
        SLAAliasName = "BindingsinError_" &  UCase(CompName)
        Error = ResSet.EventAdd(SLAEventName, SLAAliasName, Unid)
        Unid = Unid + 1
        l_arrThrld = GetThresholdForTL(ResSet.CommonProp.Attrib("Thrld.BindingsinError").Value)
        If IsArray(l_arrThrld) Then
            l_strTLName_ru = SLAEventName
            l_strTLName_en = SLAEventName
            TLError = ResSet.AddTrafficLight(SLAAliasName, l_strTLName_ru, l_strTLName_en, "Average", ">", l_arrThrld(0), l_arrThrld(1), l_arrThrld(2), l_arrThrld(3))
        Else
		        ResSet.ScriptError = 3
		        ResSet.ScriptErrorInfo = "Пороговые значения для Thrld.BindingsinError в свойствах теста указаны не верно! Проверьте настройки и повторите запуск тестов."
		        Exit Sub
        End If
        
        'MS FRS\Communication Timeouts
        SLAEventName = "[" & UCase(CompName) & "] MS FRS\Communication Timeouts"
        SLAAliasName = "CommunicationTimeouts_" &  UCase(CompName)
        Error = ResSet.EventAdd(SLAEventName, SLAAliasName, Unid)
        Unid = Unid + 1
        l_arrThrld = GetThresholdForTL(ResSet.CommonProp.Attrib("Thrld.CommunicationTimeouts").Value)
        If IsArray(l_arrThrld) Then
            l_strTLName_ru = SLAEventName
            l_strTLName_en = SLAEventName
            TLError = ResSet.AddTrafficLight(SLAAliasName, l_strTLName_ru, l_strTLName_en, "Average", ">", l_arrThrld(0), l_arrThrld(1), l_arrThrld(2), l_arrThrld(3))
        Else
		        ResSet.ScriptError = 3
		        ResSet.ScriptErrorInfo = "Пороговые значения для Thrld.CommunicationTimeouts в свойствах теста указаны не верно! Проверьте настройки и повторите запуск тестов."
		        Exit Sub
        End If
        
        'MS FRS\Packets sent with some error
        SLAEventName = "[" & UCase(CompName) & "] MS FRS\Packets sent with some error"
        SLAAliasName = "PacketsSentinError_" &  UCase(CompName)
        Error = ResSet.EventAdd(SLAEventName, SLAAliasName, Unid)
        Unid = Unid + 1
        l_arrThrld = GetThresholdForTL(ResSet.CommonProp.Attrib("Thrld.PacketsSentinError").Value)
        If IsArray(l_arrThrld) Then
            l_strTLName_ru = SLAEventName
            l_strTLName_en = SLAEventName
            TLError = ResSet.AddTrafficLight(SLAAliasName, l_strTLName_ru, l_strTLName_en, "Average", ">", l_arrThrld(0), l_arrThrld(1), l_arrThrld(2), l_arrThrld(3))
        Else
		        ResSet.ScriptError = 3
		        ResSet.ScriptErrorInfo = "Пороговые значения для Thrld.PacketsSentinError в свойствах теста указаны не верно! Проверьте настройки и повторите запуск тестов."
		        Exit Sub
        End If
        
        'MS FRS\Active Directory Binding Error
        SLAEventName = "[" & UCase(CompName) & "] MS FRS\Active Directory Binding Error"
        SLAAliasName = "DSBindingsinError_" &  UCase(CompName)
        Error = ResSet.EventAdd(SLAEventName, SLAAliasName, Unid)
        Unid = Unid + 1
        l_arrThrld = GetThresholdForTL(ResSet.CommonProp.Attrib("Thrld.DSBindingsinError").Value)
        If IsArray(l_arrThrld) Then
            l_strTLName_ru = SLAEventName
            l_strTLName_en = SLAEventName
            TLError = ResSet.AddTrafficLight(SLAAliasName, l_strTLName_ru, l_strTLName_en, "Average", ">", l_arrThrld(0), l_arrThrld(1), l_arrThrld(2), l_arrThrld(3))
        Else
		        ResSet.ScriptError = 3
		        ResSet.ScriptErrorInfo = "Пороговые значения для Thrld.DSBindingsinError в свойствах теста указаны не верно! Проверьте настройки и повторите запуск тестов."
		        Exit Sub
        End If
        
        'MS FRS\Invalid FRS Objects received from Active Directory
        SLAEventName = "[" & UCase(CompName) & "] MS FRS\Invalid FRS Objects received from Active Directory"
        SLAAliasName = "DSObjectsinError_" &  UCase(CompName)
        Error = ResSet.EventAdd(SLAEventName, SLAAliasName, Unid)
        Unid = Unid + 1
        l_arrThrld = GetThresholdForTL(ResSet.CommonProp.Attrib("Thrld.DSObjectsinError").Value)
        If IsArray(l_arrThrld) Then
            l_strTLName_ru = SLAEventName
            l_strTLName_en = SLAEventName
            TLError = ResSet.AddTrafficLight(SLAAliasName, l_strTLName_ru, l_strTLName_en, "Average", ">", l_arrThrld(0), l_arrThrld(1), l_arrThrld(2), l_arrThrld(3))
        Else
		        ResSet.ScriptError = 3
		        ResSet.ScriptErrorInfo = "Пороговые значения для Thrld.DSObjectsinError в свойствах теста указаны не верно! Проверьте настройки и повторите запуск тестов."
		        Exit Sub
        End If
        
        'MS FRS\FRS Requests sent to Active Directory
        SLAEventName = "[" & UCase(CompName) & "] MS FRS\FRS Requests sent to Active Directory"
        SLAAliasName = "DSPolls_" &  UCase(CompName)
        Error = ResSet.EventAdd(SLAEventName, SLAAliasName, Unid)
        Unid = Unid + 1
        l_arrThrld = GetThresholdForTL(ResSet.CommonProp.Attrib("Thrld.DSPolls").Value)
        If IsArray(l_arrThrld) Then
            l_strTLName_ru = SLAEventName
            l_strTLName_en = SLAEventName
            TLError = ResSet.AddTrafficLight(SLAAliasName, l_strTLName_ru, l_strTLName_en, "Average", ">", l_arrThrld(0), l_arrThrld(1), l_arrThrld(2), l_arrThrld(3))
        Else
		        ResSet.ScriptError = 3
		        ResSet.ScriptErrorInfo = "Пороговые значения для Thrld.DSPolls в свойствах теста указаны не верно! Проверьте настройки и повторите запуск тестов."
		        Exit Sub
        End If
        
    Next
    
    ResSet.LogMsg("*** End Sub OnDiscovery ***")
    
End Sub

Sub OnDataReceived(ByRef ResSet)
    Dim ResCount, i, CompName
    Dim l_strSLAAliasName, l_strLogMsg, Auth, User, Pass
    Dim l_arrSucceded, l_PrevValue, l_ObjPrevValuesCollection
	
    On Error Resume Next
    'stop
	
    Err.Clear

    ReDim l_arrSucceded(ResSet.Count - 1)
    
    Set l_ObjPrevValuesCollection = CreateObject("Scripting.Dictionary")

    Set g_objLocalWMIService = GetObject("WinMgmts:\\.\root\CIMV2")
    
    ResSet.LogMsg("*** Start Sub OnDataReceived ***")

    ResCount=ResSet.Count

    Init ResSet, l_ObjPrevValuesCollection, l_arrSucceded

    ResSet.Sleep(1000)

    Do While Not ResSet.StopTest
        If ResSet.IsNewSLaPeriod Then
            ResSet.LogMsg ( Timer & ": " & "Start While Loop")
            
            ResetEvents ResSet
            
            For i=0 To ResCount - 1
                Dim l_objWMIService, l_ObjLocator, l_colItems, l_objItem, l_FrsPresent, l_strValueAlias
                
                Err.Clear
                CompName=ResSet.Resource(i).Name
              
                If PingStatus(CompName) Then
                    l_strSLAAliasName = "Availability_" &  UCase(CompName)              
                    ResSet.Events(l_strSLAAliasName).Value = 100.0

                    Auth = ResSet.Resource(i).Attrib("Auth").Value
                    User = ResSet.Resource(i).Attrib("User").Value
                    Pass = ResSet.Resource(i).Attrib("Pass").Value
        
                    If Auth = "1" Then
                        Set l_ObjWMIService = GetObject("WinMgmts:\\" & CompName & "\root\CIMV2") 
                    Else
                        Set l_ObjLocator = CreateObject("WbemScripting.SWbemLocator")
                        Set l_ObjWMIService = l_ObjLocator.ConnectServer (CompName, "", User, Pass)
                    End If

                    Set l_colItems = l_ObjWMIService.ExecQuery ("select * from Win32_PerfRawData_FileReplicaSet_FileReplicaSet where Name='_Total'",,32)
                    
                    If Err.Number <> 0 Then
                        ResSet.LogMsg ("*** Start Description Error ***")
                        ResSet.LogMsg ("Computer name: " & CompName)
                        ResSet.LogMsg ("Error number: " & Err.Number)
                        ResSet.LogMsg ("Error Description: " & Err.Description)
                        ResSet.LogMsg ("*** End Description Error ***")
                    Else
                        l_FrsPresent = False
                        
                        For Each l_objItem In l_colItems
                            If (Err.Number <> 0) Then
                                Err.Clear
                                Exit For
                            End If

                            l_strValueAlias = "AuthenticationsinError_" &  UCase(CompName)
                            If l_arrSucceded(i) = True Then
                                If l_ObjPrevValuesCollection.Exists(l_strValueAlias) Then
                                    l_PrevValue = l_ObjPrevValuesCollection.Item(l_strValueAlias)
                                    
                                    If l_PrevValue <= l_objItem.AuthenticationsinError Then
                                        l_strSLAAliasName = "AuthenticationsinError_" &  UCase(CompName)
                                        ResSet.Events(l_strSLAAliasName).Value = l_objItem.AuthenticationsinError - l_PrevValue
                                    End If
                                End If
                            End If
                            l_ObjPrevValuesCollection.Item(l_strValueAlias) = l_objItem.AuthenticationsinError

                            l_strValueAlias = "BindingsinError_" &  UCase(CompName)
                            If l_arrSucceded(i) = True Then
                                If l_ObjPrevValuesCollection.Exists(l_strValueAlias) Then
                                    l_PrevValue = l_ObjPrevValuesCollection.Item(l_strValueAlias)
                                    
                                    If l_PrevValue <= l_objItem.BindingsinError Then
                                        l_strSLAAliasName = "BindingsinError_" &  UCase(CompName)
                                        ResSet.Events(l_strSLAAliasName).Value = l_objItem.BindingsinError - l_PrevValue
                                    End If
                                End If
                            End If
                            l_ObjPrevValuesCollection.Item(l_strValueAlias) = l_objItem.BindingsinError

                            l_strValueAlias = "CommunicationTimeouts_" &  UCase(CompName)
                            If l_arrSucceded(i) = True Then
                                If l_ObjPrevValuesCollection.Exists(l_strValueAlias) Then
                                    l_PrevValue = l_ObjPrevValuesCollection.Item(l_strValueAlias)
                                    
                                    If l_PrevValue <= l_objItem.CommunicationTimeouts Then
                                        l_strSLAAliasName = "CommunicationTimeouts_" &  UCase(CompName)
                                        ResSet.Events(l_strSLAAliasName).Value = l_objItem.CommunicationTimeouts - l_PrevValue
                                    End If
                                End If
                            End If
                            l_ObjPrevValuesCollection.Item(l_strValueAlias) = l_objItem.CommunicationTimeouts

                            l_strValueAlias = "PacketsSentinError_" &  UCase(CompName)
                            If l_arrSucceded(i) = True Then
                                If l_ObjPrevValuesCollection.Exists(l_strValueAlias) Then
                                    l_PrevValue = l_ObjPrevValuesCollection.Item(l_strValueAlias)
                                    
                                    If l_PrevValue <= l_objItem.PacketsSentinError Then
                                        l_strSLAAliasName = "PacketsSentinError_" &  UCase(CompName)
                                        ResSet.Events(l_strSLAAliasName).Value = l_objItem.PacketsSentinError - l_PrevValue
                                    End If
                                End If
                            End If
                            l_ObjPrevValuesCollection.Item(l_strValueAlias) = l_objItem.PacketsSentinError

                            l_strValueAlias = "DSBindingsinError_" &  UCase(CompName)
                            If l_arrSucceded(i) = True Then
                                If l_ObjPrevValuesCollection.Exists(l_strValueAlias) Then
                                    l_PrevValue = l_ObjPrevValuesCollection.Item(l_strValueAlias)
                                    
                                    If l_PrevValue <= l_objItem.DSBindingsinError Then
                                        l_strSLAAliasName = "DSBindingsinError_" &  UCase(CompName)
                                        ResSet.Events(l_strSLAAliasName).Value = l_objItem.DSBindingsinError - l_PrevValue
                                    End If
                                End If
                            End If
                            l_ObjPrevValuesCollection.Item(l_strValueAlias) = l_objItem.DSBindingsinError

                            l_strValueAlias = "DSObjectsinError_" &  UCase(CompName)
                            If l_arrSucceded(i) = True Then
                                If l_ObjPrevValuesCollection.Exists(l_strValueAlias) Then
                                    l_PrevValue = l_ObjPrevValuesCollection.Item(l_strValueAlias)
                                    
                                    If l_PrevValue <= l_objItem.DSObjectsinError Then
                                        l_strSLAAliasName = "DSObjectsinError_" &  UCase(CompName)
                                        ResSet.Events(l_strSLAAliasName).Value = l_objItem.DSObjectsinError - l_PrevValue
                                    End If
                                End If
                            End If
                            l_ObjPrevValuesCollection.Item(l_strValueAlias) = l_objItem.DSObjectsinError

                            l_strValueAlias = "DSPolls_" &  UCase(CompName)
                            If l_arrSucceded(i) = True Then
                                If l_ObjPrevValuesCollection.Exists(l_strValueAlias) Then
                                    l_PrevValue = l_ObjPrevValuesCollection.Item(l_strValueAlias)
                                    
                                    If l_PrevValue <= l_objItem.DSPolls Then
                                        l_strSLAAliasName = "DSPolls_" &  UCase(CompName)
                                        ResSet.Events(l_strSLAAliasName).Value = l_objItem.DSPolls - l_PrevValue
                                    End If
                                End If
                            End If
                            l_ObjPrevValuesCollection.Item(l_strValueAlias) = l_objItem.DSPolls

                            l_arrSucceded(i) = True
                            l_FrsPresent = True

                            Exit For
                        Next
                        
                        If l_FrsPresent = False Then
                            ResSet.ScriptErrorInfo = "Ошибка при запуске теста. На компьютере: '" & CompName & "' недоступна служба MS FRS."
                            ResSet.LogMsg ("*** Start Description Error ***")
                            ResSet.LogMsg (ScriptErrorInfo)
                            ResSet.LogMsg ("*** End Description Error ***")
                        End If
                    End If
                Else
                    '//Availability 
                    l_strSLAAliasName = "Availability_" &  UCase(CompName)
                    ResSet.Events(l_strSLAAliasName).Value = 0
                    l_arrSucceded(i) = False
                End If
            Next

            ResSet.SendSLaEvents()
        End If
        
        ResSet.Sleep(1000)
    Loop
    
End Sub

''''''''''''''''''''''''''''''''''''''''''''''
Sub Init(ByRef ResSet, ByRef ref_ObjPrevValuesCollection, ByRef ref_arrSucceded)
    Dim l_iIndx, l_iResCount, CompName

    On Error Resume Next

    ResSet.LogMsg("Init: ***Start***")
    l_iResCount = ResSet.Count

    For l_iIndx=0 To l_iResCount - 1
        Dim colInstances, Auth, User, Pass
        Dim l_ObjWMIService, l_ObjLocator, l_strValueAlias, l_objItem, l_FrsPresent
        
        CompName=ResSet.Resource(l_iIndx).Name
        ref_arrSucceded(l_iIndx) = False
        
        If PingStatus (CompName) Then
            ResSet.SendProgressMessage("Check: " & CompName & ". Just a second, please...")
            Auth = ResSet.Resource(l_iIndx).Attrib("Auth").Value
            User = ResSet.Resource(l_iIndx).Attrib("User").Value
            Pass = ResSet.Resource(l_iIndx).Attrib("Pass").Value
        
            If Auth = "1" Then
                Set l_ObjWMIService = GetObject("WinMgmts:\\" & CompName & "\root\CIMV2") 
            Else
                Set l_ObjLocator = CreateObject("WbemScripting.SWbemLocator")
                Set l_ObjWMIService = l_ObjLocator.ConnectServer (CompName, "", User, Pass)
            End If
        
            Set colInstances = l_ObjWMIService.ExecQuery ("select * from Win32_PerfRawData_FileReplicaSet_FileReplicaSet where Name='_Total'",,32)
        
            If Err.Number <> 0 Then
                ResSet.LogMsg = "Ошибка получения Instance='_Total' WMI таблицы Win32_PerfRawData_FileReplicaSet_FileReplicaSet с компьютера: '" & CompName & "'. Подробности в файле: xfiles_log.txt"
                ResSet.LogMsg ("*** Start Description Error ***")
                ResSet.LogMsg ("Computer name: " & CompName)
                ResSet.LogMsg ("Error number: " & Err.Number)
                ResSet.LogMsg ("Error Description: " & Err.Description)
                ResSet.LogMsg ("*** End Description Error ***")
            Else
                l_FrsPresent = False
                
                For Each l_objItem In colInstances
                    l_strValueAlias = "AuthenticationsinError_" &  UCase(CompName)
                    ref_ObjPrevValuesCollection.Add l_strValueAlias, l_objItem.AuthenticationsinError

                    l_strValueAlias = "BindingsinError_" &  UCase(CompName)
                    ref_ObjPrevValuesCollection.Add l_strValueAlias, l_objItem.BindingsinError

                    l_strValueAlias = "CommunicationTimeouts_" &  UCase(CompName)
                    ref_ObjPrevValuesCollection.Add l_strValueAlias, l_objItem.CommunicationTimeouts

                    l_strValueAlias = "PacketsSentinError_" &  UCase(CompName)
                    ref_ObjPrevValuesCollection.Add l_strValueAlias, l_objItem.PacketsSentinError

                    l_strValueAlias = "DSBindingsinError_" &  UCase(CompName)
                    ref_ObjPrevValuesCollection.Add l_strValueAlias, l_objItem.DSBindingsinError

                    l_strValueAlias = "DSObjectsinError_" &  UCase(CompName)
                    ref_ObjPrevValuesCollection.Add l_strValueAlias, l_objItem.DSObjectsinError

                    l_strValueAlias = "DSPolls_" &  UCase(CompName)
                    ref_ObjPrevValuesCollection.Add l_strValueAlias, l_objItem.DSPolls

                    l_FrsPresent = True
                    ref_arrSucceded(l_iIndx) = True
                    Exit For
                Next
                
                If l_FrsPresent = False Then
                    ResSet.ScriptErrorInfo = "Ошибка при запуске теста. На компьютере: '" & CompName & "' недоступна служба MS FRS."
                    ResSet.LogMsg ("*** Start Description Error ***")
                    ResSet.LogMsg (ScriptErrorInfo)
                    ResSet.LogMsg ("*** End Description Error ***")
                End If
            End If
        End If
    Next
    
    ResSet.LogMsg("Init: ***End***")
End Sub
    
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

Function PingStatus ( strComputerName )
    ' True если компьютер отвечает на ping
    
    Dim strSelect, cPingResults, oPingResult
    
    On Error Resume Next
	
    strSelect="Select StatusCode from Win32_PingStatus Where Address='" & strComputerName & "'"
    Set cPingResults = g_objLocalWMIService.ExecQuery(strSelect)
	
    For Each oPingResult In cPingResults
        If Err.Number <> 0 Then
            Err.Clear
            PingStatus = False
            Exit Function
        End If
        If oPingResult.StatusCode = 0 Then
            PingStatus = True
        Else
            PingStatus = False
        End If
    Next
End Function

'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

'Формирование массива из элемента строки,разделенного запятой
Function GetThresholdForTL(l_ThresholdString)       
    Dim arrTL, i
    arrTL = Split(l_ThresholdString, ";")
    If UBound(arrTL) <> 3 Then 
        GetThresholdForTL = "Данные не верны, проверьте правильность введенных пороговых значений в настройках теста - 1"
        Exit Function
    End If
	
    For i = LBound(arrTL) To UBound(arrTL)
        If Not IsNumeric (Trim(arrTL(i))) Then
            GetThresholdForTL = "Данные не верны, проверьте правильность введенных пороговых значений в настройках теста - 2"
            Exit Function
        End If
    Next
	
    GetThresholdForTL = arrTL
End Function

'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

Sub ResetEvents(ByRef ResSet) 
    Dim l_iIndx
    
    For l_iIndx = 0 To ResSet.EventsCount - 1
        ResSet.Events(l_iIndx).Value = ResSet.BadValue
    Next
End Sub

-->
</Script>
    </xTest>
</document>
