From e03f59022193990d48c4cfe6f6d6a312e70b174f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?P=C3=A1ll=20Gu=C3=B0j=C3=B3n=20Sigur=C3=B0sson?= Date: Mon, 31 May 2010 11:03:56 +0000 Subject: [PATCH] VB Scripts for WMI added --- nsclient/trunk/scripts/wmi/CHANGELOG.txt | 7 + nsclient/trunk/scripts/wmi/INSTALL.txt | 7 + nsclient/trunk/scripts/wmi/README.txt | 7 + .../scripts/wmi/WMI agentless plugins.pdf | Bin 0 -> 63989 bytes .../trunk/scripts/wmi/check_100nsec_timer.vbs | 896 ++++++++++++++ .../scripts/wmi/check_counter_bulk_count.vbs | 897 ++++++++++++++ .../scripts/wmi/check_counter_counter.vbs | 895 ++++++++++++++ .../wmi/check_counter_large_rawcount.vbs | 848 +++++++++++++ .../scripts/wmi/check_counter_rawcount.vbs | 848 +++++++++++++ .../scripts/wmi/check_cpu_load_percentage.vbs | 1002 ++++++++++++++++ nsclient/trunk/scripts/wmi/check_disks_io.vbs | 1051 +++++++++++++++++ .../wmi/check_disks_percentage_space_used.vbs | 965 +++++++++++++++ .../check_memory_percentage_space_used.vbs | 1003 ++++++++++++++++ .../trunk/scripts/wmi/check_network_io.vbs | 1049 ++++++++++++++++ nsclient/trunk/scripts/wmi/check_proc_num.vbs | 841 +++++++++++++ .../trunk/scripts/wmi/check_raw_fraction.vbs | 856 ++++++++++++++ .../scripts/wmi/check_services_states.vbs | 468 ++++++++ .../trunk/scripts/wmi/get_computer_info.vbs | 601 ++++++++++ .../trunk/scripts/wmi/get_counter_type.vbs | 141 +++ .../trunk/scripts/wmi/verify_wmi_status.vbs | 329 ++++++ nsclient/trunk/wmi.ini | 182 +++ 21 files changed, 12893 insertions(+) create mode 100644 nsclient/trunk/scripts/wmi/CHANGELOG.txt create mode 100644 nsclient/trunk/scripts/wmi/INSTALL.txt create mode 100644 nsclient/trunk/scripts/wmi/README.txt create mode 100644 nsclient/trunk/scripts/wmi/WMI agentless plugins.pdf create mode 100644 nsclient/trunk/scripts/wmi/check_100nsec_timer.vbs create mode 100644 nsclient/trunk/scripts/wmi/check_counter_bulk_count.vbs create mode 100644 nsclient/trunk/scripts/wmi/check_counter_counter.vbs create mode 100644 nsclient/trunk/scripts/wmi/check_counter_large_rawcount.vbs create mode 100644 nsclient/trunk/scripts/wmi/check_counter_rawcount.vbs create mode 100644 nsclient/trunk/scripts/wmi/check_cpu_load_percentage.vbs create mode 100644 nsclient/trunk/scripts/wmi/check_disks_io.vbs create mode 100644 nsclient/trunk/scripts/wmi/check_disks_percentage_space_used.vbs create mode 100644 nsclient/trunk/scripts/wmi/check_memory_percentage_space_used.vbs create mode 100644 nsclient/trunk/scripts/wmi/check_network_io.vbs create mode 100644 nsclient/trunk/scripts/wmi/check_proc_num.vbs create mode 100644 nsclient/trunk/scripts/wmi/check_raw_fraction.vbs create mode 100644 nsclient/trunk/scripts/wmi/check_services_states.vbs create mode 100644 nsclient/trunk/scripts/wmi/get_computer_info.vbs create mode 100644 nsclient/trunk/scripts/wmi/get_counter_type.vbs create mode 100644 nsclient/trunk/scripts/wmi/verify_wmi_status.vbs create mode 100644 nsclient/trunk/wmi.ini diff --git a/nsclient/trunk/scripts/wmi/CHANGELOG.txt b/nsclient/trunk/scripts/wmi/CHANGELOG.txt new file mode 100644 index 0000000..5b4c39b --- /dev/null +++ b/nsclient/trunk/scripts/wmi/CHANGELOG.txt @@ -0,0 +1,7 @@ +File name: CHANGELOG.txt +Revision: HEAD +Date: December 5, 2008 +Author: Dr. Dave Blunt at GroundWork Open Source Inc. (dblunt@groundworkopensource.com) +============================================================================================= + +This file is deprecated. Please use 'WMI agentless plugins.pdf'. diff --git a/nsclient/trunk/scripts/wmi/INSTALL.txt b/nsclient/trunk/scripts/wmi/INSTALL.txt new file mode 100644 index 0000000..4c23a7b --- /dev/null +++ b/nsclient/trunk/scripts/wmi/INSTALL.txt @@ -0,0 +1,7 @@ +File name: INSTALL.txt +Revision: HEAD +Date: December 5, 2008 +Author: Dr. Dave Blunt at GroundWork Open Source Inc. (dblunt@groundworkopensource.com) +============================================================================================= + +This file is deprecated. Please use 'WMI agentless plugins.pdf'. \ No newline at end of file diff --git a/nsclient/trunk/scripts/wmi/README.txt b/nsclient/trunk/scripts/wmi/README.txt new file mode 100644 index 0000000..ce30a0d --- /dev/null +++ b/nsclient/trunk/scripts/wmi/README.txt @@ -0,0 +1,7 @@ +File name: README.txt +Revision: HEAD +Date: December 5, 2008 +Author: Dr. Dave Blunt at GroundWork Open Source Inc. (dblunt@groundworkopensource.com) +============================================================================================= + +This file is deprecated. Please use 'WMI agentless plugins.pdf'. \ No newline at end of file diff --git a/nsclient/trunk/scripts/wmi/WMI agentless plugins.pdf b/nsclient/trunk/scripts/wmi/WMI agentless plugins.pdf new file mode 100644 index 0000000000000000000000000000000000000000..a52d500c1955409407d93a401df1255c83d9fd2e GIT binary patch literal 63989 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 0 ) then + Select Case nbrError + Case 462, -2147023174 + strExitMsg = "Timeout connecting to WMI on this host! Error Number: " & nbrError & " Description: " & err.description + Case -2147024891 + strExitMsg = "Authentication failure to remote host! Error Number: " & nbrError & " Description: " & err.description + Case -2147217392 + strExitMsg = "Error! Number: " & nbrError & " Description: Invalid Class" + Case Else + strExitMsg = "Error! Number: " & nbrError & " Description: " & err.description + End Select + wscript.echo strExitMsg + wscript.quit(intUnknown) + end if + + End Function +'------------------------------------------------------------------------------------------------- +'Function Name: f_Help. +'Descripton: Display help of command include : Description, Arguments, Examples +'Input: No. +'Output: No. +'------------------------------------------------------------------------------------------------- + Function f_Help() + + Dim str + str="Check 100NSEC TIMER. If your Local Machine has the same Administrator account and password as the Remote Machine then you don't have to use the two last parameters."&vbCrlF&vbCrlF + str=str&"cscript check_100nsec_timer.vbs -h hostname -class classname -prop property -inst instancename [-w warning_level -c critical_level] [-user username -pass password [-domain domain]]"&vbCrlF + str=str&vbCrlF + str=str&"-h [--help] Help."&vbCrlF + str=str&"-h hostname Host name."&vbCrlF + str=str&"-class classname Class name."&vbCrlF + str=str&"-prop property Property of Class."&vbCrlF + str=str&"-inst instance Needed Instance, can be * for all"&vbCrlF + str=str&"-w warning_level Warning threshold."&vbCrlF + str=str&"-c critical_level Critical threshold."&vbCrlF + str=str&"-user username Account Administrator on Remote Machine."&vbCrlF + str=str&"-pass password Password Account Administrator on Remote Machine."&vbCrlF + str=str&"-domain domain Domain Name of Remote Machine."&vbCrlF + str=str&vbCrlF + str=str&"Example: cscript check_100nsec_timer.vbs -h Ser1 -class Win32_PerfRawData_PerfOS_Processor -prop PercentUserTime -inst ""*"" -w 30 -c 70 [-user Ser1\Administrator -pass password -domain ITSP] "&vbCrlF + str=str&"Example: cscript check_100nsec_timer.vbs -h Ser1 -class Win32_PerfRawData_PerfOS_Processor -prop PercentUserTime -inst ""Name = '0'"" -w 30 -c 70 [-user Ser1\Administrator -pass password -domain ITSP] " + wscript.echo str + + End Function +'------------------------------------------------------------------------------------------------- +'Function Name: f_GetAllArg. +'Descripton: Get all of arguments from command. +'Input: No. +'Output: No. +'------------------------------------------------------------------------------------------------- + Function f_GetAllArg() + + On Error Resume Next + + Dim i + + argcountcommand=WScript.Arguments.Count + + for i=0 to argcountcommand-1 + arg(i)=WScript.Arguments(i) + next + + End Function +'------------------------------------------------------------------------------------------------- +'Function Name: f_GetOneArg. +'Descripton: Get an argument from command. +'Input: Yes. +' strName: Name of argument +'Output: Value. +'------------------------------------------------------------------------------------------------- + Function f_GetOneArg(strName) + + On Error Resume Next + + Dim i + for i=0 to argcountcommand-1 + if (Ucase(arg(i))=Ucase(strName)) then + f_GetOneArg=arg(i+1) + Exit Function + end if + next + + End Function + +'------------------------------------------------------------------------------------------------- +'Function Name: f_GetInstance. +'Descripton: Get infomation at Local Host. +'Input: instance. +'Output: No. +'------------------------------------------------------------------------------------------------- + Function f_GetInstance(instance) + + On Error Resume Next + + strResultTemp1 = "" + strResultTemp2 = "" + strResultTemp = "" + intResultTemp = 0 + strPropBase = "" + + strInstanceTemp1 = "" + strInstanceTemp2 = "" + intInstanceTemp1 = 0 + intInstanceTemp2 = 0 + + 'Depend on strInfo parameters to get the result value + if(instance = "*") then + strQuery = "Select " & strProp & ", TimeStamp_Sys100NS" & " from " & strClass + Set colWMITemp = objWMIService.ExecQuery(strQuery) + Wscript.Sleep(1000) + Set colWMI = objWMIService.ExecQuery(strQuery) + else + + 'Depend on strInfo parameters to get the result value + + intInstanceTemp1 = InStr(1,instance,"=") + strInstanceTemp1 = Mid(instance,1,intInstanceTemp1-1) + intInstanceTemp2 = Len(instance) + strInstanceTemp2 = Mid(instance,intInstanceTemp1+1,intInstanceTemp2-intInstanceTemp1) + instance=strInstanceTemp1 & "='" & strInstanceTemp2 & "'" + + strQuery = "Select " & strProp & ", TimeStamp_Sys100NS" & " from " & strClass & " where " & instance + Set colWMITemp = objWMIService.ExecQuery(strQuery) + Wscript.Sleep(1000) + Set colWMI = objWMIService.ExecQuery(strQuery) + end if + + count = -1 + count = colWMI.count + if(count = -1) then + Wscript.Echo "Unknown - No data received from WMI;" + Wscript.Quit(intUnknown) + else + if(colWMI.count > 0) then + f_GetData() + strResultTemp1 = strResultTemp1 & strResultTemp3 + strResultTemp2 = strResultTemp2 & strResultTemp4 + intReturnTemp = intReturnTemp1 + Exit Function + else + strResultTemp1 = "Unknown - " & instance &" query: No row returned." + intReturnTemp = intUnknown + Exit Function + end if + end if + End Function + +'------------------------------------------------------------------------------------------------- +'Function Name: f_GetPrefix. +'Descripton: Get Prefix. +'Input: No. +'Output: No. +'------------------------------------------------------------------------------------------------- + Function f_GetPrefix(intValue) + + On Error Resume Next + + strPrefix = "" + If(warningValue <> "" And criticalValue = "") Then + If (IsNumeric(warningValue)) Then + If (Int(intValue) < Int(warningValue)) Then + returnValue=0 + strPrefix= "OK - " + Else + returnValue=1 + strPrefix= "Warning - " + End If + Else + Wscript.Echo "Error! Arguments wrong, please verify -w parameter" + Wscript.Quit(intError) + Exit Function + End If + End If + If(warningValue = "" And criticalValue <> "") Then + If (IsNumeric(criticalValue)) Then + If (Int(intValue) < Int(criticalValue)) Then + returnValue=0 + strPrefix= "OK - " + Else + returnValue=2 + strPrefix= "Critical - " + End If + Else + Wscript.Echo "Error! Arguments wrong, please verify -c parameter" + Wscript.Quit(intError) + Exit Function + End If + End If + If (warningValue <> "" And criticalValue <> "") Then + If (IsNumeric(warningValue) And IsNumeric(criticalValue)) Then + if (Int(warningValue) < Int(criticalValue)) then + + if (Int(intValue) < Int(warningValue)) then + returnValue=0 + strPrefix= "OK - " + else + if (Int(intValue) < Int(criticalValue)) then + returnValue=1 + strPrefix= "Warning - " + else + returnValue=2 + strPrefix= "Critical - " + end if + end if + else + if (Int(intValue) > Int(warningValue)) then + returnValue=0 + strPrefix= "OK - " + else + if (Int(intValue) > Int(criticalValue)) then + returnValue=1 + strPrefix= "Warning - " + else + returnValue=2 + strPrefix= "Critical - " + end if + end if + end If + Else + Wscript.Echo "Error! Arguments wrong, please verify -w -c parameter" + Wscript.Quit(intError) + Exit Function + End If + End If + + End Function + +'------------------------------------------------------------------------------------------------- +'Function Name: f_GetPrefixWithRange. +'Descripton: Get Prefix. +'Input: No. +'Output: No. +'------------------------------------------------------------------------------------------------- + Function f_GetPrefixWithRange(intValue) + + On Error Resume Next + lWarningValue = "" + uWarningValue = "" + lCriticalValue= "" + uCriticalValue= "" + warningReturn = 0 + criticalReturn = 0 + If(warningValue <> "") Then + f_GetWarningValueFromRange(warningValue) + End If + If(criticalValue <> "") Then + f_GetCriticalValueFromRange(criticalValue) + End If + strPrefix = "" + 'verify warning + If((lWarningValue <> "") And (uWarningValue <> "")) Then + If(Int(lWarningValue) <= Int(uWarningValue)) Then + If((Int(lWarningValue) >= Int(intValue)) Or (Int(intValue) >= Int(uWarningValue))) Then + warningReturn=1 + End If + Else + If((Int(intValue) >= Int(uWarningValue) ) And (Int(intValue) <= Int(lWarningValue))) Then + warningReturn=1 + End If + End If + End If + If((lWarningValue <> "") And (uWarningValue = "")) Then + If(Int(intValue) <= Int(lWarningValue)) Then + warningReturn=1 + End If + End If + If((lWarningValue = "") And (uWarningValue <> "")) Then + If(Int(intValue) >= Int(uWarningValue)) Then + warningReturn=1 + End If + End If + + 'verify critical + If((lCriticalValue <> "") And (uCriticalValue <> "")) Then + If(Int(lCriticalValue) <= Int(uCriticalValue)) Then + If((Int(lCriticalValue) >= Int(intValue)) Or (Int(intValue) >= Int(uCriticalValue))) Then + criticalReturn=2 + End If + Else + If((Int(intValue) >= Int(uCriticalValue) ) And (Int(intValue) <= Int(lCriticalValue))) Then + criticalReturn=2 + End If + End If + End If + If((lCriticalValue <> "") And (uCriticalValue = "")) Then + If(Int(intValue) <= Int(lCriticalValue)) Then + criticalReturn=2 + End If + End If + If((lCriticalValue = "") And (uCriticalValue <> "")) Then + If(Int(intValue) >= Int(uCriticalValue)) Then + criticalReturn=2 + End If + End If + + 'return result + If(criticalReturn = 2) Then + returnValue=2 + strPrefix= "Critical - " + Else + If(warningReturn = 1) Then + returnValue=1 + strPrefix= "Warning - " + Else + returnValue=0 + strPrefix= "Ok - " + End If + End If + + End Function + +'------------------------------------------------------------------------------------------------- +'Function Name: f_GetWarningValueFromRange(). +'Descripton: Get perform value at Local Host. +'Input: warningValueRange. +'Output: No. +'------------------------------------------------------------------------------------------------- + Function f_GetWarningValueFromRange(warningValue) + + On Error Resume Next + lWarningValue = "" + uWarningValue = "" + temp1 = 0 + temp1 = InStr(1, warningValue, ":") + if(temp1 > 0) then + lWarningTemp = Mid(warningValue, 1, temp1 -1) + uWarningTemp = Mid(warningValue, temp1 +1, len(warningValue) - temp1) + if(IsNumeric(lWarningTemp) or IsNumeric(uWarningTemp)) then + lWarningValue = lWarningTemp + uWarningValue = uWarningTemp + else + Wscript.Echo "Error! Arguments wrong, please verify -w parameter" + Wscript.Quit(intError) + Exit Function + end if + else + Wscript.Echo "Error! Arguments wrong, please verify -w parameter" + Wscript.Quit(intError) + Exit Function + end if + + End Function + +'------------------------------------------------------------------------------------------------- +'Function Name: f_GetCriticalValueFromRange(). +'Descripton: Get perform value at Local Host. +'Input: warningValueRange. +'Output: No. +'------------------------------------------------------------------------------------------------- + Function f_GetCriticalValueFromRange(criticalValue) + + On Error Resume Next + lCriticalValue = "" + uCriticalValue = "" + temp1 = 0 + temp1 = InStr(1, criticalValue, ":") + if(temp1 > 0) then + lCriticalTemp = Mid(criticalValue, 1, temp1 -1) + uCriticalTemp = Mid(criticalValue, temp1 +1, len(criticalValue) - temp1) + if(IsNumeric(lCriticalTemp) or IsNumeric(uCriticalTemp)) then + lCriticalValue = lCriticalTemp + uCriticalValue = uCriticalTemp + else + Wscript.Echo "Error! Arguments wrong, please verify -c parameter" + Wscript.Quit(intError) + Exit Function + end if + else + WScript.Echo "Error! Arguments wrong, please verify -c parameter" + Wscript.Quit(intError) + Exit Function + end if + + End Function + +'------------------------------------------------------------------------------------------------- +'Function Name: f_GetData. +'Descripton: Format data the same as output. +'Input: no. +'Output: No. +'------------------------------------------------------------------------------------------------- + Function f_GetData() + + On Error Resume Next + + ReDim strNameArray(Int(colWMI.count)) + ReDim counterValueArray(Int(colWMI.count)) + ReDim timerValueArray(Int(colWMI.count)) + ReDim intValueArray(Int(colWMI.count)) + + strDisplay1 = "" + strDisplay2 = "" + strResultTemp3 = "" + strResultTemp4 = "" + 'strResultTemp1 = "" + + strNameTemp = "" + strPropNameTemp = "" + counterValueTemp = 0 + timerValueTemp = 0 + timeBaseTemp = 0 + i, j = 0 + + For Each objWMITemp in colWMITemp + counterValueArray(i) = objWMITemp.Properties_(strProp) + timerValueArray(i) = objWMITemp.Properties_("TimeStamp_Sys100NS") + i = i + 1 + Next + + For Each objWMI in colWMI + strNameTemp = objWMI.Name + strPropNameTemp = objWMI.Properties_(strProp).Name + counterValueTemp = objWMI.Properties_(strProp) + timerValueTemp = objWMI.Properties_("TimeStamp_Sys100NS") + strNameArray(j) = strNameTemp + if((timerValueTemp - timerValueArray(j)) = 0) then + intValueArray(j) = 0 + else + intValueArray(j) = (100 * (counterValueTemp - counterValueArray(j))) / (timerValueTemp - timerValueArray(j)) + end if + j = j + 1 + Next + + for k = 0 to (Int(colWMI.count) - 1) + strName = strNameArray(k) + Dim strDSName + strDSName = f_FormatDSName(strName) + strPropName = strPropNameTemp + intValue = (intValueArray(k)) + if((warningValue <> "") or (criticalValue <> "")) then + strDisplay1 = strName & " '" & strPropName & "'" & " = " & intValue & "; " + strDisplay2 = "'" & strDSName & "'" & "=" & intValue & ";" & warningValue & ";" & criticalValue & ";; " + If(InStr(1, warningValue, ":") > 0 Or InStr(1, criticalValue, ":") > 0) Then + f_GetPrefixWithRange(intValue) + Else + f_GetPrefix(intValue) + End If + strResultTemp3 = strResultTemp3 & strPrefix & strDisplay1 + strResultTemp4 = strResultTemp4 & strDisplay2 + if( intReturnTemp1 < returnValue) then + intReturnTemp1 = returnValue + end if + else + strResultTemp3 = strResultTemp3 & "OK - " & strName & " '" & strPropName & "'" & " = " & intValue & "; " + strResultTemp4 = "" + end if + next + End Function + +'------------------------------------------------------------------------------------------------- +'Function Name: f_FormatDSName. +'Descripton: Get infomation at Local Host. +'Input: strName. +'Output: No. +'------------------------------------------------------------------------------------------------- + Function f_FormatDSName(strName) + + On Error Resume Next + + first = 1 + position1 = 0 + + position1 = InStr(first, strName, "=") + Dim proc_name + proc_name = "" + If(position1 > 0) Then + proc_name = Mid(strName,position1+1,(Len(strName)-position1)) + proc_name = Replace(proc_name,".","_") + proc_name = Replace(proc_name,"-","_") + proc_name = Mid(proc_name,1, 19) + + + Else + proc_name = Mid(strName,position1+1,(Len(strName)-position1)) + proc_name = Replace(proc_name,".","_") + proc_name = Replace(proc_name,"-","_") + proc_name = Mid(proc_name,1, 19) + + End If + f_FormatDSName = proc_name + Exit Function + End Function + +'------------------------------------------------------------------------------------------------- +'Function Name: f_GetInformation. +'Descripton: Get information data. +'Input: No. +'Output: Values. +'------------------------------------------------------------------------------------------------- + Function f_GetInformation() + + On Error Resume Next + + strResult = "" + strResult1 = "" + strResult2 = "" + intReturn = 0 + instance = strInst + first=1 + tam1=10 + tam = -1 + + If(instanceArraySize > 0 and (warningArraySize > 1 Or criticalArraySize > 1)) Then + for i = 0 to instanceArraySize -1 + instance = instanceArray(i) + warningValue = warningArray(i) + criticalValue = criticalArray(i) + f_GetInstance(instance) + strResult1 = strResult1 & strResultTemp1 + strResult2 = strResult2 & strResultTemp2 + if intReturn < intReturnTemp then + intReturn = intReturnTemp + end if + Next + Else + for i = 0 to instanceArraySize -1 + instance = instanceArray(i) + f_GetInstance(instance) + strResult1 = strResult1 & strResultTemp1 + strResult2 = strResult2 & strResultTemp2 + if intReturn < intReturnTemp then + intReturn = intReturnTemp + end if + Next + end if + if(strResult2 = "") then + strResult = strResult1 + else + strResult = strResult1 & "|" & strResult2 + end if + Wscript.Echo strResult + Wscript.Quit(intReturn) + + End Function + +'------------------------------------------------------------------------------------------------- +'Function Name: f_GetInstances. +'Descripton: Get Prefix. +'Input: No. +'Output: No. +'------------------------------------------------------------------------------------------------- + Function f_GetInstances() + + On Error Resume Next + + first = 1 + position = 0 + instanceArraySize = 0 + + position = InStr(first, strInst, ",") + if (position = 0) then + instanceTemp = strInst + InstanceArraySize = 1 + ReDim instanceArray(instanceArraySize) + instanceArray(0) = instanceTemp + + else + do while (position > 0) + instanceTemp = Mid(strInst,first,position - first) + instanceArraySize = instanceArraySize + 1 + ReDim Preserve instanceArray(instanceArraySize) + instanceArray(instanceArraySize -1) = Trim(instanceTemp) + first = position + 1 + position = InStr(first, strInst, ",") + loop + instanceTemp = Mid(strInst,first,len(strInst)) + instanceArraySize = instanceArraySize + 1 + ReDim Preserve instanceArray(instanceArraySize) + instanceArray(instanceArraySize -1) = Trim(instanceTemp) + end if + + End Function + +'------------------------------------------------------------------------------------------------- +'Function Name: f_GetWarningCriticalValues. +'Descripton: Get Prefix. +'Input: No. +'Output: No. +'------------------------------------------------------------------------------------------------- + Function f_GetWarningCriticalValues() + + On Error Resume Next + + position1 = 0 + position2 = 0 + position3 = 0 + position4 = 0 + temp1 = 1 + temp2 = 1 + warningArraySize = 0 + criticalArraySize = 0 + + 'get warning + position2 = InStr(temp1, warningValueString, ",") + If(position2 = 0) then + position2 = Len(warningValueString)+1 + end if + + If(position2 > position1) then + do while (position2 > position1) + warningPair = Mid(warningValueString, position1 + 1, (position2 - position1 -1)) + warningArraySize = warningArraySize + 1 + ReDim Preserve warningArray(warningArraySize) + warningArray(warningArraySize -1) = Trim(warningPair) + temp1 = position2 + 1 + position1 = position2 + position2 = InStr(temp1, warningValueString, ",") + If(position2 = 0) then + position2 = Len(warningValueString)+1 + End If + loop + end If + + If(Int(warningArraySize) < Int(instanceArraySize)) Then + ReDim Preserve warningArray(instanceArraySize) + For i = 0 To (instanceArraySize - warningArraySize - 1) + warningArray(warningArraySize +i) = warningArray(warningArraySize-1) + Next + warningArraySize = instanceArraySize + End If + 'get critical + position4 = InStr(temp2, criticalValueString, ",") + If(position4 = 0) then + position4 = Len(criticalValueString)+1 + end if + + If(position4 > position3) then + do while (position4 > position3) + criticalPair = Mid(criticalValueString, position3 + 1, (position4 - position3 -1)) + criticalArraySize = criticalArraySize + 1 + ReDim Preserve criticalArray(criticalArraySize) + criticalArray(criticalArraySize -1) = Trim(criticalPair) + temp2 = position4 + 1 + position3 = position4 + position4 = InStr(temp2, criticalValueString, ",") + If(position4 = 0) then + position4 = Len(criticalValueString)+1 + End If + loop + End If + If(Int(criticalArraySize) < Int(instanceArraySize)) Then + ReDim Preserve criticalArray(instanceArraySize) + For i = 0 To (instanceArraySize - criticalArraySize - 1) + criticalArray(criticalArraySize +i) = criticalArray(criticalArraySize-1) + Next + criticalArraySize = instanceArraySize + End If + + End Function + +'------------------------------------------------------------------------------------------------- +'Function Name: f_LocalPerfValue. +'Descripton: Get perform value at Local Host. +'Input: No. +'Output: No. +'------------------------------------------------------------------------------------------------- + Function f_LocalPerfValue() + + On Error Resume Next + + Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\" & strNameSpace) + f_Error() + + 'Set colInstances = GetObject("winmgmts:{impersonationLevel=impersonate}\\" & strComputer & "\" & strNameSpace).InstancesOf(strClass) + 'For Each objInstance in colInstances + 'Next + 'f_Error() + + f_GetInformation() + + End Function + +'------------------------------------------------------------------------------------------------- +'Function Name: f_RemotePerfValue. +'Descripton: Get perform values at Remote Host. +'Input: No. +'Output: Values. +'------------------------------------------------------------------------------------------------- + Function f_RemotePerfValue() + + On Error Resume Next + + Set objSWbemLocator = CreateObject("WbemScripting.SWbemLocator") + if (strDomain = "") then + Set objWMIService = objSWbemLocator.ConnectServer _ + (strComputer, strNameSpace , strUser, strPass ) + f_Error() + + 'Set colInstances = objSWbemLocator.ConnectServer(strComputer, strNamespace , strUser, strPass).InstancesOf(strClass) + 'For Each objInstance in colInstances + 'Next + 'f_Error() + else + Set objWMIService = objSWbemLocator.ConnectServer _ + (strComputer, strNameSpace , strUser, strPass,"MS_409","ntlmdomain:" + strDomain ) + f_Error() + + 'Set colInstances = objSWbemLocator.ConnectServer(strComputer, strNamespace , strUser, strPass,"MS_409","ntlmdomain:" & strDomain ).InstancesOf(strClass) + 'For Each objInstance in colInstances + 'Next + 'f_Error() + end if + objWMIService.Security_.ImpersonationLevel = 3 + f_Error() + + f_GetInformation() + + End Function + +'************************************************************************************************* +' Main Function +'************************************************************************************************* + + '///////////////////// + + strCommandName="check_counter_bulk_count.vbs" + strDescription="Enumerate the needed windows host information." + + '///////////////////// + + strNameSpace = "root\cimv2" + + f_GetAllArg() + tempCount = argcountcommand/2 + f_Error() + strClass = "" + + if ((UCase(arg(0))="-H") Or (UCase(arg(0))="--HELP")) and (argcountcommand=1) then + f_help() + else + if( ((argcountcommand Mod 2) = 0) and (3 < tempCount < 11)) then + strComputer = f_GetOneArg("-h") + strClass = f_GetOneArg("-class") + strProp = f_GetOneArg("-prop") + strInst = f_GetOneArg("-inst") + f_GetInstances() + warningValue = f_GetOneArg("-w") + warningValueString = f_GetOneArg("-w") + criticalValue = f_GetOneArg("-c") + criticalValueString = f_GetOneArg("-c") + If((warningValueString <> "") Or (criticalValueString <> "")) Then + f_GetWarningCriticalValues() + End if + strUser = f_GetOneArg("-user") + strPass = f_GetOneArg("-pass") + strDomain = f_GetOneArg("-domain") + if((strComputer = "") or (strClass = "") or (strProp = "") or (strInst = "")) then + Wscript.Echo "Error! Arguments wrong, require verify -h -class -prop -inst parameters" + Wscript.Quit(intError) + else + Select Case tempCount + Case 4: + f_LocalPerfValue() + Case 6: + if ((warningValue <> "") and (criticalValue <> "")) then + f_LocalPerfValue() + end if + if ((strUser <> "") and (strPass <> "")) then + f_RemotePerfValue() + else + Wscript.Echo "Error! Arguments wrong, please verify -user -pass or -w -c parameters" + Wscript.Quit(intError) + end if + Case 8: + if ((strUser <> "") and (strPass <> "") and (warningValue <> "") and (criticalValue <> "")) then + f_RemotePerfValue() + else + Wscript.Echo "Error! Arguments wrong for remote check, please verify -w -c -user -pass parameters" + Wscript.Quit(intError) + end if + Case 9: + if ((strUser <> "") and (strPass <> "") and (warningValue <> "") and (criticalValue <> "") and (strDomain <> "")) then + f_RemotePerfValue() + else + Wscript.Echo "Error! Arguments wrong for remote check, please verify -w -c -user -pass -domain parameters" + Wscript.Quit(intError) + end if + Case Else + Wscript.Echo "Error! Arguments wrong, please type -h for Help" + Wscript.Quit(intError) + End Select + + end if + else + Wscript.Echo "Error! Arguments wrong, please type -h for Help" + Wscript.Quit(intError) + end if + + end if \ No newline at end of file diff --git a/nsclient/trunk/scripts/wmi/check_counter_bulk_count.vbs b/nsclient/trunk/scripts/wmi/check_counter_bulk_count.vbs new file mode 100644 index 0000000..6930c71 --- /dev/null +++ b/nsclient/trunk/scripts/wmi/check_counter_bulk_count.vbs @@ -0,0 +1,897 @@ +' Copyright 2007 GroundWork Open Source Inc. +' +' This program is free software; you can redistribute it and/or +' modify it under the terms of the GNU General Public License +' as published by the Free Software Foundation; version 2 +' of the License. +' +' This program is distributed in the hope that it will be useful, +' but WITHOUT ANY WARRANTY; without even the implied warranty of +' MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +' GNU General Public License for more details. +' +' +' Author Dr. Dave Blunt at GroundWork Open Source Inc. (dblunt@groundworkopensource.com) + +'************************************************************************************************* +' Public Variable +'************************************************************************************************* +Const intOK = 0 +Const intWarning = 1 +Const intCritical = 2 +Const intError = 3 +Const intUnknown = 3 + +Dim argcountcommand +Dim arg(20) +Dim strComputer +Dim strClass +Dim strProp +Dim strInst +Dim warningValue +Dim warningValueString +Dim criticalValue +Dim criticalValueString +Dim strUser +Dim strPass +Dim strDomain +Dim strNameSpace +Dim strDescription +Dim strCommandName +Dim strResultTemp +Dim strResult +Dim strResult1 +Dim strResult2 +Dim intReturnTemp +Dim intReturn +Dim strResultTemp1 +Dim strResultTemp2 +Dim strResultTemp3 +Dim strResultTemp4 +Dim intReturnTemp1 +Dim strPrefix +Dim returnValue +Dim strPropBase +Dim strNameTemp +Dim strPropNameTemp +Dim timeBaseTemp +Dim counterValueArray() +Dim timerValueTempArray() +Dim strNameArray() +Dim intValueArray() +Dim strPropName +Dim instanceArray() +Dim instanceArraySize +Dim warningArraySize +Dim criticalArraySize +Dim warningArray() +Dim criticalArray() +Dim instance +Dim propArray() +Dim propArraySize +Dim lWarningValue +Dim uWarningValue +Dim lCriticalValue +Dim uCriticalValue + +Dim ArgCount +Dim strArgMain(10) +Dim strArgSortDes(10) +Dim strArgDetailDes(10) +Dim strArgExample(10) + +Dim objWMIService, colWMI, colWMITemp, objWMI, objSWbemLocator + +strComputer="" +strClass = "" +strProp = "" +strInst = "" +warningValue = -1 +criticalValue = -1 +strUser = "" +strPass = "" +strDomain = "" + +intReturnTemp1 = 0 + +'************************************************************************************************* +' Functions and Subs +'************************************************************************************************* + +'------------------------------------------------------------------------------------------------- +'Function Name: f_Error. +'Descripton: Display an error notice include : Error Number and Error Description. +'Input: No. +'Output: No. +'------------------------------------------------------------------------------------------------- + Function f_Error() + + nbrError = err.number + if (nbrError <> 0 ) then + Select Case nbrError + Case 462, -2147023174 + strExitMsg = "Timeout connecting to WMI on this host! Error Number: " & nbrError & " Description: " & err.description + Case -2147024891 + strExitMsg = "Authentication failure to remote host! Error Number: " & nbrError & " Description: " & err.description + Case -2147217392 + strExitMsg = "Error! Number: " & nbrError & " Description: Invalid Class" + Case Else + strExitMsg = "Error! Number: " & nbrError & " Description: " & err.description + End Select + wscript.echo strExitMsg + wscript.quit(intUnknown) + end if + + End Function + +'------------------------------------------------------------------------------------------------- +'Function Name: f_Help. +'Descripton: Display help of command include : Description, Arguments, Examples +'Input: No. +'Output: No. +'------------------------------------------------------------------------------------------------- + Function f_Help() + + Dim str + str="Check Counter bulk count. If your Local Machine has the same Administrator account and password as the Remote Machine then you don't have to use the two last parameters."&vbCrlF&vbCrlF + str=str&"cscript check_counter_bulk_count.vbs -h hostname -class classname -prop property -inst instancename [-w warning_level -c critical_level] [-user username -pass password [-domain domain]]"&vbCrlF + str=str&vbCrlF + str=str&"-h [--help] Help."&vbCrlF + str=str&"-h hostname Host name."&vbCrlF + str=str&"-class classname Class name."&vbCrlF + str=str&"-prop property Property of Class."&vbCrlF + str=str&"-inst instance Needed Instance, can be * for all"&vbCrlF + str=str&"-w warning_level Warning threshold."&vbCrlF + str=str&"-c critical_level Critical threshold."&vbCrlF + str=str&"-user username Account Administrator on Remote Machine."&vbCrlF + str=str&"-pass password Password Account Administrator on Remote Machine."&vbCrlF + str=str&"-domain domain Domain Name of Remote Machine."&vbCrlF + str=str&vbCrlF + str=str&"Example: cscript check_counter_bulk_count.vbs -h Ser1 -class Win32_PerfRawData_PerfOS_System -prop FileControlBytesPerSec -inst ""*"" -w 30 -c 70 [-user Ser1\Administrator -pass password -domain ITSP] " + wscript.echo str + + End Function +'------------------------------------------------------------------------------------------------- +'Function Name: f_GetAllArg. +'Descripton: Get all of arguments from command. +'Input: No. +'Output: No. +'------------------------------------------------------------------------------------------------- + Function f_GetAllArg() + + On Error Resume Next + + Dim i + + argcountcommand=WScript.Arguments.Count + + for i=0 to argcountcommand-1 + arg(i)=WScript.Arguments(i) + next + + End Function +'------------------------------------------------------------------------------------------------- +'Function Name: f_GetOneArg. +'Descripton: Get an argument from command. +'Input: Yes. +' strName: Name of argument +'Output: Value. +'------------------------------------------------------------------------------------------------- + Function f_GetOneArg(strName) + + On Error Resume Next + + Dim i + for i=0 to argcountcommand-1 + if (Ucase(arg(i))=Ucase(strName)) then + f_GetOneArg=arg(i+1) + Exit Function + end if + next + + End Function + +'------------------------------------------------------------------------------------------------- +'Function Name: f_GetInstance. +'Descripton: Get infomation at Local Host. +'Input: instance. +'Output: No. +'------------------------------------------------------------------------------------------------- + Function f_GetInstance(instance) + + On Error Resume Next + + strResultTemp1 = "" + strResultTemp2 = "" + strResultTemp = "" + intResultTemp = 0 + strPropBase = "" + + strInstanceTemp1 = "" + strInstanceTemp2 = "" + intInstanceTemp1 = 0 + intInstanceTemp2 = 0 + + 'Depend on strInfo parameters to get the result value + if(instance = "*") then + strQuery = "Select " & strProp & ", TimeStamp_PerfTime, Frequency_PerfTime" & " from " & strClass + Set colWMITemp = objWMIService.ExecQuery(strQuery) + Wscript.Sleep(1000) + Set colWMI = objWMIService.ExecQuery(strQuery) + else + + intInstanceTemp1 = InStr(1,instance,"=") + strInstanceTemp1 = Mid(instance,1,intInstanceTemp1-1) + intInstanceTemp2 = Len(instance) + strInstanceTemp2 = Mid(instance,intInstanceTemp1+1,intInstanceTemp2-intInstanceTemp1) + instance=strInstanceTemp1 & "='" & strInstanceTemp2 & "'" + + strQuery = "Select " & strProp & ", TimeStamp_PerfTime, Frequency_PerfTime" & " from " & strClass & " where " & instance + Set colWMITemp = objWMIService.ExecQuery(strQuery) + Wscript.Sleep(1000) + Set colWMI = objWMIService.ExecQuery(strQuery) + end if + + count = -1 + count = colWMI.count + if(count = -1) then + Wscript.Echo "Unknown - No data received from WMI;" + Wscript.Quit(intUnknown) + else + if(colWMI.count > 0) then + f_GetData() + strResultTemp1 = strResultTemp1 & strResultTemp3 + strResultTemp2 = strResultTemp2 & strResultTemp4 + intReturnTemp = intReturnTemp1 + Exit Function + else + strResultTemp1 = "Unknown - " & instance &" query: No row returned." + intReturnTemp = intUnknown + Exit Function + end if + end if + End Function + +'------------------------------------------------------------------------------------------------- +'Function Name: f_GetPrefix. +'Descripton: Get Prefix. +'Input: No. +'Output: No. +'------------------------------------------------------------------------------------------------- + Function f_GetPrefix(intValue) + + On Error Resume Next + + strPrefix = "" + If(warningValue <> "" And criticalValue = "") Then + If (IsNumeric(warningValue)) Then + If (Int(intValue) < Int(warningValue)) Then + returnValue=0 + strPrefix= "OK - " + Else + returnValue=1 + strPrefix= "Warning - " + End If + Else + Wscript.Echo "Error! Arguments wrong, please verify -w parameter" + Wscript.Quit(intError) + Exit Function + End If + End If + If(warningValue = "" And criticalValue <> "") Then + If (IsNumeric(criticalValue)) Then + If (Int(intValue) < Int(criticalValue)) Then + returnValue=0 + strPrefix= "OK - " + Else + returnValue=2 + strPrefix= "Critical - " + End If + Else + Wscript.Echo "Error! Arguments wrong, please verify -c parameter" + Wscript.Quit(intError) + Exit Function + End If + End If + If (warningValue <> "" And criticalValue <> "") Then + If (IsNumeric(warningValue) And IsNumeric(criticalValue)) Then + if (Int(warningValue) < Int(criticalValue)) then + + if (Int(intValue) < Int(warningValue)) then + returnValue=0 + strPrefix= "OK - " + else + if (Int(intValue) < Int(criticalValue)) then + returnValue=1 + strPrefix= "Warning - " + else + returnValue=2 + strPrefix= "Critical - " + end if + end if + else + if (Int(intValue) > Int(warningValue)) then + returnValue=0 + strPrefix= "OK - " + else + if (Int(intValue) > Int(criticalValue)) then + returnValue=1 + strPrefix= "Warning - " + else + returnValue=2 + strPrefix= "Critical - " + end if + end if + end If + Else + Wscript.Echo "Error! Arguments wrong, please verify -w -c parameter" + Wscript.Quit(intError) + Exit Function + End If + End If + + End Function + +'------------------------------------------------------------------------------------------------- +'Function Name: f_GetPrefixWithRange. +'Descripton: Get Prefix. +'Input: No. +'Output: No. +'------------------------------------------------------------------------------------------------- + Function f_GetPrefixWithRange(intValue) + + On Error Resume Next + lWarningValue = "" + uWarningValue = "" + lCriticalValue= "" + uCriticalValue= "" + warningReturn = 0 + criticalReturn = 0 + If(warningValue <> "") Then + f_GetWarningValueFromRange(warningValue) + End If + If(criticalValue <> "") Then + f_GetCriticalValueFromRange(criticalValue) + End If + strPrefix = "" + 'verify warning + If((lWarningValue <> "") And (uWarningValue <> "")) Then + If(Int(lWarningValue) <= Int(uWarningValue)) Then + If((Int(lWarningValue) >= Int(intValue)) Or (Int(intValue) >= Int(uWarningValue))) Then + warningReturn=1 + End If + Else + If((Int(intValue) >= Int(uWarningValue) ) And (Int(intValue) <= Int(lWarningValue))) Then + warningReturn=1 + End If + End If + End If + If((lWarningValue <> "") And (uWarningValue = "")) Then + If(Int(intValue) <= Int(lWarningValue)) Then + warningReturn=1 + End If + End If + If((lWarningValue = "") And (uWarningValue <> "")) Then + If(Int(intValue) >= Int(uWarningValue)) Then + warningReturn=1 + End If + End If + + 'verify critical + If((lCriticalValue <> "") And (uCriticalValue <> "")) Then + If(Int(lCriticalValue) <= Int(uCriticalValue)) Then + If((Int(lCriticalValue) >= Int(intValue)) Or (Int(intValue) >= Int(uCriticalValue))) Then + criticalReturn=2 + End If + Else + If((Int(intValue) >= Int(uCriticalValue) ) And (Int(intValue) <= Int(lCriticalValue))) Then + criticalReturn=2 + End If + End If + End If + If((lCriticalValue <> "") And (uCriticalValue = "")) Then + If(Int(intValue) <= Int(lCriticalValue)) Then + criticalReturn=2 + End If + End If + If((lCriticalValue = "") And (uCriticalValue <> "")) Then + If(Int(intValue) >= Int(uCriticalValue)) Then + criticalReturn=2 + End If + End If + + 'return result + If(criticalReturn = 2) Then + returnValue=2 + strPrefix= "Critical - " + Else + If(warningReturn = 1) Then + returnValue=1 + strPrefix= "Warning - " + Else + returnValue=0 + strPrefix= "Ok - " + End If + End If + + End Function + +'------------------------------------------------------------------------------------------------- +'Function Name: f_GetWarningValueFromRange(). +'Descripton: Get perform value at Local Host. +'Input: warningValueRange. +'Output: No. +'------------------------------------------------------------------------------------------------- + Function f_GetWarningValueFromRange(warningValue) + + On Error Resume Next + lWarningValue = "" + uWarningValue = "" + temp1 = 0 + temp1 = InStr(1, warningValue, ":") + if(temp1 > 0) then + lWarningTemp = Mid(warningValue, 1, temp1 -1) + uWarningTemp = Mid(warningValue, temp1 +1, len(warningValue) - temp1) + if(IsNumeric(lWarningTemp) or IsNumeric(uWarningTemp)) then + lWarningValue = lWarningTemp + uWarningValue = uWarningTemp + else + Wscript.Echo "Error! Arguments wrong, please verify -w parameter" + Wscript.Quit(intError) + Exit Function + end if + else + Wscript.Echo "Error! Arguments wrong, please verify -w parameter" + Wscript.Quit(intError) + Exit Function + end if + + End Function + +'------------------------------------------------------------------------------------------------- +'Function Name: f_GetCriticalValueFromRange(). +'Descripton: Get perform value at Local Host. +'Input: warningValueRange. +'Output: No. +'------------------------------------------------------------------------------------------------- + Function f_GetCriticalValueFromRange(criticalValue) + + On Error Resume Next + lCriticalValue = "" + uCriticalValue = "" + temp1 = 0 + temp1 = InStr(1, criticalValue, ":") + if(temp1 > 0) then + lCriticalTemp = Mid(criticalValue, 1, temp1 -1) + uCriticalTemp = Mid(criticalValue, temp1 +1, len(criticalValue) - temp1) + if(IsNumeric(lCriticalTemp) or IsNumeric(uCriticalTemp)) then + lCriticalValue = lCriticalTemp + uCriticalValue = uCriticalTemp + else + Wscript.Echo "Error! Arguments wrong, please verify -c parameter" + Wscript.Quit(intError) + Exit Function + end if + else + WScript.Echo "Error! Arguments wrong, please verify -c parameter" + Wscript.Quit(intError) + Exit Function + end if + + End Function + +'------------------------------------------------------------------------------------------------- +'Function Name: f_GetData. +'Descripton: Format data the same as output. +'Input: no. +'Output: No. +'------------------------------------------------------------------------------------------------- + Function f_GetData() + + On Error Resume Next + + ReDim strNameArray(Int(colWMI.count)) + ReDim counterValueArray(Int(colWMI.count)) + ReDim timerValueArray(Int(colWMI.count)) + ReDim intValueArray(Int(colWMI.count)) + + strDisplay1 = "" + strDisplay2 = "" + strResultTemp3 = "" + strResultTemp4 = "" + 'strResultTemp1 = "" + + strNameTemp = "" + strPropNameTemp = "" + counterValueTemp = 0 + timerValueTemp = 0 + timeBaseTemp = 0 + i, j = 0 + + For Each objWMITemp in colWMITemp + counterValueArray(i) = objWMITemp.Properties_(strProp) + timerValueArray(i) = objWMITemp.Properties_("TimeStamp_PerfTime") + i = i + 1 + Next + + For Each objWMI in colWMI + strNameTemp = objWMI.Name + strPropNameTemp = objWMI.Properties_(strProp).Name + counterValueTemp = objWMI.Properties_(strProp) + timerValueTemp = objWMI.Properties_("TimeStamp_PerfTime") + timeBase = objWMI.Properties_("Frequency_PerfTime") + strNameArray(j) = strNameTemp + if((timerValueTemp - timerValueArray(j)) = 0) then + intValueArray(j) = 0 + else + intValueArray(j) = (counterValueTemp - counterValueArray(j)) / ((timerValueTemp - timerValueArray(j)) / timeBase) + end if + j = j + 1 + Next + + for k = 0 to (Int(colWMI.count) - 1) + strName = strNameArray(k) + Dim strDSName + strDSName = f_FormatDSName(strName) + strPropName = strPropNameTemp + intValue = intValueArray(k) + if((warningValue <> "") and (criticalValue <> "")) then + strDisplay1 = strName & " '" & strPropName & "'" & " = " & intValue & "; " + strDisplay2 = "'" & strDSName & "'" & "=" & intValue & ";" & warningValue & ";" & criticalValue & ";; " + If(InStr(1, warningValue, ":") > 0 Or InStr(1, criticalValue, ":") > 0) Then + f_GetPrefixWithRange(intValue) + Else + f_GetPrefix(intValue) + End If + strResultTemp3 = strResultTemp3 & strPrefix & strDisplay1 + strResultTemp4 = strResultTemp4 & strDisplay2 + if( intReturnTemp1 < returnValue) then + intReturnTemp1 = returnValue + end if + else + strResultTemp3 = strResultTemp3 & "OK - " & strName & " '" & strPropName & "'" & " = " & intValue & "; " + strResultTemp4 = "" + end if + next + End Function + +'------------------------------------------------------------------------------------------------- +'Function Name: f_FormatDSName. +'Descripton: Get infomation at Local Host. +'Input: strName. +'Output: No. +'------------------------------------------------------------------------------------------------- + Function f_FormatDSName(strName) + + On Error Resume Next + + first = 1 + position1 = 0 + + position1 = InStr(first, strName, "=") + Dim proc_name + proc_name = "" + If(position1 > 0) Then + proc_name = Mid(strName,position1+1,(Len(strName)-position1)) + proc_name = Replace(proc_name,".","_") + proc_name = Replace(proc_name,"-","_") + proc_name = Mid(proc_name,1, 19) + + + Else + proc_name = Mid(strName,position1+1,(Len(strName)-position1)) + proc_name = Replace(proc_name,".","_") + proc_name = Replace(proc_name,"-","_") + proc_name = Mid(proc_name,1, 19) + + End If + f_FormatDSName = proc_name + Exit Function + End Function + +'------------------------------------------------------------------------------------------------- +'Function Name: f_GetInformation. +'Descripton: Get information data. +'Input: No. +'Output: Values. +'------------------------------------------------------------------------------------------------- + Function f_GetInformation() + + On Error Resume Next + + strResult = "" + strResult1 = "" + strResult2 = "" + intReturn = 0 + instance = strInst + first=1 + tam1=10 + tam = -1 + + If(instanceArraySize > 0 and (warningArraySize > 1 Or criticalArraySize > 1)) Then + for i = 0 to instanceArraySize -1 + instance = instanceArray(i) + warningValue = warningArray(i) + criticalValue = criticalArray(i) + f_GetInstance(instance) + strResult1 = strResult1 & strResultTemp1 + strResult2 = strResult2 & strResultTemp2 + if intReturn < intReturnTemp then + intReturn = intReturnTemp + end if + Next + Else + for i = 0 to instanceArraySize -1 + instance = instanceArray(i) + f_GetInstance(instance) + strResult1 = strResult1 & strResultTemp1 + strResult2 = strResult2 & strResultTemp2 + if intReturn < intReturnTemp then + intReturn = intReturnTemp + end if + Next + end if + if(strResult2 = "") then + strResult = strResult1 + else + strResult = strResult1 & "|" & strResult2 + end if + Wscript.Echo strResult + Wscript.Quit(intReturn) + + End Function + +'------------------------------------------------------------------------------------------------- +'Function Name: f_GetInstances. +'Descripton: Get Prefix. +'Input: No. +'Output: No. +'------------------------------------------------------------------------------------------------- + Function f_GetInstances() + + On Error Resume Next + + first = 1 + position = 0 + instanceArraySize = 0 + + position = InStr(first, strInst, ",") + if (position = 0) then + instanceTemp = strInst + InstanceArraySize = 1 + ReDim instanceArray(instanceArraySize) + instanceArray(0) = instanceTemp + + else + do while (position > 0) + instanceTemp = Mid(strInst,first,position - first) + instanceArraySize = instanceArraySize + 1 + ReDim Preserve instanceArray(instanceArraySize) + instanceArray(instanceArraySize -1) = Trim(instanceTemp) + first = position + 1 + position = InStr(first, strInst, ",") + loop + instanceTemp = Mid(strInst,first,len(strInst)) + instanceArraySize = instanceArraySize + 1 + ReDim Preserve instanceArray(instanceArraySize) + instanceArray(instanceArraySize -1) = Trim(instanceTemp) + end if + + End Function + +'------------------------------------------------------------------------------------------------- +'Function Name: f_GetWarningCriticalValues. +'Descripton: Get Prefix. +'Input: No. +'Output: No. +'------------------------------------------------------------------------------------------------- + Function f_GetWarningCriticalValues() + + On Error Resume Next + + position1 = 0 + position2 = 0 + position3 = 0 + position4 = 0 + temp1 = 1 + temp2 = 1 + warningArraySize = 0 + criticalArraySize = 0 + + 'get warning + position2 = InStr(temp1, warningValueString, ",") + If(position2 = 0) then + position2 = Len(warningValueString)+1 + end if + + If(position2 > position1) then + do while (position2 > position1) + warningPair = Mid(warningValueString, position1 + 1, (position2 - position1 -1)) + warningArraySize = warningArraySize + 1 + ReDim Preserve warningArray(warningArraySize) + warningArray(warningArraySize -1) = Trim(warningPair) + temp1 = position2 + 1 + position1 = position2 + position2 = InStr(temp1, warningValueString, ",") + If(position2 = 0) then + position2 = Len(warningValueString)+1 + End If + loop + end If + + If(Int(warningArraySize) < Int(instanceArraySize)) Then + ReDim Preserve warningArray(instanceArraySize) + For i = 0 To (instanceArraySize - warningArraySize - 1) + warningArray(warningArraySize +i) = warningArray(warningArraySize-1) + Next + warningArraySize = instanceArraySize + End If + 'get critical + position4 = InStr(temp2, criticalValueString, ",") + If(position4 = 0) then + position4 = Len(criticalValueString)+1 + end if + + If(position4 > position3) then + do while (position4 > position3) + criticalPair = Mid(criticalValueString, position3 + 1, (position4 - position3 -1)) + criticalArraySize = criticalArraySize + 1 + ReDim Preserve criticalArray(criticalArraySize) + criticalArray(criticalArraySize -1) = Trim(criticalPair) + temp2 = position4 + 1 + position3 = position4 + position4 = InStr(temp2, criticalValueString, ",") + If(position4 = 0) then + position4 = Len(criticalValueString)+1 + End If + loop + End If + If(Int(criticalArraySize) < Int(instanceArraySize)) Then + ReDim Preserve criticalArray(instanceArraySize) + For i = 0 To (instanceArraySize - criticalArraySize - 1) + criticalArray(criticalArraySize +i) = criticalArray(criticalArraySize-1) + Next + criticalArraySize = instanceArraySize + End If + + End Function + +'------------------------------------------------------------------------------------------------- +'Function Name: f_LocalPerfValue. +'Descripton: Get perform value at Local Host. +'Input: No. +'Output: No. +'------------------------------------------------------------------------------------------------- + Function f_LocalPerfValue() + + On Error Resume Next + + Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\" & strNameSpace) + f_Error() + + 'Set colInstances = GetObject("winmgmts:{impersonationLevel=impersonate}\\" & strComputer & "\" & strNameSpace).InstancesOf(strClass) + 'For Each objInstance in colInstances + 'Next + 'f_Error() + + f_GetInformation() + + End Function + +'------------------------------------------------------------------------------------------------- +'Function Name: f_RemotePerfValue. +'Descripton: Get perform values at Remote Host. +'Input: No. +'Output: Values. +'------------------------------------------------------------------------------------------------- + Function f_RemotePerfValue() + + On Error Resume Next + + Set objSWbemLocator = CreateObject("WbemScripting.SWbemLocator") + if (strDomain = "") then + Set objWMIService = objSWbemLocator.ConnectServer _ + (strComputer, strNameSpace , strUser, strPass ) + f_Error() + + 'Set colInstances = objSWbemLocator.ConnectServer(strComputer, strNamespace , strUser, strPass).InstancesOf(strClass) + 'For Each objInstance in colInstances + 'Next + 'f_Error() + else + Set objWMIService = objSWbemLocator.ConnectServer _ + (strComputer, strNameSpace , strUser, strPass,"MS_409","ntlmdomain:" + strDomain ) + f_Error() + + 'Set colInstances = objSWbemLocator.ConnectServer(strComputer, strNamespace , strUser, strPass,"MS_409","ntlmdomain:" & strDomain ).InstancesOf(strClass) + 'For Each objInstance in colInstances + 'Next + 'f_Error() + end if + objWMIService.Security_.ImpersonationLevel = 3 + f_Error() + + f_GetInformation() + + End Function + +'************************************************************************************************* +' Main Function +'************************************************************************************************* + + '///////////////////// + + strCommandName="check_counter_bulk_count.vbs" + strDescription="Enumerate the needed windows host information." + + '///////////////////// + + strNameSpace = "root\cimv2" + + f_GetAllArg() + tempCount = argcountcommand/2 + f_Error() + strClass = "" + + if ((UCase(arg(0))="-H") Or (UCase(arg(0))="--HELP")) and (argcountcommand=1) then + f_help() + else + if( ((argcountcommand Mod 2) = 0) and (3 < tempCount < 11)) then + strComputer = f_GetOneArg("-h") + strClass = f_GetOneArg("-class") + strProp = f_GetOneArg("-prop") + strInst = f_GetOneArg("-inst") + f_GetInstances() + warningValue = f_GetOneArg("-w") + warningValueString = f_GetOneArg("-w") + criticalValue = f_GetOneArg("-c") + criticalValueString = f_GetOneArg("-c") + If((warningValueString <> "") Or (criticalValueString <> "")) Then + f_GetWarningCriticalValues() + End if + strUser = f_GetOneArg("-user") + strPass = f_GetOneArg("-pass") + strDomain = f_GetOneArg("-domain") + if((strComputer = "") or (strClass = "") or (strProp = "") or (strInst = "")) then + Wscript.Echo "Error! Arguments wrong, require verify -h -class -prop -inst parameters" + Wscript.Quit(intError) + else + Select Case tempCount + Case 4: + f_LocalPerfValue() + Case 6: + if ((warningValue <> "") and (criticalValue <> "")) then + f_LocalPerfValue() + end if + if ((strUser <> "") and (strPass <> "")) then + f_RemotePerfValue() + else + Wscript.Echo "Error! Arguments wrong, please verify -user -pass or -w -c parameters" + Wscript.Quit(intError) + end if + Case 8: + if ((strUser <> "") and (strPass <> "") and (warningValue <> "") and (criticalValue <> "")) then + f_RemotePerfValue() + else + Wscript.Echo "Error! Arguments wrong for remote check, please verify -w -c -user -pass parameters" + Wscript.Quit(intError) + end if + Case 9: + if ((strUser <> "") and (strPass <> "") and (warningValue <> "") and (criticalValue <> "") and (strDomain <> "")) then + f_RemotePerfValue() + else + Wscript.Echo "Error! Arguments wrong for remote check, please verify -w -c -user -pass -domain parameters" + Wscript.Quit(intError) + end if + Case Else + Wscript.Echo "Error! Arguments wrong, please type -h for Help" + Wscript.Quit(intError) + End Select + + end if + else + Wscript.Echo "Error! Arguments wrong, please type -h for Help" + Wscript.Quit(intError) + end if + + end if \ No newline at end of file diff --git a/nsclient/trunk/scripts/wmi/check_counter_counter.vbs b/nsclient/trunk/scripts/wmi/check_counter_counter.vbs new file mode 100644 index 0000000..eeef3cb --- /dev/null +++ b/nsclient/trunk/scripts/wmi/check_counter_counter.vbs @@ -0,0 +1,895 @@ +' Copyright 2007 GroundWork Open Source Inc. +' +' This program is free software; you can redistribute it and/or +' modify it under the terms of the GNU General Public License +' as published by the Free Software Foundation; version 2 +' of the License. +' +' This program is distributed in the hope that it will be useful, +' but WITHOUT ANY WARRANTY; without even the implied warranty of +' MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +' GNU General Public License for more details. +' +' +' Author Dr. Dave Blunt at GroundWork Open Source Inc. (dblunt@groundworkopensource.com) + +'************************************************************************************************* +' Public Variable +'************************************************************************************************* +Const intOK = 0 +Const intWarning = 1 +Const intCritical = 2 +Const intError = 3 +Const intUnknown = 3 + +Dim argcountcommand +Dim arg(20) +Dim strComputer +Dim strClass +Dim strProp +Dim strInst +Dim warningValue +Dim warningValueString +Dim criticalValue +Dim criticalValueString +Dim strUser +Dim strPass +Dim strDomain +Dim strNameSpace +Dim strDescription +Dim strCommandName +Dim strResultTemp +Dim strResult +Dim strResult1 +Dim strResult2 +Dim intReturnTemp +Dim intReturn +Dim strResultTemp1 +Dim strResultTemp2 +Dim strResultTemp3 +Dim strResultTemp4 +Dim intReturnTemp1 +Dim strPrefix +Dim returnValue +Dim strPropBase +Dim strNameTemp +Dim strPropNameTemp +Dim timeBaseTemp +Dim counterValueArray() +Dim timerValueTempArray() +Dim strNameArray() +Dim intValueArray() +Dim strPropName +Dim instanceArray() +Dim instanceArraySize +Dim warningArraySize +Dim criticalArraySize +Dim warningArray() +Dim criticalArray() +Dim instance +Dim propArray() +Dim propArraySize +Dim lWarningValue +Dim uWarningValue +Dim lCriticalValue +Dim uCriticalValue + +Dim ArgCount +Dim strArgMain(10) +Dim strArgSortDes(10) +Dim strArgDetailDes(10) +Dim strArgExample(10) + +Dim objWMIService, colWMI, colWMITemp, objWMI, objSWbemLocator + +strComputer="" +strClass = "" +strProp = "" +strInst = "" +warningValue = -1 +criticalValue = -1 +strUser = "" +strPass = "" +strDomain = "" + +intReturnTemp1 = 0 +'************************************************************************************************* +' Functions and Subs +'************************************************************************************************* + +'------------------------------------------------------------------------------------------------- +'Function Name: f_Error. +'Descripton: Display an error notice include : Error Number and Error Description. +'Input: No. +'Output: No. +'------------------------------------------------------------------------------------------------- + Function f_Error() + + nbrError = err.number + if (nbrError <> 0 ) then + Select Case nbrError + Case 462, -2147023174 + strExitMsg = "Timeout connecting to WMI on this host! Error Number: " & nbrError & " Description: " & err.description + Case -2147024891 + strExitMsg = "Authentication failure to remote host! Error Number: " & nbrError & " Description: " & err.description + Case -2147217392 + strExitMsg = "Error! Number: " & nbrError & " Description: Invalid Class" + Case Else + strExitMsg = "Error! Number: " & nbrError & " Description: " & err.description + End Select + wscript.echo strExitMsg + wscript.quit(intUnknown) + end if + + End Function + +'------------------------------------------------------------------------------------------------- +'Function Name: f_Help. +'Descripton: Display help of command include : Description, Arguments, Examples +'Input: No. +'Output: No. +'------------------------------------------------------------------------------------------------- + Function f_Help() + + Dim str + str="Check Counter Counter. If your Local Machine has the same Administrator account and password as the Remote Machine then you don't have to use the two last parameters."&vbCrlF&vbCrlF + str=str&"cscript check_counter_counter.vbs -h hostname -class classname -prop property -inst instancename [-w warning_level -c critical_level] [-user username -pass password [-domain domain]]"&vbCrlF + str=str&vbCrlF + str=str&"-h [--help] Help."&vbCrlF + str=str&"-h hostname Host name."&vbCrlF + str=str&"-class classname Class name."&vbCrlF + str=str&"-prop property Property of Class."&vbCrlF + str=str&"-inst instance Needed Instance, can be * for all"&vbCrlF + str=str&"-w warning_level Warning threshold."&vbCrlF + str=str&"-c critical_level Critical threshold."&vbCrlF + str=str&"-user username Account Administrator on Remote Machine."&vbCrlF + str=str&"-pass password Password Account Administrator on Remote Machine."&vbCrlF + str=str&"-domain domain Domain Name of Remote Machine."&vbCrlF + str=str&vbCrlF + str=str&"Example: cscript check_counter_counter.vbs -h Ser1 -class Win32_PerfRawData_PerfOS_Processor -prop InterruptsPerSec -inst ""*"" -w 30 -c 70 [-user Ser1\Administrator -pass password -domain ITSP] " + str=str&"Example: cscript check_counter_counter.vbs -h Ser1 -class Win32_PerfRawData_PerfOS_Processor -prop InterruptsPerSec -inst ""Name = '0'"" -w 30 -c 70 [-user Ser1\Administrator -pass password -domain ITSP] " + wscript.echo str + + End Function +'------------------------------------------------------------------------------------------------- +'Function Name: f_GetAllArg. +'Descripton: Get all of arguments from command. +'Input: No. +'Output: No. +'------------------------------------------------------------------------------------------------- + Function f_GetAllArg() + + On Error Resume Next + + Dim i + + argcountcommand=WScript.Arguments.Count + + for i=0 to argcountcommand-1 + arg(i)=WScript.Arguments(i) + next + + End Function +'------------------------------------------------------------------------------------------------- +'Function Name: f_GetOneArg. +'Descripton: Get an argument from command. +'Input: Yes. +' strName: Name of argument +'Output: Value. +'------------------------------------------------------------------------------------------------- + Function f_GetOneArg(strName) + + On Error Resume Next + + Dim i + for i=0 to argcountcommand-1 + if (Ucase(arg(i))=Ucase(strName)) then + f_GetOneArg=arg(i+1) + Exit Function + end if + next + + End Function + +'------------------------------------------------------------------------------------------------- +'Function Name: f_GetInstance. +'Descripton: Get infomation at Local Host. +'Input: instance. +'Output: No. +'------------------------------------------------------------------------------------------------- + Function f_GetInstance(instance) + + On Error Resume Next + + strResultTemp1 = "" + strResultTemp2 = "" + strResultTemp = "" + intResultTemp = 0 + strPropBase = "" + + strInstanceTemp1 = "" + strInstanceTemp2 = "" + intInstanceTemp1 = 0 + intInstanceTemp2 = 0 + + 'Depend on strInfo parameters to get the result value + if(instance = "*") then + strQuery = "Select " & strProp & ", TimeStamp_PerfTime, Frequency_PerfTime" & " from " & strClass + Set colWMITemp = objWMIService.ExecQuery(strQuery) + Wscript.Sleep(1000) + Set colWMI = objWMIService.ExecQuery(strQuery) + else + intInstanceTemp1 = InStr(1,instance,"=") + strInstanceTemp1 = Mid(instance,1,intInstanceTemp1-1) + intInstanceTemp2 = Len(instance) + strInstanceTemp2 = Mid(instance,intInstanceTemp1+1,intInstanceTemp2-intInstanceTemp1) + instance=strInstanceTemp1 & "='" & strInstanceTemp2 & "'" + + strQuery = "Select " & strProp & ", TimeStamp_PerfTime, Frequency_PerfTime" & " from " & strClass & " where " & instance + Set colWMITemp = objWMIService.ExecQuery(strQuery) + Wscript.Sleep(1000) + Set colWMI = objWMIService.ExecQuery(strQuery) + end if + + count = -1 + count = colWMI.count + if(count = -1) then + Wscript.Echo "Unknown - No data received from WMI;" + Wscript.Quit(intUnknown) + else + if(colWMI.count > 0) then + f_GetData() + strResultTemp1 = strResultTemp1 & strResultTemp3 + strResultTemp2 = strResultTemp2 & strResultTemp4 + intReturnTemp = intReturnTemp1 + Exit Function + else + strResultTemp1 = "Unknown - " & instance &" query: No row returned." + intReturnTemp = intUnknown + Exit Function + end if + end if + End Function + +'------------------------------------------------------------------------------------------------- +'Function Name: f_GetPrefix. +'Descripton: Get Prefix. +'Input: No. +'Output: No. +'------------------------------------------------------------------------------------------------- + Function f_GetPrefix(intValue) + + On Error Resume Next + + strPrefix = "" + If(warningValue <> "" And criticalValue = "") Then + If (IsNumeric(warningValue)) Then + If (Int(intValue) < Int(warningValue)) Then + returnValue=0 + strPrefix= "OK - " + Else + returnValue=1 + strPrefix= "Warning - " + End If + Else + Wscript.Echo "Error! Arguments wrong, please verify -w parameter" + Wscript.Quit(intError) + Exit Function + End If + End If + If(warningValue = "" And criticalValue <> "") Then + If (IsNumeric(criticalValue)) Then + If (Int(intValue) < Int(criticalValue)) Then + returnValue=0 + strPrefix= "OK - " + Else + returnValue=2 + strPrefix= "Critical - " + End If + Else + Wscript.Echo "Error! Arguments wrong, please verify -c parameter" + Wscript.Quit(intError) + Exit Function + End If + End If + If (warningValue <> "" And criticalValue <> "") Then + If (IsNumeric(warningValue) And IsNumeric(criticalValue)) Then + if (Int(warningValue) < Int(criticalValue)) then + + if (Int(intValue) < Int(warningValue)) then + returnValue=0 + strPrefix= "OK - " + else + if (Int(intValue) < Int(criticalValue)) then + returnValue=1 + strPrefix= "Warning - " + else + returnValue=2 + strPrefix= "Critical - " + end if + end if + else + if (Int(intValue) > Int(warningValue)) then + returnValue=0 + strPrefix= "OK - " + else + if (Int(intValue) > Int(criticalValue)) then + returnValue=1 + strPrefix= "Warning - " + else + returnValue=2 + strPrefix= "Critical - " + end if + end if + end If + Else + Wscript.Echo "Error! Arguments wrong, please verify -w -c parameter" + Wscript.Quit(intError) + Exit Function + End If + End If + + End Function + +'------------------------------------------------------------------------------------------------- +'Function Name: f_GetPrefixWithRange. +'Descripton: Get Prefix. +'Input: No. +'Output: No. +'------------------------------------------------------------------------------------------------- + Function f_GetPrefixWithRange(intValue) + + On Error Resume Next + lWarningValue = "" + uWarningValue = "" + lCriticalValue= "" + uCriticalValue= "" + warningReturn = 0 + criticalReturn = 0 + If(warningValue <> "") Then + f_GetWarningValueFromRange(warningValue) + End If + If(criticalValue <> "") Then + f_GetCriticalValueFromRange(criticalValue) + End If + strPrefix = "" + 'verify warning + If((lWarningValue <> "") And (uWarningValue <> "")) Then + If(Int(lWarningValue) <= Int(uWarningValue)) Then + If((Int(lWarningValue) >= Int(intValue)) Or (Int(intValue) >= Int(uWarningValue))) Then + warningReturn=1 + End If + Else + If((Int(intValue) >= Int(uWarningValue) ) And (Int(intValue) <= Int(lWarningValue))) Then + warningReturn=1 + End If + End If + End If + If((lWarningValue <> "") And (uWarningValue = "")) Then + If(Int(intValue) <= Int(lWarningValue)) Then + warningReturn=1 + End If + End If + If((lWarningValue = "") And (uWarningValue <> "")) Then + If(Int(intValue) >= Int(uWarningValue)) Then + warningReturn=1 + End If + End If + + 'verify critical + If((lCriticalValue <> "") And (uCriticalValue <> "")) Then + If(Int(lCriticalValue) <= Int(uCriticalValue)) Then + If((Int(lCriticalValue) >= Int(intValue)) Or (Int(intValue) >= Int(uCriticalValue))) Then + criticalReturn=2 + End If + Else + If((Int(intValue) >= Int(uCriticalValue) ) And (Int(intValue) <= Int(lCriticalValue))) Then + criticalReturn=2 + End If + End If + End If + If((lCriticalValue <> "") And (uCriticalValue = "")) Then + If(Int(intValue) <= Int(lCriticalValue)) Then + criticalReturn=2 + End If + End If + If((lCriticalValue = "") And (uCriticalValue <> "")) Then + If(Int(intValue) >= Int(uCriticalValue)) Then + criticalReturn=2 + End If + End If + + 'return result + If(criticalReturn = 2) Then + returnValue=2 + strPrefix= "Critical - " + Else + If(warningReturn = 1) Then + returnValue=1 + strPrefix= "Warning - " + Else + returnValue=0 + strPrefix= "Ok - " + End If + End If + + End Function + +'------------------------------------------------------------------------------------------------- +'Function Name: f_GetWarningValueFromRange(). +'Descripton: Get perform value at Local Host. +'Input: warningValueRange. +'Output: No. +'------------------------------------------------------------------------------------------------- + Function f_GetWarningValueFromRange(warningValue) + + On Error Resume Next + lWarningValue = "" + uWarningValue = "" + temp1 = 0 + temp1 = InStr(1, warningValue, ":") + if(temp1 > 0) then + lWarningTemp = Mid(warningValue, 1, temp1 -1) + uWarningTemp = Mid(warningValue, temp1 +1, len(warningValue) - temp1) + if(IsNumeric(lWarningTemp) or IsNumeric(uWarningTemp)) then + lWarningValue = lWarningTemp + uWarningValue = uWarningTemp + else + Wscript.Echo "Error! Arguments wrong, please verify -w parameter" + Wscript.Quit(intError) + Exit Function + end if + else + Wscript.Echo "Error! Arguments wrong, please verify -w parameter" + Wscript.Quit(intError) + Exit Function + end if + + End Function + +'------------------------------------------------------------------------------------------------- +'Function Name: f_GetCriticalValueFromRange(). +'Descripton: Get perform value at Local Host. +'Input: warningValueRange. +'Output: No. +'------------------------------------------------------------------------------------------------- + Function f_GetCriticalValueFromRange(criticalValue) + + On Error Resume Next + lCriticalValue = "" + uCriticalValue = "" + temp1 = 0 + temp1 = InStr(1, criticalValue, ":") + if(temp1 > 0) then + lCriticalTemp = Mid(criticalValue, 1, temp1 -1) + uCriticalTemp = Mid(criticalValue, temp1 +1, len(criticalValue) - temp1) + if(IsNumeric(lCriticalTemp) or IsNumeric(uCriticalTemp)) then + lCriticalValue = lCriticalTemp + uCriticalValue = uCriticalTemp + else + Wscript.Echo "Error! Arguments wrong, please verify -c parameter" + Wscript.Quit(intError) + Exit Function + end if + else + WScript.Echo "Error! Arguments wrong, please verify -c parameter" + Wscript.Quit(intError) + Exit Function + end if + + End Function + +'------------------------------------------------------------------------------------------------- +'Function Name: f_GetData. +'Descripton: Format data the same as output. +'Input: no. +'Output: No. +'------------------------------------------------------------------------------------------------- + Function f_GetData() + + On Error Resume Next + + ReDim strNameArray(Int(colWMI.count)) + ReDim counterValueArray(Int(colWMI.count)) + ReDim timerValueArray(Int(colWMI.count)) + ReDim intValueArray(Int(colWMI.count)) + + strDisplay1 = "" + strDisplay2 = "" + strResultTemp3 = "" + strResultTemp4 = "" + + strNameTemp = "" + strPropNameTemp = "" + counterValueTemp = 0 + timerValueTemp = 0 + timeBaseTemp = 0 + i, j = 0 + + For Each objWMITemp in colWMITemp + counterValueArray(i) = objWMITemp.Properties_(strProp) + timerValueArray(i) = objWMITemp.Properties_("TimeStamp_PerfTime") + i = i + 1 + Next + + For Each objWMI in colWMI + strNameTemp = objWMI.Name + strPropNameTemp = objWMI.Properties_(strProp).Name + counterValueTemp = objWMI.Properties_(strProp) + timerValueTemp = objWMI.Properties_("TimeStamp_PerfTime") + timeBase = objWMI.Properties_("Frequency_PerfTime") + strNameArray(j) = strNameTemp + if((timerValueTemp - timerValueArray(j)) = 0) then + intValueArray(j) = 0 + else + intValueArray(j) = (counterValueTemp - counterValueArray(j)) / ((timerValueTemp - timerValueArray(j)) / timeBase) + end if + j = j + 1 + Next + + for k = 0 to (Int(colWMI.count) - 1) + strName = strNameArray(k) + Dim strDSName + strDSName = f_FormatDSName(strName) + strPropName = strPropNameTemp + intValue = (intValueArray(k)) + if((warningValue <> "") and (criticalValue <> "")) then + strDisplay1 = strName & " '" & strPropName & "'" & " = " & intValue & "; " + strDisplay2 = "'" & strDSName & "'" & "=" & intValue & ";" & warningValue & ";" & criticalValue & ";; " + If(InStr(1, warningValue, ":") > 0 Or InStr(1, criticalValue, ":") > 0) Then + f_GetPrefixWithRange(intValue) + Else + f_GetPrefix(intValue) + End If + strResultTemp3 = strResultTemp3 & strPrefix & strDisplay1 + strResultTemp4 = strResultTemp4 & strDisplay2 + if( intReturnTemp1 < returnValue) then + intReturnTemp1 = returnValue + end if + else + strResultTemp3 = strResultTemp3 & "OK - " & strName & " '" & strPropName & "'" & " = " & intValue & "; " + strResultTemp4 = "" + end if + next + End Function + +'------------------------------------------------------------------------------------------------- +'Function Name: f_FormatDSName. +'Descripton: Get infomation at Local Host. +'Input: strName. +'Output: No. +'------------------------------------------------------------------------------------------------- + Function f_FormatDSName(strName) + + On Error Resume Next + + first = 1 + position1 = 0 + + position1 = InStr(first, strName, "=") + Dim proc_name + proc_name = "" + If(position1 > 0) Then + proc_name = Mid(strName,position1+1,(Len(strName)-position1)) + proc_name = Replace(proc_name,".","_") + proc_name = Replace(proc_name,"-","_") + proc_name = Mid(proc_name,1, 19) + + + Else + proc_name = Mid(strName,position1+1,(Len(strName)-position1)) + proc_name = Replace(proc_name,".","_") + proc_name = Replace(proc_name,"-","_") + proc_name = Mid(proc_name,1, 19) + + End If + f_FormatDSName = proc_name + Exit Function + End Function + +'------------------------------------------------------------------------------------------------- +'Function Name: f_GetInformation. +'Descripton: Get information data. +'Input: No. +'Output: Values. +'------------------------------------------------------------------------------------------------- + Function f_GetInformation() + + On Error Resume Next + + strResult = "" + strResult1 = "" + strResult2 = "" + intReturn = 0 + instance = strInst + first=1 + tam1=10 + tam = -1 + + If(instanceArraySize > 0 and (warningArraySize > 1 Or criticalArraySize > 1)) Then + for i = 0 to instanceArraySize -1 + instance = instanceArray(i) + warningValue = warningArray(i) + criticalValue = criticalArray(i) + f_GetInstance(instance) + strResult1 = strResult1 & strResultTemp1 + strResult2 = strResult2 & strResultTemp2 + if intReturn < intReturnTemp then + intReturn = intReturnTemp + end if + Next + Else + for i = 0 to instanceArraySize -1 + instance = instanceArray(i) + f_GetInstance(instance) + strResult1 = strResult1 & strResultTemp1 + strResult2 = strResult2 & strResultTemp2 + if intReturn < intReturnTemp then + intReturn = intReturnTemp + end if + Next + end if + if(strResult2 = "") then + strResult = strResult1 + else + strResult = strResult1 & "|" & strResult2 + end if + Wscript.Echo strResult + Wscript.Quit(intReturn) + + End Function + +'------------------------------------------------------------------------------------------------- +'Function Name: f_GetInstances. +'Descripton: Get Prefix. +'Input: No. +'Output: No. +'------------------------------------------------------------------------------------------------- + Function f_GetInstances() + + On Error Resume Next + + first = 1 + position = 0 + instanceArraySize = 0 + + position = InStr(first, strInst, ",") + if (position = 0) then + instanceTemp = strInst + InstanceArraySize = 1 + ReDim instanceArray(instanceArraySize) + instanceArray(0) = instanceTemp + + else + do while (position > 0) + instanceTemp = Mid(strInst,first,position - first) + instanceArraySize = instanceArraySize + 1 + ReDim Preserve instanceArray(instanceArraySize) + instanceArray(instanceArraySize -1) = Trim(instanceTemp) + first = position + 1 + position = InStr(first, strInst, ",") + loop + instanceTemp = Mid(strInst,first,len(strInst)) + instanceArraySize = instanceArraySize + 1 + ReDim Preserve instanceArray(instanceArraySize) + instanceArray(instanceArraySize -1) = Trim(instanceTemp) + end if + + End Function + +'------------------------------------------------------------------------------------------------- +'Function Name: f_GetWarningCriticalValues. +'Descripton: Get Prefix. +'Input: No. +'Output: No. +'------------------------------------------------------------------------------------------------- + Function f_GetWarningCriticalValues() + + On Error Resume Next + + position1 = 0 + position2 = 0 + position3 = 0 + position4 = 0 + temp1 = 1 + temp2 = 1 + warningArraySize = 0 + criticalArraySize = 0 + + 'get warning + position2 = InStr(temp1, warningValueString, ",") + If(position2 = 0) then + position2 = Len(warningValueString)+1 + end if + + If(position2 > position1) then + do while (position2 > position1) + warningPair = Mid(warningValueString, position1 + 1, (position2 - position1 -1)) + warningArraySize = warningArraySize + 1 + ReDim Preserve warningArray(warningArraySize) + warningArray(warningArraySize -1) = Trim(warningPair) + temp1 = position2 + 1 + position1 = position2 + position2 = InStr(temp1, warningValueString, ",") + If(position2 = 0) then + position2 = Len(warningValueString)+1 + End If + loop + end If + + If(Int(warningArraySize) < Int(instanceArraySize)) Then + ReDim Preserve warningArray(instanceArraySize) + For i = 0 To (instanceArraySize - warningArraySize - 1) + warningArray(warningArraySize +i) = warningArray(warningArraySize-1) + Next + warningArraySize = instanceArraySize + End If + 'get critical + position4 = InStr(temp2, criticalValueString, ",") + If(position4 = 0) then + position4 = Len(criticalValueString)+1 + end if + + If(position4 > position3) then + do while (position4 > position3) + criticalPair = Mid(criticalValueString, position3 + 1, (position4 - position3 -1)) + criticalArraySize = criticalArraySize + 1 + ReDim Preserve criticalArray(criticalArraySize) + criticalArray(criticalArraySize -1) = Trim(criticalPair) + temp2 = position4 + 1 + position3 = position4 + position4 = InStr(temp2, criticalValueString, ",") + If(position4 = 0) then + position4 = Len(criticalValueString)+1 + End If + loop + End If + If(Int(criticalArraySize) < Int(instanceArraySize)) Then + ReDim Preserve criticalArray(instanceArraySize) + For i = 0 To (instanceArraySize - criticalArraySize - 1) + criticalArray(criticalArraySize +i) = criticalArray(criticalArraySize-1) + Next + criticalArraySize = instanceArraySize + End If + + End Function + +'------------------------------------------------------------------------------------------------- +'Function Name: f_LocalPerfValue. +'Descripton: Get perform value at Local Host. +'Input: No. +'Output: No. +'------------------------------------------------------------------------------------------------- + Function f_LocalPerfValue() + + On Error Resume Next + + Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\" & strNameSpace) + f_Error() + + 'Set colInstances = GetObject("winmgmts:{impersonationLevel=impersonate}\\" & strComputer & "\" & strNameSpace).InstancesOf(strClass) + 'For Each objInstance in colInstances + 'Next + 'f_Error() + + f_GetInformation() + + End Function + +'------------------------------------------------------------------------------------------------- +'Function Name: f_RemotePerfValue. +'Descripton: Get perform values at Remote Host. +'Input: No. +'Output: Values. +'------------------------------------------------------------------------------------------------- + Function f_RemotePerfValue() + + On Error Resume Next + + Set objSWbemLocator = CreateObject("WbemScripting.SWbemLocator") + if (strDomain = "") then + Set objWMIService = objSWbemLocator.ConnectServer _ + (strComputer, strNameSpace , strUser, strPass ) + f_Error() + + 'Set colInstances = objSWbemLocator.ConnectServer(strComputer, strNamespace , strUser, strPass).InstancesOf(strClass) + 'For Each objInstance in colInstances + 'Next + 'f_Error() + else + Set objWMIService = objSWbemLocator.ConnectServer _ + (strComputer, strNameSpace , strUser, strPass,"MS_409","ntlmdomain:" + strDomain ) + f_Error() + + 'Set colInstances = objSWbemLocator.ConnectServer(strComputer, strNamespace , strUser, strPass,"MS_409","ntlmdomain:" & strDomain ).InstancesOf(strClass) + 'For Each objInstance in colInstances + 'Next + 'f_Error() + end if + objWMIService.Security_.ImpersonationLevel = 3 + f_Error() + + f_GetInformation() + + End Function + +'************************************************************************************************* +' Main Function +'************************************************************************************************* + + '///////////////////// + + strCommandName="check_counter_rawcount.vbs" + strDescription="Enumerate the needed windows host information." + + '///////////////////// + + strNameSpace = "root\cimv2" + + f_GetAllArg() + tempCount = argcountcommand/2 + f_Error() + strClass = "" + + if ((UCase(arg(0))="-H") Or (UCase(arg(0))="--HELP")) and (argcountcommand=1) then + f_help() + else + if( ((argcountcommand Mod 2) = 0) and (3 < tempCount < 11)) then + strComputer = f_GetOneArg("-h") + strClass = f_GetOneArg("-class") + strProp = f_GetOneArg("-prop") + strInst = f_GetOneArg("-inst") + f_GetInstances() + warningValue = f_GetOneArg("-w") + warningValueString = f_GetOneArg("-w") + criticalValue = f_GetOneArg("-c") + criticalValueString = f_GetOneArg("-c") + If((warningValueString <> "") Or (criticalValueString <> "")) Then + f_GetWarningCriticalValues() + End if + strUser = f_GetOneArg("-user") + strPass = f_GetOneArg("-pass") + strDomain = f_GetOneArg("-domain") + if((strComputer = "") or (strClass = "") or (strProp = "") or (strInst = "")) then + Wscript.Echo "Error! Arguments wrong, require verify -h -class -prop -inst parameters" + Wscript.Quit(intError) + else + Select Case tempCount + Case 4: + f_LocalPerfValue() + Case 6: + if ((warningValue <> "") and (criticalValue <> "")) then + f_LocalPerfValue() + end if + if ((strUser <> "") and (strPass <> "")) then + f_RemotePerfValue() + else + Wscript.Echo "Error! Arguments wrong, please verify -user -pass or -w -c parameters" + Wscript.Quit(intError) + end if + Case 8: + if ((strUser <> "") and (strPass <> "") and (warningValue <> "") and (criticalValue <> "")) then + f_RemotePerfValue() + else + Wscript.Echo "Error! Arguments wrong for remote check, please verify -w -c -user -pass parameters" + Wscript.Quit(intError) + end if + Case 9: + if ((strUser <> "") and (strPass <> "") and (warningValue <> "") and (criticalValue <> "") and (strDomain <> "")) then + f_RemotePerfValue() + else + Wscript.Echo "Error! Arguments wrong for remote check, please verify -w -c -user -pass -domain parameters" + Wscript.Quit(intError) + end if + Case Else + Wscript.Echo "Error! Arguments wrong, please type -h for Help" + Wscript.Quit(intError) + End Select + + end if + else + Wscript.Echo "Error! Arguments wrong, please type -h for Help" + Wscript.Quit(intError) + end if + + end if \ No newline at end of file diff --git a/nsclient/trunk/scripts/wmi/check_counter_large_rawcount.vbs b/nsclient/trunk/scripts/wmi/check_counter_large_rawcount.vbs new file mode 100644 index 0000000..a58b178 --- /dev/null +++ b/nsclient/trunk/scripts/wmi/check_counter_large_rawcount.vbs @@ -0,0 +1,848 @@ +' Copyright 2007 GroundWork Open Source Inc. +' +' This program is free software; you can redistribute it and/or +' modify it under the terms of the GNU General Public License +' as published by the Free Software Foundation; version 2 +' of the License. +' +' This program is distributed in the hope that it will be useful, +' but WITHOUT ANY WARRANTY; without even the implied warranty of +' MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +' GNU General Public License for more details. +' +' +' Author Dr. Dave Blunt at GroundWork Open Source Inc. (dblunt@groundworkopensource.com) + +'************************************************************************************************* +' Public Variable +'************************************************************************************************* +Const intOK = 0 +Const intWarning = 1 +Const intCritical = 2 +Const intError = 3 +Const intUnknown = 3 + +Dim argcountcommand +Dim arg(20) +Dim strComputer +Dim strClass +Dim strProp +Dim strInst +Dim warningValue +Dim warningValueString +Dim criticalValue +Dim criticalValueString +Dim strUser +Dim strPass +Dim strDomain +Dim strNameSpace +Dim strDescription +Dim strCommandName +Dim strResultTemp +Dim strResult +Dim strResult1 +Dim strResult2 +Dim intReturnTemp +Dim intReturn +Dim strResultTemp1 +Dim strResultTemp2 +Dim strResultTemp3 +Dim strResultTemp4 +Dim intReturnTemp1 +Dim strPrefix +Dim intValue +Dim returnValue +Dim strPropName +Dim instanceArray() +Dim instanceArraySize +Dim warningArraySize +Dim criticalArraySize +Dim warningArray() +Dim criticalArray() +Dim instance +Dim propArray() +Dim propArraySize +Dim lWarningValue +Dim uWarningValue +Dim lCriticalValue +Dim uCriticalValue + +Dim ArgCount +Dim strArgMain(10) +Dim strArgSortDes(10) +Dim strArgDetailDes(10) +Dim strArgExample(10) + +Dim objWMIService, colWMI,objWMI,objSWbemLocator + +strComputer="" +strClass = "" +strProp = "" +strInst = "" +warningValue = -1 +criticalValue = -1 +strUser = "" +strPass = "" +strDomain = "" + +intReturnTemp1 = 0 +'************************************************************************************************* +' Functions and Subs +'************************************************************************************************* + +'------------------------------------------------------------------------------------------------- +'Function Name: f_Error. +'Descripton: Display an error notice include : Error Number and Error Description. +'Input: No. +'Output: No. +'------------------------------------------------------------------------------------------------- + Function f_Error() + + nbrError = err.number + if (nbrError <> 0 ) then + Select Case nbrError + Case 462, -2147023174 + strExitMsg = "Timeout connecting to WMI on this host! Error Number: " & nbrError & " Description: " & err.description + Case -2147024891 + strExitMsg = "Authentication failure to remote host! Error Number: " & nbrError & " Description: " & err.description + Case -2147217392 + strExitMsg = "Error! Number: " & nbrError & " Description: Invalid Class" + Case Else + strExitMsg = "Error! Number: " & nbrError & " Description: " & err.description + End Select + wscript.echo strExitMsg + wscript.quit(intUnknown) + end if + + End Function +'------------------------------------------------------------------------------------------------- +'Function Name: f_Help. +'Descripton: Display help of command include : Description, Arguments, Examples +'Input: No. +'Output: No. +'------------------------------------------------------------------------------------------------- + Function f_Help() + + Dim str + str="Check Counter Large RawCount. If your Local Machine has the same Administrator account and password as the Remote Machine then you don't have to use the two last parameters."&vbCrlF&vbCrlF + str=str&"cscript check_counter_rawcount.vbs -h hostname -class classname -prop property -inst instancename [-w warning_level -c critical_level] [-user username -pass password [-domain domain]]"&vbCrlF + str=str&vbCrlF + str=str&"-h [--help] Help."&vbCrlF + str=str&"-h hostname Host name."&vbCrlF + str=str&"-class classname Class name."&vbCrlF + str=str&"-prop property Property of Class."&vbCrlF + str=str&"-inst instance Needed Instance."&vbCrlF + str=str&"-w warning_level Warning threshold."&vbCrlF + str=str&"-c critical_level Critical threshold."&vbCrlF + str=str&"-user username Account Administrator on Remote Machine."&vbCrlF + str=str&"-pass password Password Account Administrator on Remote Machine."&vbCrlF + str=str&"-domain domain Domain Name of Remote Machine."&vbCrlF + str=str&vbCrlF + str=str&"Example: cscript check_counter_large_rawcount.vbs -h Ser1 -class Win32_PerfRawData_PerfProc_Process -prop WorkingSet -inst ""*"" -w 30 -c 70 [-user Ser1\Administrator -pass password -domain ITSP] " + str=str&"Example: cscript check_counter_large_rawcount.vbs -h Ser1 -class Win32_PerfRawData_PerfProc_Process -prop WorkingSet -inst ""IDProcess = '3612', IDProcess = '2156'"" -w 30 -c 70 [-user Ser1\Administrator -pass password -domain ITSP] " + wscript.echo str + + End Function +'------------------------------------------------------------------------------------------------- +'Function Name: f_GetAllArg. +'Descripton: Get all of arguments from command. +'Input: No. +'Output: No. +'------------------------------------------------------------------------------------------------- + Function f_GetAllArg() + + On Error Resume Next + + Dim i + + argcountcommand=WScript.Arguments.Count + + for i=0 to argcountcommand-1 + arg(i)=WScript.Arguments(i) + next + + End Function +'------------------------------------------------------------------------------------------------- +'Function Name: f_GetOneArg. +'Descripton: Get an argument from command. +'Input: Yes. +' strName: Name of argument +'Output: Value. +'------------------------------------------------------------------------------------------------- + Function f_GetOneArg(strName) + + On Error Resume Next + + Dim i + for i=0 to argcountcommand-1 + if (Ucase(arg(i))=Ucase(strName)) then + f_GetOneArg=arg(i+1) + Exit Function + end if + next + + End Function + +'------------------------------------------------------------------------------------------------- +'Function Name: f_GetInstance. +'Descripton: Get infomation at Local Host. +'Input: instance. +'Output: No. +'------------------------------------------------------------------------------------------------- + Function f_GetInstance(instance) + + On Error Resume Next + + strResultTemp1 = "" + strResultTemp2 = "" + strResultTemp = "" + intResultTemp = 0 + + strInstanceTemp1 = "" + strInstanceTemp2 = "" + intInstanceTemp1 = 0 + intInstanceTemp2 = 0 + + 'Depend on strInfo parameters to get the result value + + if(instance = "*") then + strQuery = "Select " & strProp & " from " & strClass + Set colWMI = objWMIService.ExecQuery(strQuery) + else + intInstanceTemp1 = InStr(1,instance,"=") + strInstanceTemp1 = Mid(instance,1,intInstanceTemp1-1) + intInstanceTemp2 = Len(instance) + strInstanceTemp2 = Mid(instance,intInstanceTemp1+1,intInstanceTemp2-intInstanceTemp1) + instance=strInstanceTemp1 & "='" & strInstanceTemp2 & "'" + + strQuery = "Select " & strProp & " from " & strClass & " where " & instance + Set colWMI = objWMIService.ExecQuery(strQuery) + end if + + count = -1 + count = colWMI.count + if(count = -1) then + Wscript.Echo "Unknown - No data received from WMI;" + Wscript.Quit(intUnknown) + else + if(colWMI.count > 0) then + f_FormatData(colWMI) + + strResultTemp1 = strResultTemp1 & strResultTemp3 + strResultTemp2 = strResultTemp2 & strResultTemp4 + intReturnTemp = intReturnTemp1 + Exit Function + else + strResultTemp1 = "Unknown - " & instance &" query: No row returned." + intReturnTemp = intUnknown + Exit Function + end if + end if + End Function + +'------------------------------------------------------------------------------------------------- +'Function Name: f_GetPrefix. +'Descripton: Get Prefix. +'Input: No. +'Output: No. +'------------------------------------------------------------------------------------------------- + Function f_GetPrefix(intValue) + + On Error Resume Next + + strPrefix = "" + If(warningValue <> "" And criticalValue = "") Then + If (IsNumeric(warningValue)) Then + If (Int(intValue) < Int(warningValue)) Then + returnValue=0 + strPrefix= "OK - " + Else + returnValue=1 + strPrefix= "Warning - " + End If + Else + Wscript.Echo "Error! Arguments wrong, please verify -w parameter" + Wscript.Quit(intError) + Exit Function + End If + End If + If(warningValue = "" And criticalValue <> "") Then + If (IsNumeric(criticalValue)) Then + If (Int(intValue) < Int(criticalValue)) Then + returnValue=0 + strPrefix= "OK - " + Else + returnValue=2 + strPrefix= "Critical - " + End If + Else + Wscript.Echo "Error! Arguments wrong, please verify -c parameter" + Wscript.Quit(intError) + Exit Function + End If + End If + If (warningValue <> "" And criticalValue <> "") Then + If (IsNumeric(warningValue) And IsNumeric(criticalValue)) Then + if (Int(warningValue) < Int(criticalValue)) then + + if (Int(intValue) < Int(warningValue)) then + returnValue=0 + strPrefix= "OK - " + else + if (Int(intValue) < Int(criticalValue)) then + returnValue=1 + strPrefix= "Warning - " + else + returnValue=2 + strPrefix= "Critical - " + end if + end if + else + if (Int(intValue) > Int(warningValue)) then + returnValue=0 + strPrefix= "OK - " + else + if (Int(intValue) > Int(criticalValue)) then + returnValue=1 + strPrefix= "Warning - " + else + returnValue=2 + strPrefix= "Critical - " + end if + end if + end If + Else + Wscript.Echo "Error! Arguments wrong, please verify -w -c parameter" + Wscript.Quit(intError) + Exit Function + End If + End If + + End Function + +'------------------------------------------------------------------------------------------------- +'Function Name: f_GetPrefixWithRange. +'Descripton: Get Prefix. +'Input: No. +'Output: No. +'------------------------------------------------------------------------------------------------- + Function f_GetPrefixWithRange(intValue) + + On Error Resume Next + lWarningValue = "" + uWarningValue = "" + lCriticalValue= "" + uCriticalValue= "" + warningReturn = 0 + criticalReturn = 0 + If(warningValue <> "") Then + f_GetWarningValueFromRange(warningValue) + End If + If(criticalValue <> "") Then + f_GetCriticalValueFromRange(criticalValue) + End If + strPrefix = "" + 'verify warning + If((lWarningValue <> "") And (uWarningValue <> "")) Then + If(Int(lWarningValue) <= Int(uWarningValue)) Then + If((Int(lWarningValue) >= Int(intValue)) Or (Int(intValue) >= Int(uWarningValue))) Then + warningReturn=1 + End If + Else + If((Int(intValue) >= Int(uWarningValue) ) And (Int(intValue) <= Int(lWarningValue))) Then + warningReturn=1 + End If + End If + End If + If((lWarningValue <> "") And (uWarningValue = "")) Then + If(Int(intValue) <= Int(lWarningValue)) Then + warningReturn=1 + End If + End If + If((lWarningValue = "") And (uWarningValue <> "")) Then + If(Int(intValue) >= Int(uWarningValue)) Then + warningReturn=1 + End If + End If + + 'verify critical + If((lCriticalValue <> "") And (uCriticalValue <> "")) Then + If(Int(lCriticalValue) <= Int(uCriticalValue)) Then + If((Int(lCriticalValue) >= Int(intValue)) Or (Int(intValue) >= Int(uCriticalValue))) Then + criticalReturn=2 + End If + Else + If((Int(intValue) >= Int(uCriticalValue) ) And (Int(intValue) <= Int(lCriticalValue))) Then + criticalReturn=2 + End If + End If + End If + If((lCriticalValue <> "") And (uCriticalValue = "")) Then + If(Int(intValue) <= Int(lCriticalValue)) Then + criticalReturn=2 + End If + End If + If((lCriticalValue = "") And (uCriticalValue <> "")) Then + If(Int(intValue) >= Int(uCriticalValue)) Then + criticalReturn=2 + End If + End If + + 'return result + If(criticalReturn = 2) Then + returnValue=2 + strPrefix= "Critical - " + Else + If(warningReturn = 1) Then + returnValue=1 + strPrefix= "Warning - " + Else + returnValue=0 + strPrefix= "Ok - " + End If + End If + + End Function + +'------------------------------------------------------------------------------------------------- +'Function Name: f_GetWarningValueFromRange(). +'Descripton: Get perform value at Local Host. +'Input: warningValueRange. +'Output: No. +'------------------------------------------------------------------------------------------------- + Function f_GetWarningValueFromRange(warningValue) + + On Error Resume Next + lWarningValue = "" + uWarningValue = "" + temp1 = 0 + temp1 = InStr(1, warningValue, ":") + if(temp1 > 0) then + lWarningTemp = Mid(warningValue, 1, temp1 -1) + uWarningTemp = Mid(warningValue, temp1 +1, len(warningValue) - temp1) + if(IsNumeric(lWarningTemp) or IsNumeric(uWarningTemp)) then + lWarningValue = lWarningTemp + uWarningValue = uWarningTemp + else + Wscript.Echo "Error! Arguments wrong, please verify -w parameter" + Wscript.Quit(intError) + Exit Function + end if + else + Wscript.Echo "Error! Arguments wrong, please verify -w parameter" + Wscript.Quit(intError) + Exit Function + end if + + End Function + +'------------------------------------------------------------------------------------------------- +'Function Name: f_GetCriticalValueFromRange(). +'Descripton: Get perform value at Local Host. +'Input: warningValueRange. +'Output: No. +'------------------------------------------------------------------------------------------------- + Function f_GetCriticalValueFromRange(criticalValue) + + On Error Resume Next + lCriticalValue = "" + uCriticalValue = "" + temp1 = 0 + temp1 = InStr(1, criticalValue, ":") + if(temp1 > 0) then + lCriticalTemp = Mid(criticalValue, 1, temp1 -1) + uCriticalTemp = Mid(criticalValue, temp1 +1, len(criticalValue) - temp1) + if(IsNumeric(lCriticalTemp) or IsNumeric(uCriticalTemp)) then + lCriticalValue = lCriticalTemp + uCriticalValue = uCriticalTemp + else + Wscript.Echo "Error! Arguments wrong, please verify -c parameter" + Wscript.Quit(intError) + Exit Function + end if + else + WScript.Echo "Error! Arguments wrong, please verify -c parameter" + Wscript.Quit(intError) + Exit Function + end if + + End Function + +'------------------------------------------------------------------------------------------------- +'Function Name: f_FormatData. +'Descripton: Format data the same as output. +'Input: service. +'Output: No. +'------------------------------------------------------------------------------------------------- + Function f_FormatData(colWMI) + + On Error Resume Next + + strDisplay1 = "" + strDisplay2 = "" + strResultTemp3 = "" + strResultTemp4 = "" + + For Each objWMI in colWMI + strName = objWMI.Name + strPropName = objWMI.Properties_(strProp).Name + intValue = objWMI.Properties_(strProp) + Dim strDSName + strDSName = f_FormatDSName(strName) + + if((warningValue <> "") and (criticalValue <> "")) then + strDisplay1 = strName & " '" & strPropName & "'" & " = " & intValue & "; " + strDisplay2 = "'" &strDSName & "'" & "=" & intValue & ";" & warningValue & ";" & criticalValue & ";; " + If(InStr(1, warningValue, ":") > 0 Or InStr(1, criticalValue, ":") > 0) Then + f_GetPrefixWithRange(intValue) + Else + f_GetPrefix(intValue) + End If + strResultTemp3 = strResultTemp3 & strPrefix & strDisplay1 + strResultTemp4 = strResultTemp4 & strDisplay2 + if( intReturnTemp1 < returnValue) then + intReturnTemp1 = returnValue + end if + else + strResultTemp3 = strResultTemp3 & "OK - " & strName & " '" & strPropName & "'" & " = " & intValue & "; " + strResultTemp4 = "" + end if + Next + + End Function + +'------------------------------------------------------------------------------------------------- +'Function Name: f_GetInstance. +'Descripton: Get infomation at Local Host. +'Input: instance. +'Output: No. +'------------------------------------------------------------------------------------------------- + Function f_FormatDSName(strName) + + On Error Resume Next + + first = 1 + position1 = 0 + + position1 = InStr(first, strName, "=") + Dim proc_name + proc_name = "" + If(position1 > 0) Then + proc_name = Mid(strName,position1+1,(Len(strName)-position1)) + proc_name = Replace(proc_name,".","_") + proc_name = Replace(proc_name,"-","_") + proc_name = Mid(proc_name,1, 19) + + + Else + proc_name = Mid(strName,position1+1,(Len(strName)-position1)) + proc_name = Replace(proc_name,".","_") + proc_name = Replace(proc_name,"-","_") + proc_name = Mid(proc_name,1, 19) + + End If + f_FormatDSName = proc_name + Exit Function + End Function + +'------------------------------------------------------------------------------------------------- +'Function Name: f_GetInformation. +'Descripton: Get information data. +'Input: No. +'Output: Values. +'------------------------------------------------------------------------------------------------- + Function f_GetInformation() + + On Error Resume Next + + strResult = "" + strResult1 = "" + strResult2 = "" + intReturn = 0 + + If(instanceArraySize > 0 and (warningArraySize > 1 Or criticalArraySize > 1)) Then + for i = 0 to instanceArraySize -1 + instance = instanceArray(i) + warningValue = warningArray(i) + criticalValue = criticalArray(i) + f_GetInstance(instance) + strResult1 = strResult1 & strResultTemp1 + strResult2 = strResult2 & strResultTemp2 + if intReturn < intReturnTemp then + intReturn = intReturnTemp + end if + Next + Else + for i = 0 to instanceArraySize -1 + instance = instanceArray(i) + f_GetInstance(instance) + strResult1 = strResult1 & strResultTemp1 + strResult2 = strResult2 & strResultTemp2 + if intReturn < intReturnTemp then + intReturn = intReturnTemp + end if + Next + end if + if(strResult2 = "") then + strResult = strResult1 + else + strResult = strResult1 & "|" & strResult2 + end if + Wscript.Echo strResult + Wscript.Quit(intReturn) + + End Function + +'------------------------------------------------------------------------------------------------- +'Function Name: f_GetInstances. +'Descripton: Get Prefix. +'Input: No. +'Output: No. +'------------------------------------------------------------------------------------------------- + Function f_GetInstances() + + On Error Resume Next + + first = 1 + position = 0 + instanceArraySize = 0 + + position = InStr(first, strInst, ",") + if (position = 0) then + instanceTemp = strInst + InstanceArraySize = 1 + ReDim instanceArray(instanceArraySize) + instanceArray(0) = instanceTemp + + else + do while (position > 0) + instanceTemp = Mid(strInst,first,position - first) + instanceArraySize = instanceArraySize + 1 + ReDim Preserve instanceArray(instanceArraySize) + instanceArray(instanceArraySize -1) = Trim(instanceTemp) + first = position + 1 + position = InStr(first, strInst, ",") + loop + instanceTemp = Mid(strInst,first,len(strInst)) + instanceArraySize = instanceArraySize + 1 + ReDim Preserve instanceArray(instanceArraySize) + instanceArray(instanceArraySize -1) = Trim(instanceTemp) + end if + + End Function + +'------------------------------------------------------------------------------------------------- +'Function Name: f_GetWarningCriticalValues. +'Descripton: Get Prefix. +'Input: No. +'Output: No. +'------------------------------------------------------------------------------------------------- + Function f_GetWarningCriticalValues() + + On Error Resume Next + + position1 = 0 + position2 = 0 + position3 = 0 + position4 = 0 + temp1 = 1 + temp2 = 1 + warningArraySize = 0 + criticalArraySize = 0 + + 'get warning + position2 = InStr(temp1, warningValueString, ",") + If(position2 = 0) then + position2 = Len(warningValueString)+1 + end if + + If(position2 > position1) then + do while (position2 > position1) + warningPair = Mid(warningValueString, position1 + 1, (position2 - position1 -1)) + warningArraySize = warningArraySize + 1 + ReDim Preserve warningArray(warningArraySize) + warningArray(warningArraySize -1) = Trim(warningPair) + temp1 = position2 + 1 + position1 = position2 + position2 = InStr(temp1, warningValueString, ",") + If(position2 = 0) then + position2 = Len(warningValueString)+1 + End If + loop + end If + + If(Int(warningArraySize) < Int(instanceArraySize)) Then + ReDim Preserve warningArray(instanceArraySize) + For i = 0 To (instanceArraySize - warningArraySize - 1) + warningArray(warningArraySize +i) = warningArray(warningArraySize-1) + Next + warningArraySize = instanceArraySize + End If + 'get critical + position4 = InStr(temp2, criticalValueString, ",") + If(position4 = 0) then + position4 = Len(criticalValueString)+1 + end if + + If(position4 > position3) then + do while (position4 > position3) + criticalPair = Mid(criticalValueString, position3 + 1, (position4 - position3 -1)) + criticalArraySize = criticalArraySize + 1 + ReDim Preserve criticalArray(criticalArraySize) + criticalArray(criticalArraySize -1) = Trim(criticalPair) + temp2 = position4 + 1 + position3 = position4 + position4 = InStr(temp2, criticalValueString, ",") + If(position4 = 0) then + position4 = Len(criticalValueString)+1 + End If + loop + End If + If(Int(criticalArraySize) < Int(instanceArraySize)) Then + ReDim Preserve criticalArray(instanceArraySize) + For i = 0 To (instanceArraySize - criticalArraySize - 1) + criticalArray(criticalArraySize +i) = criticalArray(criticalArraySize-1) + Next + criticalArraySize = instanceArraySize + End If + + End Function + +'------------------------------------------------------------------------------------------------- +'Function Name: f_LocalPerfValue. +'Descripton: Get perform value at Local Host. +'Input: No. +'Output: No. +'------------------------------------------------------------------------------------------------- + Function f_LocalPerfValue() + + On Error Resume Next + + Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\" & strNameSpace) + f_Error() + + 'Set colInstances = GetObject("winmgmts:{impersonationLevel=impersonate}\\" & strComputer & "\" & strNameSpace).InstancesOf(strClass) + 'For Each objInstance in colInstances + 'Next + 'f_Error() + + f_GetInformation() + + End Function + +'------------------------------------------------------------------------------------------------- +'Function Name: f_RemotePerfValue. +'Descripton: Get perform values at Remote Host. +'Input: No. +'Output: Values. +'------------------------------------------------------------------------------------------------- + Function f_RemotePerfValue() + + On Error Resume Next + + Set objSWbemLocator = CreateObject("WbemScripting.SWbemLocator") + if (strDomain = "") then + Set objWMIService = objSWbemLocator.ConnectServer _ + (strComputer, strNameSpace , strUser, strPass ) + f_Error() + + 'Set colInstances = objSWbemLocator.ConnectServer(strComputer, strNamespace , strUser, strPass).InstancesOf(strClass) + 'For Each objInstance in colInstances + 'Next + 'f_Error() + else + Set objWMIService = objSWbemLocator.ConnectServer _ + (strComputer, strNameSpace , strUser, strPass,"MS_409","ntlmdomain:" + strDomain ) + f_Error() + + 'Set colInstances = objSWbemLocator.ConnectServer(strComputer, strNamespace , strUser, strPass,"MS_409","ntlmdomain:" & strDomain ).InstancesOf(strClass) + 'For Each objInstance in colInstances + 'Next + 'f_Error() + end if + objWMIService.Security_.ImpersonationLevel = 3 + f_Error() + + f_GetInformation() + + End Function + +'************************************************************************************************* +' Main Function +'************************************************************************************************* + + '///////////////////// + + strCommandName="check_counter_rawcount.vbs" + strDescription="Enumerate the needed windows host information." + + '///////////////////// + + strNameSpace = "root\cimv2" + + f_GetAllArg() + tempCount = argcountcommand/2 + f_Error() + strClass = "" + if ((UCase(arg(0))="-H") Or (UCase(arg(0))="--HELP")) and (argcountcommand=1) then + f_help() + else + if( ((argcountcommand Mod 2) = 0) and (3 < tempCount < 10)) then + strComputer = f_GetOneArg("-h") + strClass = f_GetOneArg("-class") + strProp = f_GetOneArg("-prop") + strInst = f_GetOneArg("-inst") + f_GetInstances() + warningValue = f_GetOneArg("-w") + warningValueString = f_GetOneArg("-w") + criticalValue = f_GetOneArg("-c") + criticalValueString = f_GetOneArg("-c") + If((warningValueString <> "") Or (criticalValueString <> "")) Then + f_GetWarningCriticalValues() + End if + strUser = f_GetOneArg("-user") + strPass = f_GetOneArg("-pass") + strDomain = f_GetOneArg("-domain") + if((strComputer = "") or (strClass = "") or (strProp = "") or (strInst = "")) then + Wscript.Echo "Error! Arguments wrong, require verify -h -class -prop -inst parameters" + Wscript.Quit(intError) + else + Select Case tempCount + Case 4: + f_LocalPerfValue() + Case 6: + if ((warningValue <> "") and (criticalValue <> "")) then + f_LocalPerfValue() + end if + if ((strUser <> "") and (strPass <> "")) then + f_RemotePerfValue() + else + Wscript.Echo "Error! Arguments wrong, please verify -user -pass or -w -c parameters" + Wscript.Quit(intError) + end if + Case 8: + if ((strUser <> "") and (strPass <> "") and (warningValue <> "") and (criticalValue <> "")) then + f_RemotePerfValue() + else + Wscript.Echo "Error! Arguments wrong for remote check, please verify -w -c -user -pass parameters" + Wscript.Quit(intError) + end if + Case 9: + if ((strUser <> "") and (strPass <> "") and (warningValue <> "") and (criticalValue <> "") and (strDomain <> "")) then + f_RemotePerfValue() + else + Wscript.Echo "Error! Arguments wrong for remote check, please verify -w -c -user -pass -domain parameters" + Wscript.Quit(intError) + end if + Case Else + Wscript.Echo "Error! Arguments wrong, please type -h for Help" + Wscript.Quit(intError) + End Select + + end if + else + Wscript.Echo "Error! Arguments wrong, please type -h for Help" + Wscript.Quit(intError) + end if + + end if \ No newline at end of file diff --git a/nsclient/trunk/scripts/wmi/check_counter_rawcount.vbs b/nsclient/trunk/scripts/wmi/check_counter_rawcount.vbs new file mode 100644 index 0000000..616f749 --- /dev/null +++ b/nsclient/trunk/scripts/wmi/check_counter_rawcount.vbs @@ -0,0 +1,848 @@ +' Copyright 2007 GroundWork Open Source Inc. +' +' This program is free software; you can redistribute it and/or +' modify it under the terms of the GNU General Public License +' as published by the Free Software Foundation; version 2 +' of the License. +' +' This program is distributed in the hope that it will be useful, +' but WITHOUT ANY WARRANTY; without even the implied warranty of +' MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +' GNU General Public License for more details. +' +' +' Author Dr. Dave Blunt at GroundWork Open Source Inc. (dblunt@groundworkopensource.com) + +'************************************************************************************************* +' Public Variable +'************************************************************************************************* +Const intOK = 0 +Const intWarning = 1 +Const intCritical = 2 +Const intError = 3 +Const intUnknown = 3 + +Dim argcountcommand +Dim arg(20) +Dim strComputer +Dim strClass +Dim strProp +Dim strInst +Dim warningValue +Dim warningValueString +Dim criticalValue +Dim criticalValueString +Dim strUser +Dim strPass +Dim strDomain +Dim strNameSpace +Dim strDescription +Dim strCommandName +Dim strResultTemp +Dim strResult +Dim strResult1 +Dim strResult2 +Dim intReturnTemp +Dim intReturn +Dim strResultTemp1 +Dim strResultTemp2 +Dim strResultTemp3 +Dim strResultTemp4 +Dim intReturnTemp1 +Dim strPrefix +Dim intValue +Dim returnValue +Dim strPropName +Dim instanceArray() +Dim instanceArraySize +Dim warningArraySize +Dim criticalArraySize +Dim warningArray() +Dim criticalArray() +Dim instance +Dim propArray() +Dim propArraySize +Dim lWarningValue +Dim uWarningValue +Dim lCriticalValue +Dim uCriticalValue + +Dim ArgCount +Dim strArgMain(10) +Dim strArgSortDes(10) +Dim strArgDetailDes(10) +Dim strArgExample(10) + +Dim objWMIService, colWMI,objWMI,objSWbemLocator + +strComputer="" +strClass = "" +strProp = "" +strInst = "" +warningValue = -1 +criticalValue = -1 +strUser = "" +strPass = "" +strDomain = "" + +intReturnTemp1 = 0 +'************************************************************************************************* +' Functions and Subs +'************************************************************************************************* + +'------------------------------------------------------------------------------------------------- +'Function Name: f_Error. +'Descripton: Display an error notice include : Error Number and Error Description. +'Input: No. +'Output: No. +'------------------------------------------------------------------------------------------------- + Function f_Error() + + nbrError = err.number + if (nbrError <> 0 ) then + Select Case nbrError + Case 462, -2147023174 + strExitMsg = "Timeout connecting to WMI on this host! Error Number: " & nbrError & " Description: " & err.description + Case -2147024891 + strExitMsg = "Authentication failure to remote host! Error Number: " & nbrError & " Description: " & err.description + Case -2147217392 + strExitMsg = "Error! Number: " & nbrError & " Description: Invalid Class" + Case Else + strExitMsg = "Error! Number: " & nbrError & " Description: " & err.description + End Select + wscript.echo strExitMsg + wscript.quit(intUnknown) + end if + + End Function +'------------------------------------------------------------------------------------------------- +'Function Name: f_Help. +'Descripton: Display help of command include : Description, Arguments, Examples +'Input: No. +'Output: No. +'------------------------------------------------------------------------------------------------- + Function f_Help() + + Dim str + str="Check Counter RawCount. If your Local Machine has the same Administrator account and password as the Remote Machine then you don't have to use the two last parameters."&vbCrlF&vbCrlF + str=str&"cscript check_counter_rawcount.vbs -h hostname -class classname -prop property -inst instancename [-w warning_level -c critical_level] [-user username -pass password [-domain domain]]"&vbCrlF + str=str&vbCrlF + str=str&"-h [--help] Help."&vbCrlF + str=str&"-h hostname Host name."&vbCrlF + str=str&"-class classname Class name."&vbCrlF + str=str&"-prop property Property of Class."&vbCrlF + str=str&"-inst instance Needed Instance."&vbCrlF + str=str&"-w warning_level Warning threshold."&vbCrlF + str=str&"-c critical_level Critical threshold."&vbCrlF + str=str&"-user username Account Administrator on Remote Machine."&vbCrlF + str=str&"-pass password Password Account Administrator on Remote Machine."&vbCrlF + str=str&"-domain domain Domain Name of Remote Machine."&vbCrlF + str=str&vbCrlF + str=str&"Example: cscript check_counter_rawcount.vbs -h Ser1 -class Win32_PerfRawData_PerfProc_Process -prop HandleCount -inst ""*"" -w 30 -c 70 [-user Ser1\Administrator -pass password -domain ITSP] " + str=str&"Example: cscript check_counter_rawcount.vbs -h Ser1 -class Win32_PerfRawData_PerfProc_Process -prop HandleCount -inst ""IDProcess = '3612', IDProcess = '2156'"" -w 30 -c 70 [-user Ser1\Administrator -pass password -domain ITSP] " + wscript.echo str + + End Function +'------------------------------------------------------------------------------------------------- +'Function Name: f_GetAllArg. +'Descripton: Get all of arguments from command. +'Input: No. +'Output: No. +'------------------------------------------------------------------------------------------------- + Function f_GetAllArg() + + On Error Resume Next + + Dim i + + argcountcommand=WScript.Arguments.Count + + for i=0 to argcountcommand-1 + arg(i)=WScript.Arguments(i) + next + + End Function +'------------------------------------------------------------------------------------------------- +'Function Name: f_GetOneArg. +'Descripton: Get an argument from command. +'Input: Yes. +' strName: Name of argument +'Output: Value. +'------------------------------------------------------------------------------------------------- + Function f_GetOneArg(strName) + + On Error Resume Next + + Dim i + for i=0 to argcountcommand-1 + if (Ucase(arg(i))=Ucase(strName)) then + f_GetOneArg=arg(i+1) + Exit Function + end if + next + + End Function + +'------------------------------------------------------------------------------------------------- +'Function Name: f_GetInstance. +'Descripton: Get infomation at Local Host. +'Input: instance. +'Output: No. +'------------------------------------------------------------------------------------------------- + Function f_GetInstance(instance) + + On Error Resume Next + + strResultTemp1 = "" + strResultTemp2 = "" + strResultTemp = "" + intResultTemp = 0 + + strInstanceTemp1 = "" + strInstanceTemp2 = "" + intInstanceTemp1 = 0 + intInstanceTemp2 = 0 + + 'Depend on strInfo parameters to get the result value + + if(instance = "*") then + strQuery = "Select " & strProp & " from " & strClass + Set colWMI = objWMIService.ExecQuery(strQuery) + else + intInstanceTemp1 = InStr(1,instance,"=") + strInstanceTemp1 = Mid(instance,1,intInstanceTemp1-1) + intInstanceTemp2 = Len(instance) + strInstanceTemp2 = Mid(instance,intInstanceTemp1+1,intInstanceTemp2-intInstanceTemp1) + instance=strInstanceTemp1 & "='" & strInstanceTemp2 & "'" + + strQuery = "Select " & strProp & " from " & strClass & " where " & instance + Set colWMI = objWMIService.ExecQuery(strQuery) + end if + + count = -1 + count = colWMI.count + if(count = -1) then + Wscript.Echo "Unknown - No data received from WMI;" + Wscript.Quit(intUnknown) + else + if(colWMI.count > 0) then + f_FormatData(colWMI) + + strResultTemp1 = strResultTemp1 & strResultTemp3 + strResultTemp2 = strResultTemp2 & strResultTemp4 + intReturnTemp = intReturnTemp1 + Exit Function + else + strResultTemp1 = "Unknown - " & instance &" query: No row returned." + intReturnTemp = intUnknown + Exit Function + end if + end if + End Function + +'------------------------------------------------------------------------------------------------- +'Function Name: f_GetPrefix. +'Descripton: Get Prefix. +'Input: No. +'Output: No. +'------------------------------------------------------------------------------------------------- + Function f_GetPrefix(intValue) + + On Error Resume Next + + strPrefix = "" + If(warningValue <> "" And criticalValue = "") Then + If (IsNumeric(warningValue)) Then + If (Int(intValue) < Int(warningValue)) Then + returnValue=0 + strPrefix= "OK - " + Else + returnValue=1 + strPrefix= "Warning - " + End If + Else + Wscript.Echo "Error! Arguments wrong, please verify -w parameter" + Wscript.Quit(intError) + Exit Function + End If + End If + If(warningValue = "" And criticalValue <> "") Then + If (IsNumeric(criticalValue)) Then + If (Int(intValue) < Int(criticalValue)) Then + returnValue=0 + strPrefix= "OK - " + Else + returnValue=2 + strPrefix= "Critical - " + End If + Else + Wscript.Echo "Error! Arguments wrong, please verify -c parameter" + Wscript.Quit(intError) + Exit Function + End If + End If + If (warningValue <> "" And criticalValue <> "") Then + If (IsNumeric(warningValue) And IsNumeric(criticalValue)) Then + if (Int(warningValue) < Int(criticalValue)) then + + if (Int(intValue) < Int(warningValue)) then + returnValue=0 + strPrefix= "OK - " + else + if (Int(intValue) < Int(criticalValue)) then + returnValue=1 + strPrefix= "Warning - " + else + returnValue=2 + strPrefix= "Critical - " + end if + end if + else + if (Int(intValue) > Int(warningValue)) then + returnValue=0 + strPrefix= "OK - " + else + if (Int(intValue) > Int(criticalValue)) then + returnValue=1 + strPrefix= "Warning - " + else + returnValue=2 + strPrefix= "Critical - " + end if + end if + end If + Else + Wscript.Echo "Error! Arguments wrong, please verify -w -c parameter" + Wscript.Quit(intError) + Exit Function + End If + End If + + End Function + +'------------------------------------------------------------------------------------------------- +'Function Name: f_GetPrefixWithRange. +'Descripton: Get Prefix. +'Input: No. +'Output: No. +'------------------------------------------------------------------------------------------------- + Function f_GetPrefixWithRange(intValue) + + On Error Resume Next + lWarningValue = "" + uWarningValue = "" + lCriticalValue= "" + uCriticalValue= "" + warningReturn = 0 + criticalReturn = 0 + If(warningValue <> "") Then + f_GetWarningValueFromRange(warningValue) + End If + If(criticalValue <> "") Then + f_GetCriticalValueFromRange(criticalValue) + End If + strPrefix = "" + 'verify warning + If((lWarningValue <> "") And (uWarningValue <> "")) Then + If(Int(lWarningValue) <= Int(uWarningValue)) Then + If((Int(lWarningValue) >= Int(intValue)) Or (Int(intValue) >= Int(uWarningValue))) Then + warningReturn=1 + End If + Else + If((Int(intValue) >= Int(uWarningValue) ) And (Int(intValue) <= Int(lWarningValue))) Then + warningReturn=1 + End If + End If + End If + If((lWarningValue <> "") And (uWarningValue = "")) Then + If(Int(intValue) <= Int(lWarningValue)) Then + warningReturn=1 + End If + End If + If((lWarningValue = "") And (uWarningValue <> "")) Then + If(Int(intValue) >= Int(uWarningValue)) Then + warningReturn=1 + End If + End If + + 'verify critical + If((lCriticalValue <> "") And (uCriticalValue <> "")) Then + If(Int(lCriticalValue) <= Int(uCriticalValue)) Then + If((Int(lCriticalValue) >= Int(intValue)) Or (Int(intValue) >= Int(uCriticalValue))) Then + criticalReturn=2 + End If + Else + If((Int(intValue) >= Int(uCriticalValue) ) And (Int(intValue) <= Int(lCriticalValue))) Then + criticalReturn=2 + End If + End If + End If + If((lCriticalValue <> "") And (uCriticalValue = "")) Then + If(Int(intValue) <= Int(lCriticalValue)) Then + criticalReturn=2 + End If + End If + If((lCriticalValue = "") And (uCriticalValue <> "")) Then + If(Int(intValue) >= Int(uCriticalValue)) Then + criticalReturn=2 + End If + End If + + 'return result + If(criticalReturn = 2) Then + returnValue=2 + strPrefix= "Critical - " + Else + If(warningReturn = 1) Then + returnValue=1 + strPrefix= "Warning - " + Else + returnValue=0 + strPrefix= "Ok - " + End If + End If + + End Function + +'------------------------------------------------------------------------------------------------- +'Function Name: f_GetWarningValueFromRange(). +'Descripton: Get perform value at Local Host. +'Input: warningValueRange. +'Output: No. +'------------------------------------------------------------------------------------------------- + Function f_GetWarningValueFromRange(warningValue) + + On Error Resume Next + lWarningValue = "" + uWarningValue = "" + temp1 = 0 + temp1 = InStr(1, warningValue, ":") + if(temp1 > 0) then + lWarningTemp = Mid(warningValue, 1, temp1 -1) + uWarningTemp = Mid(warningValue, temp1 +1, len(warningValue) - temp1) + if(IsNumeric(lWarningTemp) or IsNumeric(uWarningTemp)) then + lWarningValue = lWarningTemp + uWarningValue = uWarningTemp + else + Wscript.Echo "Error! Arguments wrong, please verify -w parameter" + Wscript.Quit(intError) + Exit Function + end if + else + Wscript.Echo "Error! Arguments wrong, please verify -w parameter" + Wscript.Quit(intError) + Exit Function + end if + + End Function + +'------------------------------------------------------------------------------------------------- +'Function Name: f_GetCriticalValueFromRange(). +'Descripton: Get perform value at Local Host. +'Input: warningValueRange. +'Output: No. +'------------------------------------------------------------------------------------------------- + Function f_GetCriticalValueFromRange(criticalValue) + + On Error Resume Next + lCriticalValue = "" + uCriticalValue = "" + temp1 = 0 + temp1 = InStr(1, criticalValue, ":") + if(temp1 > 0) then + lCriticalTemp = Mid(criticalValue, 1, temp1 -1) + uCriticalTemp = Mid(criticalValue, temp1 +1, len(criticalValue) - temp1) + if(IsNumeric(lCriticalTemp) or IsNumeric(uCriticalTemp)) then + lCriticalValue = lCriticalTemp + uCriticalValue = uCriticalTemp + else + Wscript.Echo "Error! Arguments wrong, please verify -c parameter" + Wscript.Quit(intError) + Exit Function + end if + else + WScript.Echo "Error! Arguments wrong, please verify -c parameter" + Wscript.Quit(intError) + Exit Function + end if + + End Function + +'------------------------------------------------------------------------------------------------- +'Function Name: f_FormatData. +'Descripton: Format data the same as output. +'Input: service. +'Output: No. +'------------------------------------------------------------------------------------------------- + Function f_FormatData(colWMI) + + On Error Resume Next + + strDisplay1 = "" + strDisplay2 = "" + strResultTemp3 = "" + strResultTemp4 = "" + + For Each objWMI in colWMI + strName = objWMI.Name + strPropName = objWMI.Properties_(strProp).Name + intValue = objWMI.Properties_(strProp) + Dim strDSName + strDSName = f_FormatDSName(strName) + + if((warningValue <> "") and (criticalValue <> "")) then + strDisplay1 = strName & " '" & strPropName & "'" & " = " & intValue & "; " + strDisplay2 = "'" &strDSName & "'" & "=" & intValue & ";" & warningValue & ";" & criticalValue & ";; " + If(InStr(1, warningValue, ":") > 0 Or InStr(1, criticalValue, ":") > 0) Then + f_GetPrefixWithRange(intValue) + Else + f_GetPrefix(intValue) + End If + strResultTemp3 = strResultTemp3 & strPrefix & strDisplay1 + strResultTemp4 = strResultTemp4 & strDisplay2 + if( intReturnTemp1 < returnValue) then + intReturnTemp1 = returnValue + end if + else + strResultTemp3 = strResultTemp3 & "OK - " & strName & " '" & strPropName & "'" & " = " & intValue & "; " + strResultTemp4 = "" + end if + Next + + End Function + +'------------------------------------------------------------------------------------------------- +'Function Name: f_FormatDSName. +'Descripton: Get infomation at Local Host. +'Input: strName. +'Output: No. +'------------------------------------------------------------------------------------------------- + Function f_FormatDSName(strName) + + On Error Resume Next + + first = 1 + position1 = 0 + + position1 = InStr(first, strName, "=") + Dim proc_name + proc_name = "" + If(position1 > 0) Then + proc_name = Mid(strName,position1+1,(Len(strName)-position1)) + proc_name = Replace(proc_name,".","_") + proc_name = Replace(proc_name,"-","_") + proc_name = Mid(proc_name,1, 19) + + + Else + proc_name = Mid(strName,position1+1,(Len(strName)-position1)) + proc_name = Replace(proc_name,".","_") + proc_name = Replace(proc_name,"-","_") + proc_name = Mid(proc_name,1, 19) + + End If + f_FormatDSName = proc_name + Exit Function + End Function + +'------------------------------------------------------------------------------------------------- +'Function Name: f_GetInformation. +'Descripton: Get information data. +'Input: No. +'Output: Values. +'------------------------------------------------------------------------------------------------- + Function f_GetInformation() + + On Error Resume Next + + strResult = "" + strResult1 = "" + strResult2 = "" + intReturn = 0 + + If(instanceArraySize > 0 and (warningArraySize > 1 Or criticalArraySize > 1)) Then + for i = 0 to instanceArraySize -1 + instance = instanceArray(i) + warningValue = warningArray(i) + criticalValue = criticalArray(i) + f_GetInstance(instance) + strResult1 = strResult1 & strResultTemp1 + strResult2 = strResult2 & strResultTemp2 + if intReturn < intReturnTemp then + intReturn = intReturnTemp + end if + Next + Else + for i = 0 to instanceArraySize -1 + instance = instanceArray(i) + f_GetInstance(instance) + strResult1 = strResult1 & strResultTemp1 + strResult2 = strResult2 & strResultTemp2 + if intReturn < intReturnTemp then + intReturn = intReturnTemp + end if + Next + end if + if(strResult2 = "") then + strResult = strResult1 + else + strResult = strResult1 & "|" & strResult2 + end if + Wscript.Echo strResult + Wscript.Quit(intReturn) + + End Function + +'------------------------------------------------------------------------------------------------- +'Function Name: f_GetInstances. +'Descripton: Get Prefix. +'Input: No. +'Output: No. +'------------------------------------------------------------------------------------------------- + Function f_GetInstances() + + On Error Resume Next + + first = 1 + position = 0 + instanceArraySize = 0 + + position = InStr(first, strInst, ",") + if (position = 0) then + instanceTemp = strInst + InstanceArraySize = 1 + ReDim instanceArray(instanceArraySize) + instanceArray(0) = instanceTemp + + else + do while (position > 0) + instanceTemp = Mid(strInst,first,position - first) + instanceArraySize = instanceArraySize + 1 + ReDim Preserve instanceArray(instanceArraySize) + instanceArray(instanceArraySize -1) = Trim(instanceTemp) + first = position + 1 + position = InStr(first, strInst, ",") + loop + instanceTemp = Mid(strInst,first,len(strInst)) + instanceArraySize = instanceArraySize + 1 + ReDim Preserve instanceArray(instanceArraySize) + instanceArray(instanceArraySize -1) = Trim(instanceTemp) + end if + + End Function + +'------------------------------------------------------------------------------------------------- +'Function Name: f_GetWarningCriticalValues. +'Descripton: Get Prefix. +'Input: No. +'Output: No. +'------------------------------------------------------------------------------------------------- + Function f_GetWarningCriticalValues() + + On Error Resume Next + + position1 = 0 + position2 = 0 + position3 = 0 + position4 = 0 + temp1 = 1 + temp2 = 1 + warningArraySize = 0 + criticalArraySize = 0 + + 'get warning + position2 = InStr(temp1, warningValueString, ",") + If(position2 = 0) then + position2 = Len(warningValueString)+1 + end if + + If(position2 > position1) then + do while (position2 > position1) + warningPair = Mid(warningValueString, position1 + 1, (position2 - position1 -1)) + warningArraySize = warningArraySize + 1 + ReDim Preserve warningArray(warningArraySize) + warningArray(warningArraySize -1) = Trim(warningPair) + temp1 = position2 + 1 + position1 = position2 + position2 = InStr(temp1, warningValueString, ",") + If(position2 = 0) then + position2 = Len(warningValueString)+1 + End If + loop + end If + + If(Int(warningArraySize) < Int(instanceArraySize)) Then + ReDim Preserve warningArray(instanceArraySize) + For i = 0 To (instanceArraySize - warningArraySize - 1) + warningArray(warningArraySize +i) = warningArray(warningArraySize-1) + Next + warningArraySize = instanceArraySize + End If + 'get critical + position4 = InStr(temp2, criticalValueString, ",") + If(position4 = 0) then + position4 = Len(criticalValueString)+1 + end if + + If(position4 > position3) then + do while (position4 > position3) + criticalPair = Mid(criticalValueString, position3 + 1, (position4 - position3 -1)) + criticalArraySize = criticalArraySize + 1 + ReDim Preserve criticalArray(criticalArraySize) + criticalArray(criticalArraySize -1) = Trim(criticalPair) + temp2 = position4 + 1 + position3 = position4 + position4 = InStr(temp2, criticalValueString, ",") + If(position4 = 0) then + position4 = Len(criticalValueString)+1 + End If + loop + End If + If(Int(criticalArraySize) < Int(instanceArraySize)) Then + ReDim Preserve criticalArray(instanceArraySize) + For i = 0 To (instanceArraySize - criticalArraySize - 1) + criticalArray(criticalArraySize +i) = criticalArray(criticalArraySize-1) + Next + criticalArraySize = instanceArraySize + End If + + End Function + +'------------------------------------------------------------------------------------------------- +'Function Name: f_LocalPerfValue. +'Descripton: Get perform value at Local Host. +'Input: No. +'Output: No. +'------------------------------------------------------------------------------------------------- + Function f_LocalPerfValue() + + On Error Resume Next + + Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\" & strNameSpace) + f_Error() + + 'Set colInstances = GetObject("winmgmts:{impersonationLevel=impersonate}\\" & strComputer & "\" & strNameSpace).InstancesOf(strClass) + 'For Each objInstance in colInstances + 'Next + 'f_Error() + + f_GetInformation() + + End Function + +'------------------------------------------------------------------------------------------------- +'Function Name: f_RemotePerfValue. +'Descripton: Get perform values at Remote Host. +'Input: No. +'Output: Values. +'------------------------------------------------------------------------------------------------- + Function f_RemotePerfValue() + + On Error Resume Next + + Set objSWbemLocator = CreateObject("WbemScripting.SWbemLocator") + if (strDomain = "") then + Set objWMIService = objSWbemLocator.ConnectServer _ + (strComputer, strNameSpace , strUser, strPass ) + f_Error() + + 'Set colInstances = objSWbemLocator.ConnectServer(strComputer, strNamespace , strUser, strPass).InstancesOf(strClass) + 'For Each objInstance in colInstances + 'Next + 'f_Error() + else + Set objWMIService = objSWbemLocator.ConnectServer _ + (strComputer, strNameSpace , strUser, strPass,"MS_409","ntlmdomain:" + strDomain ) + f_Error() + + 'Set colInstances = objSWbemLocator.ConnectServer(strComputer, strNamespace , strUser, strPass,"MS_409","ntlmdomain:" & strDomain ).InstancesOf(strClass) + 'For Each objInstance in colInstances + 'Next + 'f_Error() + end if + objWMIService.Security_.ImpersonationLevel = 3 + f_Error() + + f_GetInformation() + + End Function + +'************************************************************************************************* +' Main Function +'************************************************************************************************* + + '///////////////////// + + strCommandName="check_counter_rawcount.vbs" + strDescription="Enumerate the needed windows host information." + + '///////////////////// + + strNameSpace = "root\cimv2" + + f_GetAllArg() + tempCount = argcountcommand/2 + f_Error() + strClass = "" + if ((UCase(arg(0))="-H") Or (UCase(arg(0))="--HELP")) and (argcountcommand=1) then + f_help() + else + if( ((argcountcommand Mod 2) = 0) and (3 < tempCount < 10)) then + strComputer = f_GetOneArg("-h") + strClass = f_GetOneArg("-class") + strProp = f_GetOneArg("-prop") + strInst = f_GetOneArg("-inst") + f_GetInstances() + warningValue = f_GetOneArg("-w") + warningValueString = f_GetOneArg("-w") + criticalValue = f_GetOneArg("-c") + criticalValueString = f_GetOneArg("-c") + If((warningValueString <> "") Or (criticalValueString <> "")) Then + f_GetWarningCriticalValues() + End if + strUser = f_GetOneArg("-user") + strPass = f_GetOneArg("-pass") + strDomain = f_GetOneArg("-domain") + if((strComputer = "") or (strClass = "") or (strProp = "") or (strInst = "")) then + Wscript.Echo "Error! Arguments wrong, require verify -h -class -prop -inst parameters" + Wscript.Quit(intError) + else + Select Case tempCount + Case 4: + f_LocalPerfValue() + Case 6: + if ((warningValue <> "") and (criticalValue <> "")) then + f_LocalPerfValue() + end if + if ((strUser <> "") and (strPass <> "")) then + f_RemotePerfValue() + else + Wscript.Echo "Error! Arguments wrong, please verify -user -pass or -w -c parameters" + Wscript.Quit(intError) + end if + Case 8: + if ((strUser <> "") and (strPass <> "") and (warningValue <> "") and (criticalValue <> "")) then + f_RemotePerfValue() + else + Wscript.Echo "Error! Arguments wrong for remote check, please verify -w -c -user -pass parameters" + Wscript.Quit(intError) + end if + Case 9: + if ((strUser <> "") and (strPass <> "") and (warningValue <> "") and (criticalValue <> "") and (strDomain <> "")) then + f_RemotePerfValue() + else + Wscript.Echo "Error! Arguments wrong for remote check, please verify -w -c -user -pass -domain parameters" + Wscript.Quit(intError) + end if + Case Else + Wscript.Echo "Error! Arguments wrong, please type -h for Help" + Wscript.Quit(intError) + End Select + + end if + else + Wscript.Echo "Error! Arguments wrong, please type -h for Help" + Wscript.Quit(intError) + end if + + end if \ No newline at end of file diff --git a/nsclient/trunk/scripts/wmi/check_cpu_load_percentage.vbs b/nsclient/trunk/scripts/wmi/check_cpu_load_percentage.vbs new file mode 100644 index 0000000..d73372f --- /dev/null +++ b/nsclient/trunk/scripts/wmi/check_cpu_load_percentage.vbs @@ -0,0 +1,1002 @@ +' Copyright 2007 GroundWork Open Source Inc. +' +' This program is free software; you can redistribute it and/or +' modify it under the terms of the GNU General Public License +' as published by the Free Software Foundation; version 2 +' of the License. +' +' This program is distributed in the hope that it will be useful, +' but WITHOUT ANY WARRANTY; without even the implied warranty of +' MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +' GNU General Public License for more details. +' +' +' Author Dr. Dave Blunt at GroundWork Open Source Inc. (dblunt@groundworkopensource.com) + +'************************************************************************************************* +' Public Variable +'************************************************************************************************* +Const intOK = 0 +Const intWarning = 1 +Const intCritical = 2 +Const intError = 3 +Const intUnknown = 3 + +Dim argcountcommand +Dim arg(20) +Dim strComputer +Dim strClass +Dim strProp +Dim strDisks +Dim warningValue +Dim warningValueString +Dim criticalValue +Dim criticalValueString +Dim strUser +Dim strPass +Dim strDomain +Dim strNameSpace +Dim strDescription +Dim strCommandName +Dim strResultTemp +Dim strResult +Dim strResult1 +Dim strResult2 +Dim intReturnTemp +Dim intReturn +Dim strResultTemp1 +Dim strResultTemp2 +Dim strResultTemp3 +Dim strResultTemp4 +Dim intReturnTemp1 +Dim strPrefix +Dim intValue +Dim returnValue +Dim strThresolds +Dim strThresoldPair +Dim instanceArray() +Dim instanceArraySize +Dim thresoldArraySize +Dim warningArraySize +Dim criticalArraySize +Dim warningArray() +Dim criticalArray() +Dim instance +Dim lWarningValue +Dim uWarningValue +Dim lCriticalValue +Dim uCriticalValue + +Dim strDisplay1 +Dim strDisplay2 +Dim strName +Dim strPropName +Dim intAverageValue + +Dim ArgCount +Dim strArgMain(10) +Dim strArgSortDes(10) +Dim strArgDetailDes(10) +Dim strArgExample(10) + +Dim objWMIService, colWMI,objWMI,objSWbemLocator + +strComputer="" +strClass = "" +strProp = "" +strInst = "" +warningValue = -1 +criticalValue = -1 +strUser = "" +strPass = "" +strDomain = "" + +intReturnTemp1 = 0 +'************************************************************************************************* +' Functions and Subs +'************************************************************************************************* + +'------------------------------------------------------------------------------------------------- +'Function Name: f_Error. +'Descripton: Display an error notice include : Error Number and Error Description. +'Input: No. +'Output: No. +'------------------------------------------------------------------------------------------------- + Function f_Error() + + nbrError = err.number + if (nbrError <> 0 ) then + Select Case nbrError + Case 462, -2147023174 + strExitMsg = "Timeout connecting to WMI on this host! Error Number: " & nbrError & " Description: " & err.description + Case -2147024891 + strExitMsg = "Authentication failure to remote host! Error Number: " & nbrError & " Description: " & err.description + Case -2147217392 + strExitMsg = "Error! Number: " & nbrError & " Description: Invalid Class" + Case Else + strExitMsg = "Error! Number: " & nbrError & " Description: " & err.description + End Select + wscript.echo strExitMsg + wscript.quit(intUnknown) + end if + + End Function + + +'------------------------------------------------------------------------------------------------- +'Function Name: f_Help. +'Descripton: Display help of command include : Description, Arguments, Examples +'Input: No. +'Output: No. +'------------------------------------------------------------------------------------------------- + Function f_Help() + + Dim str + str="Check CPU Load Percentage. If your Local Machine has the same Administrator account and password as the Remote Machine then you don't have to use the two last parameters."&vbCrlF&vbCrlF + str=str&"cscript check_cpu_load_percentage.vbs -h hostname -inst DeviceID [-w warning_level -c critical_level] [-t thresoldpairs] [-user username -pass password [-domain domain]]"&vbCrlF + str=str&vbCrlF + str=str&"-h [--help] Help."&vbCrlF + str=str&"-h hostname Host name."&vbCrlF + str=str&"-inst processors DeviceID Instance."&vbCrlF + str=str&"-w warning_level Warning threshold by percentage."&vbCrlF + str=str&"-c critical_level Critical threshold by percentage."&vbCrlF + str=str&"-t thresold pairs Threshold pairs for each processor. Note: each thresold pair separated by a ':', warning value and critical separated by ',' character"&vbCrlF + str=str&"-user username Account Administrator on Remote Machine."&vbCrlF + str=str&"-pass password Password Account Administrator on Remote Machine."&vbCrlF + str=str&"-domain domain Domain Name of Remote Machine."&vbCrlF + str=str&vbCrlF + str=str&"Example: cscript check_cpu_load_percentage.vbs -h Ser1 -inst ""*"" -w 30 -c 70 [-user Ser1\Administrator -pass password -domain ITSP] " &vbCrlF + str=str&"Example: cscript check_cpu_load_percentage.vbs -h Ser1 -inst ""CPU0, _Total"" -w 30 -c 70 [-user Ser1\Administrator -pass password -domain ITSP] " &vbCrlF + str=str&"Example: cscript check_cpu_load_percentage.vbs -h Ser1 -inst ""CPU0, _Total"" -t ""70,90:60,80"" [-user Ser1\Administrator -pass password -domain ITSP] " &vbCrlF + wscript.echo str + + End Function +'------------------------------------------------------------------------------------------------- +'Function Name: f_GetAllArg. +'Descripton: Get all of arguments from command. +'Input: No. +'Output: No. +'------------------------------------------------------------------------------------------------- + Function f_GetAllArg() + + On Error Resume Next + + Dim i + + argcountcommand=WScript.Arguments.Count + + for i=0 to argcountcommand-1 + arg(i)=WScript.Arguments(i) + next + + End Function +'------------------------------------------------------------------------------------------------- +'Function Name: f_GetOneArg. +'Descripton: Get an argument from command. +'Input: Yes. +' strName: Name of argument +'Output: Value. +'------------------------------------------------------------------------------------------------- + Function f_GetOneArg(strName) + + On Error Resume Next + + Dim i + for i=0 to argcountcommand-1 + if (Ucase(arg(i))=Ucase(strName)) then + f_GetOneArg=arg(i+1) + Exit Function + end if + next + + End Function + +'------------------------------------------------------------------------------------------------- +'Function Name: f_GetInstance. +'Descripton: Get infomation at Local Host. +'Input: instance. +'Output: No. +'------------------------------------------------------------------------------------------------- + Function f_GetInstance(instance) + + On Error Resume Next + + strResultTemp1 = "" + strResultTemp2 = "" + intResultTemp1 = 0 + strResultTemp = "" + intResultTemp = 0 + + if(instance = "*") then + For Each objWMI in colWMI + strName = objWMI.Properties_("DeviceID") + strPropName = "Load Percentage" + intValue = objWMI.Properties_("LoadPercentage") + f_Display() + strResultTemp1 = strResultTemp1 & strResultTemp3 + strResultTemp2 = strResultTemp2 & strResultTemp4 + Next + strName = "_Total" + strPropName = "Load Percentage" +' intValue = Int(totalValue/objectCount) + intValue = Int(intAverageValue) + f_Display() + + strResultTemp1 = strResultTemp1 & strResultTemp3 + strResultTemp2 = strResultTemp2 & strResultTemp4 + intReturnTemp = intReturnTemp1 + Exit Function + else + if (Ucase(instance) = "_TOTAL") then + strName = "_Total" + strPropName = "Load Percentage" + intValue = intAverageValue + f_Display() + + strResultTemp1 = strResultTemp1 & strResultTemp3 + strResultTemp2 = strResultTemp2 & strResultTemp4 + intReturnTemp = intReturnTemp1 + Exit Function + else + For Each objWMI in colWMI + strName = objWMI.Properties_("DeviceID") + strPropName = "Load Percentage" + intValue = objWMI.Properties_("LoadPercentage") + if(Ucase(strName) = Ucase(instance)) then + f_Display() + strResultTemp1 = strResultTemp1 & strResultTemp3 + strResultTemp2 = strResultTemp2 & strResultTemp4 + intReturnTemp = intReturnTemp1 + Exit Function + end if + Next + strResultTemp1 = "Unknown - " & instance &" not exists." + intReturnTemp = intUnknown + Exit Function + end if + end if + + End Function + +'------------------------------------------------------------------------------------------------- +'Function Name: f_GetPrefix. +'Descripton: Get Prefix. +'Input: No. +'Output: No. +'------------------------------------------------------------------------------------------------- + Function f_GetPrefix(intValue) + + On Error Resume Next + + strPrefix = "" + If (Not(IsNumeric(intValue))) Then + Wscript.Echo "Unknown - LoadPercentage cannot be determined" + Wscript.Quit(intUnknown) + Exit Function + End If + If(warningValue <> "" And criticalValue = "") Then + If (IsNumeric(warningValue)) Then + If (Int(intValue) < Int(warningValue)) Then + returnValue=0 + strPrefix= "OK - " + Else + returnValue=1 + strPrefix= "Warning - " + End If + Else + Wscript.Echo "Error! Arguments wrong, please verify -w parameter" + Wscript.Quit(intError) + Exit Function + End If + End If + If(warningValue = "" And criticalValue <> "") Then + If (IsNumeric(criticalValue)) Then + If (Int(intValue) < Int(criticalValue)) Then + returnValue=0 + strPrefix= "OK - " + Else + returnValue=2 + strPrefix= "Critical - " + End If + Else + Wscript.Echo "Error! Arguments wrong, please verify -c parameter" + Wscript.Quit(intError) + Exit Function + End If + End If + If (warningValue <> "" And criticalValue <> "") Then + If (IsNumeric(warningValue) And IsNumeric(criticalValue)) Then + if (Int(warningValue) < Int(criticalValue)) then + + if (Int(intValue) < Int(warningValue)) then + returnValue=0 + strPrefix= "OK - " + else + if (Int(intValue) < Int(criticalValue)) then + returnValue=1 + strPrefix= "Warning - " + else + returnValue=2 + strPrefix= "Critical - " + end if + end if + else + if (Int(intValue) > Int(warningValue)) then + returnValue=0 + strPrefix= "OK - " + else + if (Int(intValue) > Int(criticalValue)) then + returnValue=1 + strPrefix= "Warning - " + else + returnValue=2 + strPrefix= "Critical - " + end if + end if + end If + Else + Wscript.Echo "Error! Arguments wrong, please verify -w -c parameter" + Wscript.Quit(intError) + Exit Function + End If + End If + + End Function + +'------------------------------------------------------------------------------------------------- +'Function Name: f_GetPrefixWithRange. +'Descripton: Get Prefix. +'Input: No. +'Output: No. +'------------------------------------------------------------------------------------------------- + Function f_GetPrefixWithRange(intValue) + + On Error Resume Next + lWarningValue = "" + uWarningValue = "" + lCriticalValue= "" + uCriticalValue= "" + warningReturn = 0 + criticalReturn = 0 + If (Not(IsNumeric(intValue))) Then + Wscript.Echo "Unknown - LoadPercentage cannot be determined" + Wscript.Quit(intUnknown) + Exit Function + End If + If(warningValue <> "") Then + f_GetWarningValueFromRange(warningValue) + End If + If(criticalValue <> "") Then + f_GetCriticalValueFromRange(criticalValue) + End If + strPrefix = "" + 'verify warning + If((lWarningValue <> "") And (uWarningValue <> "")) Then + If(Int(lWarningValue) <= Int(uWarningValue)) Then + If((Int(lWarningValue) >= Int(intValue)) Or (Int(intValue) >= Int(uWarningValue))) Then + warningReturn=1 + End If + Else + If((Int(intValue) >= Int(uWarningValue) ) And (Int(intValue) <= Int(lWarningValue))) Then + warningReturn=1 + End If + End If + End If + If((lWarningValue <> "") And (uWarningValue = "")) Then + If(Int(intValue) <= Int(lWarningValue)) Then + warningReturn=1 + End If + End If + If((lWarningValue = "") And (uWarningValue <> "")) Then + If(Int(intValue) >= Int(uWarningValue)) Then + warningReturn=1 + End If + End If + + 'verify critical + If((lCriticalValue <> "") And (uCriticalValue <> "")) Then + If(Int(lCriticalValue) <= Int(uCriticalValue)) Then + If((Int(lCriticalValue) >= Int(intValue)) Or (Int(intValue) >= Int(uCriticalValue))) Then + criticalReturn=2 + End If + Else + If((Int(intValue) >= Int(uCriticalValue) ) And (Int(intValue) <= Int(lCriticalValue))) Then + criticalReturn=2 + End If + End If + End If + If((lCriticalValue <> "") And (uCriticalValue = "")) Then + If(Int(intValue) <= Int(lCriticalValue)) Then + criticalReturn=2 + End If + End If + If((lCriticalValue = "") And (uCriticalValue <> "")) Then + If(Int(intValue) >= Int(uCriticalValue)) Then + criticalReturn=2 + End If + End If + + 'return result + If(criticalReturn = 2) Then + returnValue=2 + strPrefix= "Critical - " + Else + If(warningReturn = 1) Then + returnValue=1 + strPrefix= "Warning - " + Else + returnValue=0 + strPrefix= "Ok - " + End If + End If + + End Function + +'------------------------------------------------------------------------------------------------- +'Function Name: f_GetWarningValueFromRange(). +'Descripton: Get perform value at Local Host. +'Input: warningValueRange. +'Output: No. +'------------------------------------------------------------------------------------------------- + Function f_GetWarningValueFromRange(warningValue) + + On Error Resume Next + lWarningValue = "" + uWarningValue = "" + temp1 = 0 + temp1 = InStr(1, warningValue, ":") + if(temp1 > 0) then + lWarningTemp = Mid(warningValue, 1, temp1 -1) + uWarningTemp = Mid(warningValue, temp1 +1, len(warningValue) - temp1) + if(IsNumeric(lWarningTemp) or IsNumeric(uWarningTemp)) then + lWarningValue = lWarningTemp + uWarningValue = uWarningTemp + else + Wscript.Echo "Error! Arguments wrong, please verify -w parameter" + Wscript.Quit(intError) + Exit Function + end if + else + Wscript.Echo "Error! Arguments wrong, please verify -w parameter" + Wscript.Quit(intError) + Exit Function + end if + + End Function + +'------------------------------------------------------------------------------------------------- +'Function Name: f_GetCriticalValueFromRange(). +'Descripton: Get perform value at Local Host. +'Input: warningValueRange. +'Output: No. +'------------------------------------------------------------------------------------------------- + Function f_GetCriticalValueFromRange(criticalValue) + + On Error Resume Next + lCriticalValue = "" + uCriticalValue = "" + temp1 = 0 + temp1 = InStr(1, criticalValue, ":") + if(temp1 > 0) then + lCriticalTemp = Mid(criticalValue, 1, temp1 -1) + uCriticalTemp = Mid(criticalValue, temp1 +1, len(criticalValue) - temp1) + if(IsNumeric(lCriticalTemp) or IsNumeric(uCriticalTemp)) then + lCriticalValue = lCriticalTemp + uCriticalValue = uCriticalTemp + else + Wscript.Echo "Error! Arguments wrong, please verify -c parameter" + Wscript.Quit(intError) + Exit Function + end if + else + WScript.Echo "Error! Arguments wrong, please verify -c parameter" + Wscript.Quit(intError) + Exit Function + end if + + End Function + +'------------------------------------------------------------------------------------------------- +'Function Name: f_Display. +'Descripton: Get Prefix. +'Input: No. +'Output: No. +'------------------------------------------------------------------------------------------------- + Function f_Display() + + On Error Resume Next + + strDisplay1 = "" + strDisplay2 = "" + strResultTemp3 = "" + strResultTemp4 = "" + 'strName = instance + 'strPropName = "Number of processes with " + 'intValue = count + Dim strDSName + strDSName = f_FormatDSName(strName) + if((warningValue <> "") Or (criticalValue <> "")) then + strDisplay1 = strName & " '" & strPropName & "'" & " = " & intValue & "; " + strDisplay2 = "'" & strDSName & "'" & "=" & intValue & ";" & warningValue & ";" & criticalValue & ";; " + If(InStr(1, warningValue, ":") > 0 Or InStr(1, criticalValue, ":") > 0) Then + f_GetPrefixWithRange(intValue) + Else + f_GetPrefix(intValue) + End If + strResultTemp3 = strResultTemp3 & strPrefix & strDisplay1 + strResultTemp4 = strResultTemp4 & strDisplay2 + if( intReturnTemp1 < returnValue) then + intReturnTemp1 = returnValue + end if + else + strResultTemp3 = strResultTemp3 & "OK - " & strName & " '" & strPropName & "'" & " = " & intValue & "; " + strResultTemp4 = "" + end if + + End Function + +'------------------------------------------------------------------------------------------------- +'Function Name: f_FormatDSName. +'Descripton: Get infomation at Local Host. +'Input: strName. +'Output: No. +'------------------------------------------------------------------------------------------------- + Function f_FormatDSName(strName) + + On Error Resume Next + + first = 1 + position1 = 0 + + position1 = InStr(first, strName, "=") + Dim proc_name + proc_name = "" + If(position1 > 0) Then + proc_name = Mid(strName,position1+1,(Len(strName)-position1)) + proc_name = Replace(proc_name,".","_") + proc_name = Replace(proc_name,"-","_") + proc_name = Mid(proc_name,1, 19) + + + Else + proc_name = Mid(strName,position1+1,(Len(strName)-position1)) + proc_name = Replace(proc_name,".","_") + proc_name = Replace(proc_name,"-","_") + proc_name = Mid(proc_name,1, 19) + + End If + f_FormatDSName = proc_name + Exit Function + End Function + +'------------------------------------------------------------------------------------------------- +'Function Name: f_ExecQuery. +'Descripton: Format data the same as output. +'Input: service. +'Output: No. +'------------------------------------------------------------------------------------------------- + Function f_ExecQuery() + + On Error Resume Next + + strQuery = "Select " & strProp & " from " & strClass + Set colWMI = objWMIService.ExecQuery(strQuery) + count = -1 + count = colWMI.count + if(count = -1) then + Wscript.Echo "Unknown - No data received from WMI;" + Wscript.Quit(intUnknown) + end if + + intValue = 0 + objectCount = 0 + totalValue = 0 + intAverageValue = 0 + + For Each objWMI in colWMI + intValueTemp = objWMI.Properties_("LoadPercentage") + totalValue = totalValue + intValueTemp + objectCount = objectCount + 1 + Next + intAverageValue = totalValue/objectCount + + End Function + +'------------------------------------------------------------------------------------------------- +'Function Name: f_GetInformation. +'Descripton: Get information data. +'Input: No. +'Output: Values. +'------------------------------------------------------------------------------------------------- + Function f_GetInformation() + + On Error Resume Next + + strResult = "" + strResult1 = "" + strResult2 = "" + intReturn = 0 + + if(thresoldArraySize > 0 and (thresoldArraySize <> instanceArraySize)) then + Wscript.Echo "Error! Arguments wrong, number of instances and thresolds do not match." + Wscript.Quit(intError) + Exit Function + end if + + If(thresoldArraySize > 0 and (thresoldArraySize = instanceArraySize)) then + for i = 0 to instanceArraySize -1 + instance = instanceArray(i) + warningValue = warningArray(i) + criticalValue = criticalArray(i) + f_GetInstance(instance) + strResult1 = strResult1 & strResultTemp1 + strResult2 = strResult2 & strResultTemp2 + if intReturn < intReturnTemp then + intReturn = intReturnTemp + end if + Next + Else + If(instanceArraySize > 0 and (warningArraySize > 1 Or criticalArraySize > 1)) Then + for i = 0 to instanceArraySize -1 + instance = instanceArray(i) + warningValue = warningArray(i) + criticalValue = criticalArray(i) + f_GetInstance(instance) + strResult1 = strResult1 & strResultTemp1 + strResult2 = strResult2 & strResultTemp2 + if intReturn < intReturnTemp then + intReturn = intReturnTemp + end if + Next + Else + for i = 0 to instanceArraySize -1 + instance = instanceArray(i) + f_GetInstance(instance) + strResult1 = strResult1 & strResultTemp1 + strResult2 = strResult2 & strResultTemp2 + if intReturn < intReturnTemp then + intReturn = intReturnTemp + end if + Next + End If + End if + if(strResult2 = "") then + strResult = strResult1 + else + strResult = strResult1 & "|" & strResult2 + end if + Wscript.Echo strResult + Wscript.Quit(intReturn) + + End Function + +'------------------------------------------------------------------------------------------------- +'Function Name: f_GetInstances. +'Descripton: Get Prefix. +'Input: No. +'Output: No. +'------------------------------------------------------------------------------------------------- + Function f_GetInstances() + + On Error Resume Next + + first = 1 + position = 0 + instanceArraySize = 0 + + position = InStr(first, strInst, ",") + if (position = 0) then + instanceTemp = strInst + InstanceArraySize = 1 + ReDim instanceArray(instanceArraySize) + instanceArray(0) = instanceTemp + + else + do while (position > 0) + instanceTemp = Mid(strInst,first,position - first) + instanceArraySize = instanceArraySize + 1 + ReDim Preserve instanceArray(instanceArraySize) + instanceArray(instanceArraySize -1) = Trim(instanceTemp) + first = position + 1 + position = InStr(first, strInst, ",") + loop + instanceTemp = Mid(strInst,first,len(strInst)) + instanceArraySize = instanceArraySize + 1 + ReDim Preserve instanceArray(instanceArraySize) + instanceArray(instanceArraySize -1) = Trim(instanceTemp) + end if + + End Function + +'------------------------------------------------------------------------------------------------- +'Function Name: f_GetWarningCriticalValues. +'Descripton: Get Prefix. +'Input: No. +'Output: No. +'------------------------------------------------------------------------------------------------- + Function f_GetWarningCriticalValues() + + On Error Resume Next + + position1 = 0 + position2 = 0 + position3 = 0 + position4 = 0 + temp1 = 1 + temp2 = 1 + warningArraySize = 0 + criticalArraySize = 0 + + 'get warning + position2 = InStr(temp1, warningValueString, ",") + If(position2 = 0) then + position2 = Len(warningValueString)+1 + end if + + If(position2 > position1) then + do while (position2 > position1) + warningPair = Mid(warningValueString, position1 + 1, (position2 - position1 -1)) + warningArraySize = warningArraySize + 1 + ReDim Preserve warningArray(warningArraySize) + warningArray(warningArraySize -1) = Trim(warningPair) + temp1 = position2 + 1 + position1 = position2 + position2 = InStr(temp1, warningValueString, ",") + If(position2 = 0) then + position2 = Len(warningValueString)+1 + End If + loop + end If + + If(Int(warningArraySize) < Int(instanceArraySize)) Then + ReDim Preserve warningArray(instanceArraySize) + For i = 0 To (instanceArraySize - warningArraySize - 1) + warningArray(warningArraySize +i) = warningArray(warningArraySize-1) + Next + warningArraySize = instanceArraySize + End If + 'get critical + position4 = InStr(temp2, criticalValueString, ",") + If(position4 = 0) then + position4 = Len(criticalValueString)+1 + end if + + If(position4 > position3) then + do while (position4 > position3) + criticalPair = Mid(criticalValueString, position3 + 1, (position4 - position3 -1)) + criticalArraySize = criticalArraySize + 1 + ReDim Preserve criticalArray(criticalArraySize) + criticalArray(criticalArraySize -1) = Trim(criticalPair) + temp2 = position4 + 1 + position3 = position4 + position4 = InStr(temp2, criticalValueString, ",") + If(position4 = 0) then + position4 = Len(criticalValueString)+1 + End If + loop + End If + If(Int(criticalArraySize) < Int(instanceArraySize)) Then + ReDim Preserve criticalArray(instanceArraySize) + For i = 0 To (instanceArraySize - criticalArraySize - 1) + criticalArray(criticalArraySize +i) = criticalArray(criticalArraySize-1) + Next + criticalArraySize = instanceArraySize + End If + + End Function + +'------------------------------------------------------------------------------------------------- +'Function Name: f_GetThresolds. +'Descripton: Get Prefix. +'Input: No. +'Output: No. +'------------------------------------------------------------------------------------------------- + Function f_GetThresolds() + + On Error Resume Next + + first = 1 + position1 = 0 + position2 = 0 + temp = 1 + temp1 = 0 + thresoldArraySize = 0 + + position2 = InStr(temp, strThresolds, ":") + if(position2 = 0) then + position2 = Len(strThresolds)+1 + end if + + if(position2 > position1) then + + do while (position2 > position1) + thresoldPair = Mid(strThresolds, position1 + 1, (position2 - position1 -1)) + temp1 = InStr(1, thresoldPair, ",") + if(temp1 > 0) then + warningTemp = Mid(thresoldPair, 1, temp1 -1) + criticalTemp = Mid(thresoldPair, temp1 +1, len(thresoldPair) - temp1) + if(IsNumeric(warningTemp) or IsNumeric(criticalTemp)) then + thresoldArraySize = thresoldArraySize + 1 + ReDim Preserve warningArray(thresoldArraySize) + ReDim Preserve criticalArray(thresoldArraySize) + warningArray(thresoldArraySize -1) = Trim(warningTemp) + criticalArray(thresoldArraySize -1) = Trim(criticalTemp) + else + Wscript.Echo "Error! Arguments wrong, please verify -t parameter" + Wscript.Quit(intError) + Exit Function + end if + else + Wscript.Echo "Error! Arguments wrong, please verify -t parameter" + Wscript.Quit(intError) + Exit Function + end if + temp = position2 + 1 + position1 = position2 + position2 = InStr(temp, strThresolds, ":") + if(position2 = 0) then + position2 = Len(strThresolds)+1 + end if + loop + end if + End Function + +'------------------------------------------------------------------------------------------------- +'Function Name: f_LocalPerfValue. +'Descripton: Get perform value at Local Host. +'Input: No. +'Output: No. +'------------------------------------------------------------------------------------------------- + Function f_LocalPerfValue() + + On Error Resume Next + + Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\" & strNameSpace) + f_Error() + 'Set colInstances = GetObject("winmgmts:{impersonationLevel=impersonate}\\" & strComputer & "\" & strNameSpace).InstancesOf(strClass) + 'For Each objInstance in colInstances + 'Next + 'f_Error() + + f_ExecQuery() + 'f_GetInstances() + f_GetInformation() + + End Function + +'------------------------------------------------------------------------------------------------- +'Function Name: f_RemotePerfValue. +'Descripton: Get perform values at Remote Host. +'Input: No. +'Output: Values. +'------------------------------------------------------------------------------------------------- + Function f_RemotePerfValue() + + On Error Resume Next + + Set objSWbemLocator = CreateObject("WbemScripting.SWbemLocator") + if (strDomain = "") then + Set objWMIService = objSWbemLocator.ConnectServer _ + (strComputer, strNameSpace , strUser, strPass ) + f_Error() + + 'Set colInstances = objSWbemLocator.ConnectServer(strComputer, strNamespace , strUser, strPass).InstancesOf(strClass) + 'For Each objInstance in colInstances + 'Next + 'f_Error() + else + Set objWMIService = objSWbemLocator.ConnectServer _ + (strComputer, strNameSpace , strUser, strPass,"MS_409","ntlmdomain:" + strDomain ) + f_Error() + + 'Set colInstances = objSWbemLocator.ConnectServer(strComputer, strNamespace , strUser, strPass,"MS_409","ntlmdomain:" & strDomain ).InstancesOf(strClass) + 'For Each objInstance in colInstances + 'Next + 'f_Error() + end if + objWMIService.Security_.ImpersonationLevel = 3 + f_Error() + + f_ExecQuery() + 'f_GetInstances() + f_GetInformation() + + End Function + +'************************************************************************************************* +' Main Function +'************************************************************************************************* + + '///////////////////// + + strCommandName="check_cpu_load_percentage.vbs" + strDescription="Enumerate the needed windows host information." + + '///////////////////// + + strNameSpace = "root\cimv2" + strClass = "Win32_Processor" + strProp = "DeviceID, LoadPercentage" + f_GetAllArg() + tempCount = argcountcommand/2 + f_Error() + + if ((UCase(arg(0))="-H") Or (UCase(arg(0))="--HELP")) and (argcountcommand=1) then + f_help() + else + if( ((argcountcommand Mod 2) = 0) and (1 < tempCount < 8)) then + strComputer = f_GetOneArg("-h") + strInst = f_GetOneArg("-inst") + f_GetInstances() + warningValue = f_GetOneArg("-w") + warningValueString = f_GetOneArg("-w") + criticalValue = f_GetOneArg("-c") + criticalValueString = f_GetOneArg("-c") + If((warningValueString <> "") Or (criticalValueString <> "")) Then + f_GetWarningCriticalValues() + End if + strThresolds = f_GetOneArg("-t") + + strUser = f_GetOneArg("-user") + strPass = f_GetOneArg("-pass") + strDomain = f_GetOneArg("-domain") + if((strComputer = "") or (strInst = "")) then + Wscript.Echo "Error! Arguments wrong, require verify -h -inst parameters" + Wscript.Quit(intError) + else + Select Case tempCount + Case 2: + f_LocalPerfValue() + Case 3: + if(strThresolds <> "") then + f_GetThresolds() + f_LocalPerfValue() + + else + Wscript.Echo "Error! Arguments wrong, please verify -t parameters" + Wscript.Quit(intError) + end if + Case 4: + if ((warningValue <> "") and (criticalValue <> "")) then + f_LocalPerfValue() + end if + if ((strUser <> "") and (strPass <> "")) then + f_RemotePerfValue() + else + Wscript.Echo "Error! Arguments wrong, please verify -user -pass or -w -c parameters" + Wscript.Quit(intError) + end if + Case 5: + if ((strUser <> "") and (strPass <> "") and (strThresolds <> "")) then + f_GetThresolds() + f_RemotePerfValue() + else + Wscript.Echo "Error! Arguments wrong, please verify -user -pass or -t parameters" + Wscript.Quit(intError) + end if + Case 6: + if ((strUser <> "") and (strPass <> "") and (warningValue <> "") and (criticalValue <> "")) then + f_RemotePerfValue() + else + Wscript.Echo "Error! Arguments wrong for remote check, please verify -w -c -user -pass parameters" + Wscript.Quit(intError) + end if + Case 7: + if ((strUser <> "") and (strPass <> "") and (warningValue <> "") and (criticalValue <> "") and (strDomain <> "")) then + f_RemotePerfValue() + else + Wscript.Echo "Error! Arguments wrong for remote check, please verify -w -c -user -pass -domain parameters" + Wscript.Quit(intError) + end if + Case Else + Wscript.Echo "Error! Arguments wrong, please type -h for Help" + Wscript.Quit(intError) + End Select + + end if + else + Wscript.Echo "Error! Arguments wrong, please type -h for Help" + Wscript.Quit(intError) + end if + + end if diff --git a/nsclient/trunk/scripts/wmi/check_disks_io.vbs b/nsclient/trunk/scripts/wmi/check_disks_io.vbs new file mode 100644 index 0000000..b3cb173 --- /dev/null +++ b/nsclient/trunk/scripts/wmi/check_disks_io.vbs @@ -0,0 +1,1051 @@ +' Copyright 2007 GroundWork Open Source Inc. +' +' This program is free software; you can redistribute it and/or +' modify it under the terms of the GNU General Public License +' as published by the Free Software Foundation; version 2 +' of the License. +' +' This program is distributed in the hope that it will be useful, +' but WITHOUT ANY WARRANTY; without even the implied warranty of +' MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +' GNU General Public License for more details. +' +' +' Author Dr. Dave Blunt at GroundWork Open Source Inc. (dblunt@groundworkopensource.com) + +'************************************************************************************************* +' Public Variable +'************************************************************************************************* +Const intOK = 0 +Const intWarning = 1 +Const intCritical = 2 +Const intError = 3 +Const intUnknown = 3 + +Dim argcountcommand +Dim arg(20) +Dim strComputer +Dim strClass +Dim strProp +Dim strDisks +Dim warningValue +Dim warningValueString +Dim criticalValue +Dim criticalValueString +Dim strUser +Dim strPass +Dim strDomain +Dim strNameSpace +Dim strDescription +Dim strCommandName +Dim strResultTemp +Dim strResult +Dim strResult1 +Dim strResult2 +Dim intReturnTemp +Dim intReturn +Dim strResultTemp1 +Dim strResultTemp2 +Dim strResultTemp3 +Dim strResultTemp4 +Dim intReturnTemp1 +Dim strPrefix +Dim intValue +Dim returnValue +Dim strThresolds +Dim strThresoldPair +Dim instanceArray() +Dim instanceArraySize +Dim thresoldArraySize +Dim warningArraySize +Dim criticalArraySize +Dim warningArray() +Dim criticalArray() +Dim instance +Dim propArray() +Dim propArraySize +Dim counterValueArray() +Dim timerValueTempArray() +Dim strNameArray() +Dim prop +Dim lWarningValue +Dim uWarningValue +Dim lCriticalValue +Dim uCriticalValue +Dim propInstanceArraySize + +Dim strDisplay1 +Dim strDisplay2 +Dim strName +Dim strPropName +Dim intAverageValue + +Dim ArgCount +Dim strArgMain(10) +Dim strArgSortDes(10) +Dim strArgDetailDes(10) +Dim strArgExample(10) + +Dim objWMIService, colWMI,colWMITemp, objWMI,objSWbemLocator + +strComputer="" +strClass = "" +strProp = "" +strInst = "" +warningValue = -1 +criticalValue = -1 +strUser = "" +strPass = "" +strDomain = "" + +intReturnTemp1 = 0 +'************************************************************************************************* +' Functions and Subs +'************************************************************************************************* + +'------------------------------------------------------------------------------------------------- +'Function Name: f_Error. +'Descripton: Display an error notice include : Error Number and Error Description. +'Input: No. +'Output: No. +'------------------------------------------------------------------------------------------------- + Function f_Error() + + nbrError = err.number + if (nbrError <> 0 ) then + Select Case nbrError + Case 462, -2147023174 + strExitMsg = "Timeout connecting to WMI on this host! Error Number: " & nbrError & " Description: " & err.description + Case -2147024891 + strExitMsg = "Authentication failure to remote host! Error Number: " & nbrError & " Description: " & err.description + Case -2147217392 + strExitMsg = "Error! Number: " & nbrError & " Description: Invalid Class" + Case Else + strExitMsg = "Error! Number: " & nbrError & " Description: " & err.description + End Select + wscript.echo strExitMsg + wscript.quit(intUnknown) + end if + + End Function + + +'------------------------------------------------------------------------------------------------- +'Function Name: f_Help. +'Descripton: Display help of command include : Description, Arguments, Examples +'Input: No. +'Output: No. +'------------------------------------------------------------------------------------------------- + Function f_Help() + + Dim str + str="Check Disks IO. If your Local Machine has the same Administrator account and password as the Remote Machine then you don't have to use the two last parameters."&vbCrlF&vbCrlF + str=str&"cscript check_disks_io.vbs -h hostname -prop properties -inst DeviceID [-w warning_level -c critical_level] [-t thresoldpairs] [-user username -pass password [-domain domain]]"&vbCrlF + str=str&vbCrlF + str=str&"-h [--help] Help."&vbCrlF + str=str&"-h hostname Host name."&vbCrlF + str=str&"-inst disks DeviceID Instance."&vbCrlF + str=str&"-prop properties Must be one or multiple of DiskReadBytesPerSec, DiskReadsPerSec, DiskWriteBytesPerSec, and DiskWritesPerSec."&vbCrlF + str=str&"-w warning_level Warning threshold by percentage."&vbCrlF + str=str&"-c critical_level Critical threshold by percentage."&vbCrlF + str=str&"-t thresold pairs Threshold pairs for each disk. Note: each threhsold pair separated by ':' characters, warning value and critical separated by ',' character"&vbCrlF + str=str&"-user username Account Administrator on Remote Machine."&vbCrlF + str=str&"-pass password Password Account Administrator on Remote Machine."&vbCrlF + str=str&"-domain domain Domain Name of Remote Machine."&vbCrlF + str=str&vbCrlF + str=str&"Example: cscript check_disks_io.vbs -h Ser1 -prop ""DiskReadBytesPerSec, DiskWriteBytesPerSec"" -inst ""C:"" -w 30 -c 70 [-user Ser1\Administrator -pass password -domain ITSP] " &vbCrlF + str=str&"Example: cscript check_disks_io.vbs -h Ser1 -prop ""DiskReadBytesPerSec, DiskReadsPerSec"" -inst ""C:, D:"" -t ""700,900:60,80"" [-user Ser1\Administrator -pass password -domain ITSP] " &vbCrlF + wscript.echo str + + End Function +'------------------------------------------------------------------------------------------------- +'Function Name: f_GetAllArg. +'Descripton: Get all of arguments from command. +'Input: No. +'Output: No. +'------------------------------------------------------------------------------------------------- + Function f_GetAllArg() + + On Error Resume Next + + Dim i + + argcountcommand=WScript.Arguments.Count + + for i=0 to argcountcommand-1 + arg(i)=WScript.Arguments(i) + next + + End Function +'------------------------------------------------------------------------------------------------- +'Function Name: f_GetOneArg. +'Descripton: Get an argument from command. +'Input: Yes. +' strName: Name of argument +'Output: Value. +'------------------------------------------------------------------------------------------------- + Function f_GetOneArg(strName) + + On Error Resume Next + + Dim i + for i=0 to argcountcommand-1 + if (Ucase(arg(i))=Ucase(strName)) then + f_GetOneArg=arg(i+1) + Exit Function + end if + next + + End Function + +'------------------------------------------------------------------------------------------------- +'Function Name: f_GetInstance. +'Descripton: Get infomation at Local Host. +'Input: instance. +'Output: No. +'------------------------------------------------------------------------------------------------- + Function f_GetInstance() + + On Error Resume Next + + strResultTemp1 = "" + strResultTemp2 = "" + intResultTemp1 = 0 + strResultTemp = "" + intResultTemp = 0 + + ReDim strNameArray(Int(colWMI.count)) + ReDim counterValueArray(Int(colWMI.count)) + ReDim timerValueArray(Int(colWMI.count)) + strName = "" + strPropName = "" + counterValueTemp = 0 + timerValueTemp = 0 + timeBaseTemp = 0 + i, j = 0 + + For Each objWMITemp in colWMITemp + counterValueArray(i) = objWMITemp.Properties_(prop) + timerValueArray(i) = objWMITemp.Properties_("TimeStamp_PerfTime") + i = i + 1 + Next + + For Each objWMI in colWMI + strName = objWMI.Name + if(Ucase(strName) = Ucase(instance)) then + strPropName = objWMI.Properties_(prop).Name + counterValueTemp = objWMI.Properties_(prop) + timerValueTemp = objWMI.Properties_("TimeStamp_PerfTime") + timeBase = objWMI.Properties_("Frequency_PerfTime") + + if((timerValueTemp - timerValueArray(j)) = 0) then + intValue = 0 + f_Display() + else + intValue = Int((counterValueTemp - counterValueArray(j)) / ((timerValueTemp - timerValueArray(j)) / timeBase)) + f_display() + end if + strResultTemp1 = strResultTemp1 & strResultTemp3 + strResultTemp2 = strResultTemp2 & strResultTemp4 + intReturnTemp = intReturnTemp1 + Exit Function + end if + j = j + 1 + Next + + strResultTemp1 = "Unknown - " & instance & " no row return." + intReturnTemp = intUnknown + Exit Function + + End Function + +'------------------------------------------------------------------------------------------------- +'Function Name: f_GetPrefix. +'Descripton: Get Prefix. +'Input: No. +'Output: No. +'------------------------------------------------------------------------------------------------- + Function f_GetPrefix(intValue) + + On Error Resume Next + + strPrefix = "" + If(warningValue <> "" And criticalValue = "") Then + If (IsNumeric(warningValue)) Then + If (Int(intValue) < Int(warningValue)) Then + returnValue=0 + strPrefix= "OK - " + Else + returnValue=1 + strPrefix= "Warning - " + End If + Else + Wscript.Echo "Error! Arguments wrong, please verify -w parameter" + Wscript.Quit(intError) + Exit Function + End If + End If + If(warningValue = "" And criticalValue <> "") Then + If (IsNumeric(criticalValue)) Then + If (Int(intValue) < Int(criticalValue)) Then + returnValue=0 + strPrefix= "OK - " + Else + returnValue=2 + strPrefix= "Critical - " + End If + Else + Wscript.Echo "Error! Arguments wrong, please verify -c parameter" + Wscript.Quit(intError) + Exit Function + End If + End If + If (warningValue <> "" And criticalValue <> "") Then + If (IsNumeric(warningValue) And IsNumeric(criticalValue)) Then + if (Int(warningValue) < Int(criticalValue)) then + + if (Int(intValue) < Int(warningValue)) then + returnValue=0 + strPrefix= "OK - " + else + if (Int(intValue) < Int(criticalValue)) then + returnValue=1 + strPrefix= "Warning - " + else + returnValue=2 + strPrefix= "Critical - " + end if + end if + else + if (Int(intValue) > Int(warningValue)) then + returnValue=0 + strPrefix= "OK - " + else + if (Int(intValue) > Int(criticalValue)) then + returnValue=1 + strPrefix= "Warning - " + else + returnValue=2 + strPrefix= "Critical - " + end if + end if + end If + Else + Wscript.Echo "Error! Arguments wrong, please verify -w -c parameter" + Wscript.Quit(intError) + Exit Function + End If + End If + + End Function + +'------------------------------------------------------------------------------------------------- +'Function Name: f_GetPrefixWithRange. +'Descripton: Get Prefix. +'Input: No. +'Output: No. +'------------------------------------------------------------------------------------------------- + Function f_GetPrefixWithRange(intValue) + + On Error Resume Next + lWarningValue = "" + uWarningValue = "" + lCriticalValue= "" + uCriticalValue= "" + warningReturn = 0 + criticalReturn = 0 + If(warningValue <> "") Then + f_GetWarningValueFromRange(warningValue) + End If + If(criticalValue <> "") Then + f_GetCriticalValueFromRange(criticalValue) + End If + strPrefix = "" + 'verify warning + If((lWarningValue <> "") And (uWarningValue <> "")) Then + If(Int(lWarningValue) <= Int(uWarningValue)) Then + If((Int(lWarningValue) >= Int(intValue)) Or (Int(intValue) >= Int(uWarningValue))) Then + warningReturn=1 + End If + Else + If((Int(intValue) >= Int(uWarningValue) ) And (Int(intValue) <= Int(lWarningValue))) Then + warningReturn=1 + End If + End If + End If + If((lWarningValue <> "") And (uWarningValue = "")) Then + If(Int(intValue) <= Int(lWarningValue)) Then + warningReturn=1 + End If + End If + If((lWarningValue = "") And (uWarningValue <> "")) Then + If(Int(intValue) >= Int(uWarningValue)) Then + warningReturn=1 + End If + End If + + 'verify critical + If((lCriticalValue <> "") And (uCriticalValue <> "")) Then + If(Int(lCriticalValue) <= Int(uCriticalValue)) Then + If((Int(lCriticalValue) >= Int(intValue)) Or (Int(intValue) >= Int(uCriticalValue))) Then + criticalReturn=2 + End If + Else + If((Int(intValue) >= Int(uCriticalValue) ) And (Int(intValue) <= Int(lCriticalValue))) Then + criticalReturn=2 + End If + End If + End If + If((lCriticalValue <> "") And (uCriticalValue = "")) Then + If(Int(intValue) <= Int(lCriticalValue)) Then + criticalReturn=2 + End If + End If + If((lCriticalValue = "") And (uCriticalValue <> "")) Then + If(Int(intValue) >= Int(uCriticalValue)) Then + criticalReturn=2 + End If + End If + + 'return result + If(criticalReturn = 2) Then + returnValue=2 + strPrefix= "Critical - " + Else + If(warningReturn = 1) Then + returnValue=1 + strPrefix= "Warning - " + Else + returnValue=0 + strPrefix= "Ok - " + End If + End If + + End Function + +'------------------------------------------------------------------------------------------------- +'Function Name: f_GetWarningValueFromRange(). +'Descripton: Get perform value at Local Host. +'Input: warningValueRange. +'Output: No. +'------------------------------------------------------------------------------------------------- + Function f_GetWarningValueFromRange(warningValue) + + On Error Resume Next + lWarningValue = "" + uWarningValue = "" + temp1 = 0 + temp1 = InStr(1, warningValue, ":") + if(temp1 > 0) then + lWarningTemp = Mid(warningValue, 1, temp1 -1) + uWarningTemp = Mid(warningValue, temp1 +1, len(warningValue) - temp1) + if(IsNumeric(lWarningTemp) or IsNumeric(uWarningTemp)) then + lWarningValue = lWarningTemp + uWarningValue = uWarningTemp + else + Wscript.Echo "Error! Arguments wrong, please verify -w parameter" + Wscript.Quit(intError) + Exit Function + end if + else + Wscript.Echo "Error! Arguments wrong, please verify -w parameter" + Wscript.Quit(intError) + Exit Function + end if + + End Function + +'------------------------------------------------------------------------------------------------- +'Function Name: f_GetCriticalValueFromRange(). +'Descripton: Get perform value at Local Host. +'Input: warningValueRange. +'Output: No. +'------------------------------------------------------------------------------------------------- + Function f_GetCriticalValueFromRange(criticalValue) + + On Error Resume Next + lCriticalValue = "" + uCriticalValue = "" + temp1 = 0 + temp1 = InStr(1, criticalValue, ":") + if(temp1 > 0) then + lCriticalTemp = Mid(criticalValue, 1, temp1 -1) + uCriticalTemp = Mid(criticalValue, temp1 +1, len(criticalValue) - temp1) + if(IsNumeric(lCriticalTemp) or IsNumeric(uCriticalTemp)) then + lCriticalValue = lCriticalTemp + uCriticalValue = uCriticalTemp + else + Wscript.Echo "Error! Arguments wrong, please verify -c parameter" + Wscript.Quit(intError) + Exit Function + end if + else + WScript.Echo "Error! Arguments wrong, please verify -c parameter" + Wscript.Quit(intError) + Exit Function + end if + + End Function + +'------------------------------------------------------------------------------------------------- +'Function Name: f_Display. +'Descripton: Get Prefix. +'Input: No. +'Output: No. +'------------------------------------------------------------------------------------------------- + Function f_Display() + + On Error Resume Next + + strDisplay1 = "" + strDisplay2 = "" + strResultTemp3 = "" + strResultTemp4 = "" + 'strName = instance + 'strPropName = "Number of processes with " + 'intValue = count + Dim strDSName + strDSName = f_FormatDSName(strName) + if((warningValue <> "") Or (criticalValue <> "")) then + strDisplay1 = strName & " '" & strPropName & "'" & " = " & intValue & "; " + strDisplay2 = "'" & strDSName & "-" & strPropName & "'" & "=" & intValue & ";" & warningValue & ";" & criticalValue & ";; " + If(InStr(1, warningValue, ":") > 0 Or InStr(1, criticalValue, ":") > 0) Then + f_GetPrefixWithRange(intValue) + Else + f_GetPrefix(intValue) + End If + strResultTemp3 = strResultTemp3 & strPrefix & strDisplay1 + strResultTemp4 = strResultTemp4 & strDisplay2 + if( intReturnTemp1 < returnValue) then + intReturnTemp1 = returnValue + end if + else + strResultTemp3 = strResultTemp3 & "OK - " & strName & " '" & strPropName & "'" & " = " & intValue & "; " + strResultTemp4 = "" + end if + + End Function + +'------------------------------------------------------------------------------------------------- +'Function Name: f_FormatDSName. +'Descripton: Get infomation at Local Host. +'Input: strName. +'Output: No. +'------------------------------------------------------------------------------------------------- + Function f_FormatDSName(strName) + + On Error Resume Next + + first = 1 + position1 = 0 + + position1 = InStr(first, strName, "=") + Dim proc_name + proc_name = "" + If(position1 > 0) Then + proc_name = Mid(strName,position1+1,(Len(strName)-position1)) + proc_name = Replace(proc_name,".","_") + proc_name = Replace(proc_name,"-","_") + proc_name = Replace(proc_name,":","") + proc_name = Mid(proc_name,1, 19) + + + Else + proc_name = Mid(strName,position1+1,(Len(strName)-position1)) + proc_name = Replace(proc_name,".","_") + proc_name = Replace(proc_name,"-","_") + proc_name = Replace(proc_name,":","") + proc_name = Mid(proc_name,1, 19) + + End If + f_FormatDSName = proc_name + Exit Function + End Function + +'------------------------------------------------------------------------------------------------- +'Function Name: f_ExecQuery. +'Descripton: Format data the same as output. +'Input: service. +'Output: No. +'------------------------------------------------------------------------------------------------- + Function f_ExecQuery() + + On Error Resume Next + + strQuery = "Select DiskReadBytesPerSec, DiskReadsPerSec, DiskWriteBytesPerSec, DiskWritesPerSec, TimeStamp_PerfTime, Frequency_PerfTime" _ + & " from " & strClass + Set colWMITemp = objWMIService.ExecQuery(strQuery) + Wscript.Sleep(1000) + Set colWMI = objWMIService.ExecQuery(strQuery) + + count = -1 + count = colWMI.count + if(count = -1) then + Wscript.Echo "Unknown - No data received from WMI;" + Wscript.Quit(intUnknown) + end if + + End Function + +'------------------------------------------------------------------------------------------------- +'Function Name: f_GetInformation. +'Descripton: Get information data. +'Input: No. +'Output: Values. +'------------------------------------------------------------------------------------------------- + Function f_GetInformation() + + On Error Resume Next + + strResult = "" + strResult1 = "" + strResult2 = "" + intReturn = 0 + + if(thresoldArraySize > 0 and (thresoldArraySize <> instanceArraySize * propArraySize)) then + Wscript.Echo "Error! Arguments wrong, number of instances and thresolds do not match." + Wscript.Quit(intError) + Exit Function + end if + + if(thresoldArraySize > 0 and (thresoldArraySize = (instanceArraySize * propArraySize))) then + for i = 0 to instanceArraySize -1 + instance = instanceArray(i) + for j = 0 to propArraySize -1 + prop = propArray(j) + t = ((i*propArraySize) + j) + warningValue = warningArray(t) + criticalValue = criticalArray(t) + f_GetInstance() + strResult1 = strResult1 & strResultTemp1 + strResult2 = strResult2 & strResultTemp2 + if intReturn < intReturnTemp then + intReturn = intReturnTemp + end if + next + Next + Else + If(instanceArraySize > 0 and (warningArraySize > 1 Or criticalArraySize > 1)) Then + for i = 0 to instanceArraySize -1 + instance = instanceArray(i) + for j = 0 to propArraySize -1 + prop = propArray(j) + t = ((i*propArraySize) + j) + warningValue = warningArray(t) + criticalValue = criticalArray(t) + f_GetInstance() + strResult1 = strResult1 & strResultTemp1 + strResult2 = strResult2 & strResultTemp2 + if intReturn < intReturnTemp then + intReturn = intReturnTemp + end if + Next + + Next + Else + for i = 0 to instanceArraySize -1 + instance = instanceArray(i) + for j = 0 to propArraySize -1 + prop = propArray(j) + f_GetInstance() + strResult1 = strResult1 & strResultTemp1 + strResult2 = strResult2 & strResultTemp2 + if intReturn < intReturnTemp then + intReturn = intReturnTemp + end if + next + Next + End If + + End If + if(strResult2 = "") then + strResult = strResult1 + else + strResult = strResult1 & "|" & strResult2 + end if + Wscript.Echo strResult + Wscript.Quit(intReturn) + + End Function + +'------------------------------------------------------------------------------------------------- +'Function Name: f_GetInstances. +'Descripton: Get Prefix. +'Input: No. +'Output: No. +'------------------------------------------------------------------------------------------------- + Function f_GetInstances() + + On Error Resume Next + + first = 1 + position = 0 + instanceArraySize = 0 + + position = InStr(first, strInst, ",") + if (position = 0) then + instanceTemp = strInst + InstanceArraySize = 1 + ReDim instanceArray(instanceArraySize) + instanceArray(0) = instanceTemp + + else + do while (position > 0) + instanceTemp = Mid(strInst,first,position - first) + instanceArraySize = instanceArraySize + 1 + ReDim Preserve instanceArray(instanceArraySize) + instanceArray(instanceArraySize -1) = Trim(instanceTemp) + first = position + 1 + position = InStr(first, strInst, ",") + loop + instanceTemp = Mid(strInst,first,len(strInst)) + instanceArraySize = instanceArraySize + 1 + ReDim Preserve instanceArray(instanceArraySize) + instanceArray(instanceArraySize -1) = Trim(instanceTemp) + end if + + End Function + +'------------------------------------------------------------------------------------------------- +'Function Name: f_GetWarningCriticalValues. +'Descripton: Get Prefix. +'Input: No. +'Output: No. +'------------------------------------------------------------------------------------------------- + Function f_GetWarningCriticalValues() + + On Error Resume Next + + position1 = 0 + position2 = 0 + position3 = 0 + position4 = 0 + temp1 = 1 + temp2 = 1 + warningArraySize = 0 + criticalArraySize = 0 + + 'get warning + position2 = InStr(temp1, warningValueString, ",") + If(position2 = 0) then + position2 = Len(warningValueString)+1 + end if + + If(position2 > position1) then + do while (position2 > position1) + warningPair = Mid(warningValueString, position1 + 1, (position2 - position1 -1)) + warningArraySize = warningArraySize + 1 + ReDim Preserve warningArray(warningArraySize) + warningArray(warningArraySize -1) = Trim(warningPair) + temp1 = position2 + 1 + position1 = position2 + position2 = InStr(temp1, warningValueString, ",") + If(position2 = 0) then + position2 = Len(warningValueString)+1 + End If + loop + end If + propInstanceArraySize = Int(instanceArraySize * propArraySize) + If(Int(warningArraySize) < Int(propInstanceArraySize)) Then + ReDim Preserve warningArray(propInstanceArraySize) + For i = 0 To (propInstanceArraySize - warningArraySize - 1) + warningArray(warningArraySize +i) = warningArray(warningArraySize-1) + Next + warningArraySize = propInstanceArraySize + End If + 'get critical + position4 = InStr(temp2, criticalValueString, ",") + If(position4 = 0) then + position4 = Len(criticalValueString)+1 + end if + + If(position4 > position3) then + do while (position4 > position3) + criticalPair = Mid(criticalValueString, position3 + 1, (position4 - position3 -1)) + criticalArraySize = criticalArraySize + 1 + ReDim Preserve criticalArray(criticalArraySize) + criticalArray(criticalArraySize -1) = Trim(criticalPair) + temp2 = position4 + 1 + position3 = position4 + position4 = InStr(temp2, criticalValueString, ",") + If(position4 = 0) then + position4 = Len(criticalValueString)+1 + End If + loop + End If + If(Int(criticalArraySize) < Int(propInstanceArraySize)) Then + ReDim Preserve criticalArray(propInstanceArraySize) + For i = 0 To (propInstanceArraySize - criticalArraySize - 1) + criticalArray(criticalArraySize +i) = criticalArray(criticalArraySize-1) + Next + criticalArraySize = propInstanceArraySize + End If + + End Function + +'------------------------------------------------------------------------------------------------- +'Function Name: f_GetProps. +'Descripton: Get Prefix. +'Input: No. +'Output: No. +'------------------------------------------------------------------------------------------------- + Function f_GetProps() + + On Error Resume Next + + first = 1 + position = 0 + propArraySize = 0 + + position = InStr(first, strProp, ",") + if (position = 0) then + propTemp = strProp + propArraySize = 1 + ReDim propArray(propArraySize) + propArray(0) = propTemp + + else + do while (position > 0) + propTemp = Mid(strProp,first,position - first) + propArraySize = propArraySize + 1 + ReDim Preserve propArray(propArraySize) + propArray(propArraySize -1) = Trim(propTemp) + first = position + 1 + position = InStr(first, strProp, ",") + loop + propTemp = Mid(strProp,first,len(strProp)) + propArraySize = propArraySize + 1 + ReDim Preserve propArray(propArraySize) + propArray(propArraySize -1) = Trim(propTemp) + end if + + for i = 0 to propArraySize -1 + propTemp = propArray(i) + if ((StrComp(propTemp, "DiskReadBytesPerSec") = -1) and (StrComp(propTemp, "DiskReadsPerSec") = -1) and _ + (StrComp(propTemp, "DiskWriteBytesPerSec") = -1) and (StrComp(propTemp, "DiskWritesPerSec") = -1) ) then + Wscript.Echo "Error! Arguments wrong, " & propTemp & " is not supported." + Wscript.Quit(intError) + end if + Next + + End Function + +'------------------------------------------------------------------------------------------------- +'Function Name: f_GetThresolds. +'Descripton: Get Prefix. +'Input: No. +'Output: No. +'------------------------------------------------------------------------------------------------- + Function f_GetThresolds() + + On Error Resume Next + + first = 1 + position1 = 0 + position2 = 0 + temp = 1 + temp1 = 0 + thresoldArraySize = 0 + + position2 = InStr(temp, strThresolds, ":") + if(position2 = 0) then + position2 = Len(strThresolds)+1 + end if + + + if(position2 > position1) then + + do while (position2 > position1) + thresoldPair = Mid(strThresolds, position1 + 1, (position2 - position1 -1)) + temp1 = InStr(1, thresoldPair, ",") + if(temp1 > 0) then + warningTemp = Mid(thresoldPair, 1, temp1 -1) + criticalTemp = Mid(thresoldPair, temp1 +1, len(thresoldPair) - temp1) + if(IsNumeric(warningTemp) or IsNumeric(criticalTemp)) then + thresoldArraySize = thresoldArraySize + 1 + ReDim Preserve warningArray(thresoldArraySize) + ReDim Preserve criticalArray(thresoldArraySize) + warningArray(thresoldArraySize -1) = Trim(warningTemp) + criticalArray(thresoldArraySize -1) = Trim(criticalTemp) + else + Wscript.Echo "Error! Arguments wrong, please verify -t parameter" + Wscript.Quit(intError) + Exit Function + end if + else + Wscript.Echo "Error! Arguments wrong, please verify -t parameter" + Wscript.Quit(intError) + Exit Function + end if + temp = position2 + 1 + position1 = position2 + position2 = InStr(temp, strThresolds, ":") + if(position2 = 0) then + position2 = Len(strThresolds)+1 + end if + loop + end if + End Function + +'------------------------------------------------------------------------------------------------- +'Function Name: f_LocalPerfValue. +'Descripton: Get perform value at Local Host. +'Input: No. +'Output: No. +'------------------------------------------------------------------------------------------------- + Function f_LocalPerfValue() + + On Error Resume Next + + Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\" & strNameSpace) + f_Error() + 'Set colInstances = GetObject("winmgmts:{impersonationLevel=impersonate}\\" & strComputer & "\" & strNameSpace).InstancesOf(strClass) + 'For Each objInstance in colInstances + 'Next + 'f_Error() + + f_ExecQuery() + 'f_GetInstances() + f_GetInformation() + + End Function + +'------------------------------------------------------------------------------------------------- +'Function Name: f_RemotePerfValue. +'Descripton: Get perform values at Remote Host. +'Input: No. +'Output: Values. +'------------------------------------------------------------------------------------------------- + Function f_RemotePerfValue() + + On Error Resume Next + + Set objSWbemLocator = CreateObject("WbemScripting.SWbemLocator") + if (strDomain = "") then + Set objWMIService = objSWbemLocator.ConnectServer _ + (strComputer, strNameSpace , strUser, strPass ) + f_Error() + + 'Set colInstances = objSWbemLocator.ConnectServer(strComputer, strNamespace , strUser, strPass).InstancesOf(strClass) + 'For Each objInstance in colInstances + 'Next + 'f_Error() + else + Set objWMIService = objSWbemLocator.ConnectServer _ + (strComputer, strNameSpace , strUser, strPass,"MS_409","ntlmdomain:" + strDomain ) + f_Error() + + 'Set colInstances = objSWbemLocator.ConnectServer(strComputer, strNamespace , strUser, strPass,"MS_409","ntlmdomain:" & strDomain ).InstancesOf(strClass) + 'For Each objInstance in colInstances + 'Next + 'f_Error() + end if + objWMIService.Security_.ImpersonationLevel = 3 + f_Error() + + f_ExecQuery() + 'f_GetInstances() + f_GetInformation() + + End Function + +'************************************************************************************************* +' Main Function +'************************************************************************************************* + + '///////////////////// + + strCommandName="check_disks_io.vbs" + strDescription="Enumerate the needed windows host information." + + '///////////////////// + + strNameSpace = "root\cimv2" + strClass = "Win32_PerfRawData_PerfDisk_LogicalDisk" + + f_GetAllArg() + tempCount = argcountcommand/2 + f_Error() + + if ((UCase(arg(0))="-H") Or (UCase(arg(0))="--HELP")) and (argcountcommand=1) then + f_help() + else + if( ((argcountcommand Mod 2) = 0) and (2 < tempCount < 8)) then + strComputer = f_GetOneArg("-h") + strProp = f_GetOneArg("-prop") + f_GetProps() + strInst = f_GetOneArg("-inst") + f_GetInstances() + warningValue = f_GetOneArg("-w") + warningValueString = f_GetOneArg("-w") + criticalValue = f_GetOneArg("-c") + criticalValueString = f_GetOneArg("-c") + If((warningValueString <> "") Or (criticalValueString <> "")) Then + f_GetWarningCriticalValues() + End if + strThresolds = f_GetOneArg("-t") + + strUser = f_GetOneArg("-user") + strPass = f_GetOneArg("-pass") + strDomain = f_GetOneArg("-domain") + if((strComputer = "") or (strInst = "") or (strProp = "")) then + Wscript.Echo "Error! Arguments wrong, require verify -h -prop -inst parameters" + Wscript.Quit(intError) + else + + Select Case tempCount + Case 3: + f_LocalPerfValue() + Case 4: + if(strThresolds <> "") then + f_GetThresolds() + f_LocalPerfValue() + + else + Wscript.Echo "Error! Arguments wrong, please verify -t parameters" + Wscript.Quit(intError) + end if + Case 5: + if ((warningValue <> "") and (criticalValue <> "")) then + f_LocalPerfValue() + end if + if ((strUser <> "") and (strPass <> "")) then + f_RemotePerfValue() + else + Wscript.Echo "Error! Arguments wrong, please verify -user -pass or -w -c parameters" + Wscript.Quit(intError) + end if + Case 6: + if ((strUser <> "") and (strPass <> "") and (strThresolds <> "")) then + f_GetThresolds() + f_RemotePerfValue() + else + Wscript.Echo "Error! Arguments wrong, please verify -user -pass or -t parameters" + Wscript.Quit(intError) + end if + Case 7: + if ((strUser <> "") and (strPass <> "") and (warningValue <> "") and (criticalValue <> "")) then + f_RemotePerfValue() + else + Wscript.Echo "Error! Arguments wrong for remote check, please verify -w -c -user -pass parameters" + Wscript.Quit(intError) + end if + Case 8: + if ((strUser <> "") and (strPass <> "") and (warningValue <> "") and (criticalValue <> "") and (strDomain <> "")) then + f_RemotePerfValue() + else + Wscript.Echo "Error! Arguments wrong for remote check, please verify -w -c -user -pass -domain parameters" + Wscript.Quit(intError) + end if + Case Else + Wscript.Echo "Error! Arguments wrong, please type -h for Help" + Wscript.Quit(intError) + End Select + + end if + else + Wscript.Echo "Error! Arguments wrong, please type -h for Help" + Wscript.Quit(intError) + end if + + end if \ No newline at end of file diff --git a/nsclient/trunk/scripts/wmi/check_disks_percentage_space_used.vbs b/nsclient/trunk/scripts/wmi/check_disks_percentage_space_used.vbs new file mode 100644 index 0000000..c23318a --- /dev/null +++ b/nsclient/trunk/scripts/wmi/check_disks_percentage_space_used.vbs @@ -0,0 +1,965 @@ +' Copyright 2007 GroundWork Open Source Inc. +' +' This program is free software; you can redistribute it and/or +' modify it under the terms of the GNU General Public License +' as published by the Free Software Foundation; version 2 +' of the License. +' +' This program is distributed in the hope that it will be useful, +' but WITHOUT ANY WARRANTY; without even the implied warranty of +' MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +' GNU General Public License for more details. +' +' +' Author Dr. Dave Blunt at GroundWork Open Source Inc. (dblunt@groundworkopensource.com) + +'************************************************************************************************* +' Public Variable +'************************************************************************************************* +Const intOK = 0 +Const intWarning = 1 +Const intCritical = 2 +Const intError = 3 +Const intUnknown = 3 + +Dim argcountcommand +Dim arg(20) +Dim strComputer +Dim strClass +Dim strProp +Dim strDisks +Dim warningValue +Dim warningValueString +Dim criticalValue +Dim criticalValueString +Dim strUser +Dim strPass +Dim strDomain +Dim strNameSpace +Dim strDescription +Dim strCommandName +Dim strResultTemp +Dim strResult +Dim strResult1 +Dim strResult2 +Dim intReturnTemp +Dim intReturn +Dim strResultTemp1 +Dim strResultTemp2 +Dim strResultTemp3 +Dim strResultTemp4 +Dim intReturnTemp1 +Dim strPrefix +Dim intValue +Dim returnValue +Dim strThresolds +Dim strThresoldPair +Dim instanceArray() +Dim instanceArraySize +Dim thresoldArraySize +Dim warningArraySize +Dim criticalArraySize +Dim warningArray() +Dim criticalArray() +Dim instance +Dim lWarningValue +Dim uWarningValue +Dim lCriticalValue +Dim uCriticalValue + +Dim strDisplay1 +Dim strDisplay2 +Dim strName +Dim strPropName +Dim intAverageValue + +Dim ArgCount +Dim strArgMain(10) +Dim strArgSortDes(10) +Dim strArgDetailDes(10) +Dim strArgExample(10) + +Dim objWMIService, colWMI,objWMI,objSWbemLocator + +strComputer="" +strClass = "" +strProp = "" +strInst = "" +warningValue = -1 +criticalValue = -1 +strUser = "" +strPass = "" +strDomain = "" + +intReturnTemp1 = 0 + +'************************************************************************************************* +' Functions and Subs +'************************************************************************************************* + +'------------------------------------------------------------------------------------------------- +'Function Name: f_Error. +'Descripton: Display an error notice include : Error Number and Error Description. +'Input: No. +'Output: No. +'------------------------------------------------------------------------------------------------- + Function f_Error() + + nbrError = err.number + if (nbrError <> 0 ) then + Select Case nbrError + Case 462, -2147023174 + strExitMsg = "Timeout connecting to WMI on this host! Error Number: " & nbrError & " Description: " & err.description + Case -2147024891 + strExitMsg = "Authentication failure to remote host! Error Number: " & nbrError & " Description: " & err.description + Case -2147217392 + strExitMsg = "Error! Number: " & nbrError & " Description: Invalid Class" + Case Else + strExitMsg = "Error! Number: " & nbrError & " Description: " & err.description + End Select + wscript.echo strExitMsg + wscript.quit(intUnknown) + end if + + End Function + + +'------------------------------------------------------------------------------------------------- +'Function Name: f_Help. +'Descripton: Display help of command include : Description, Arguments, Examples +'Input: No. +'Output: No. +'------------------------------------------------------------------------------------------------- + Function f_Help() + + Dim str + str="Check Disks Percentage Space Used. If your Local Machine has the same Administrator account and password as the Remote Machine then you don't have to use the two last parameters."&vbCrlF&vbCrlF + str=str&"cscript check_disks_percentage_space_used.vbs -h hostname -inst DeviceID [-w warning_level -c critical_level] [-t thresoldpairs] [-user username -pass password [-domain domain]]"&vbCrlF + str=str&vbCrlF + str=str&"-h [--help] Help."&vbCrlF + str=str&"-h hostname Host name."&vbCrlF + str=str&"-inst disks DeviceID Instance."&vbCrlF + str=str&"-w warning_level Warning threshold by percentage."&vbCrlF + str=str&"-c critical_level Critical threshold by percentage."&vbCrlF + str=str&"-t thresold pairs Threshold pairs for each instance. Note: each thresold pair enclosed by '{' and '}' characters, warning value and critical separated by ',' character"&vbCrlF + str=str&"-user username Account Administrator on Remote Machine."&vbCrlF + str=str&"-pass password Password Account Administrator on Remote Machine."&vbCrlF + str=str&"-domain domain Domain Name of Remote Machine."&vbCrlF + str=str&vbCrlF + str=str&"Example: cscript check_disks_percentage_space_used.vbs -h Ser1 -inst ""*"" -w 30 -c 70 [-user Ser1\Administrator -pass password -domain ITSP] " &vbCrlF + str=str&"Example: cscript check_disks_percentage_space_used.vbs -h Ser1 -inst ""C:, D:"" -w 30 -c 70 [-user Ser1\Administrator -pass password -domain ITSP] " &vbCrlF + str=str&"Example: cscript check_disks_percentage_space_used.vbs -h Ser1 -inst ""C:, D:"" -t ""70,90:50,80"" [-user Ser1\Administrator -pass password -domain ITSP] " &vbCrlF + wscript.echo str + + End Function +'------------------------------------------------------------------------------------------------- +'Function Name: f_GetAllArg. +'Descripton: Get all of arguments from command. +'Input: No. +'Output: No. +'------------------------------------------------------------------------------------------------- + Function f_GetAllArg() + + On Error Resume Next + + Dim i + + argcountcommand=WScript.Arguments.Count + + for i=0 to argcountcommand-1 + arg(i)=WScript.Arguments(i) + next + + End Function +'------------------------------------------------------------------------------------------------- +'Function Name: f_GetOneArg. +'Descripton: Get an argument from command. +'Input: Yes. +' strName: Name of argument +'Output: Value. +'------------------------------------------------------------------------------------------------- + Function f_GetOneArg(strName) + + On Error Resume Next + + Dim i + for i=0 to argcountcommand-1 + if (Ucase(arg(i))=Ucase(strName)) then + f_GetOneArg=arg(i+1) + Exit Function + end if + next + + End Function + +'------------------------------------------------------------------------------------------------- +'Function Name: f_GetInstance. +'Descripton: Get infomation at Local Host. +'Input: instance. +'Output: No. +'------------------------------------------------------------------------------------------------- + Function f_GetInstance(instance) + + On Error Resume Next + + strResultTemp1 = "" + strResultTemp2 = "" + intResultTemp1 = 0 + strResultTemp = "" + intResultTemp = 0 + + if(instance = "*") then + For Each objWMI in colWMI + strName = objWMI.Properties_("DeviceID") + strPropName = "Percentage Space Used" + intSize = objWMI.Properties_("Size") + intFreeSpace = objWMI.Properties_("FreeSpace") + if(intSize <> "") then + intValue = Int(((intSize - intFreeSpace)*100)/intSize) + else + intValue = 0 + end if + + f_Display() + strResultTemp1 = strResultTemp1 & strResultTemp3 + strResultTemp2 = strResultTemp2 & strResultTemp4 + Next + intReturnTemp = intReturnTemp1 + + Exit Function + else + For Each objWMI in colWMI + strName = objWMI.Properties_("DeviceID") + strPropName = "Percentage Space Used" + intSize = objWMI.Properties_("Size") + intFreeSpace = objWMI.Properties_("FreeSpace") + if(Ucase(Trim(strName)) = Ucase(Trim(instance))) then + if(intSize <> "") then + intValue = Int(((intSize - intFreeSpace)*100)/intSize) + else + intValue = 0 + end if + f_Display() + strResultTemp1 = strResultTemp1 & strResultTemp3 + strResultTemp2 = strResultTemp2 & strResultTemp4 + intReturnTemp = intReturnTemp1 + Exit Function + end if + Next + strResultTemp1 = "Unknown - " & instance & " no row returned." + intReturnTemp = intUnknown + Exit Function + end if + + End Function + +'------------------------------------------------------------------------------------------------- +'Function Name: f_GetPrefix. +'Descripton: Get Prefix. +'Input: No. +'Output: No. +'------------------------------------------------------------------------------------------------- + Function f_GetPrefix(intValue) + + On Error Resume Next + + strPrefix = "" + If(warningValue <> "" And criticalValue = "") Then + If (IsNumeric(warningValue)) Then + If (Int(intValue) < Int(warningValue)) Then + returnValue=0 + strPrefix= "OK - " + Else + returnValue=1 + strPrefix= "Warning - " + End If + Else + Wscript.Echo "Error! Arguments wrong, please verify -w parameter" + Wscript.Quit(intError) + Exit Function + End If + End If + If(warningValue = "" And criticalValue <> "") Then + If (IsNumeric(criticalValue)) Then + If (Int(intValue) < Int(criticalValue)) Then + returnValue=0 + strPrefix= "OK - " + Else + returnValue=2 + strPrefix= "Critical - " + End If + Else + Wscript.Echo "Error! Arguments wrong, please verify -c parameter" + Wscript.Quit(intError) + Exit Function + End If + End If + If (warningValue <> "" And criticalValue <> "") Then + If (IsNumeric(warningValue) And IsNumeric(criticalValue)) Then + if (Int(warningValue) < Int(criticalValue)) then + + if (Int(intValue) < Int(warningValue)) then + returnValue=0 + strPrefix= "OK - " + else + if (Int(intValue) < Int(criticalValue)) then + returnValue=1 + strPrefix= "Warning - " + else + returnValue=2 + strPrefix= "Critical - " + end if + end if + else + if (Int(intValue) > Int(warningValue)) then + returnValue=0 + strPrefix= "OK - " + else + if (Int(intValue) > Int(criticalValue)) then + returnValue=1 + strPrefix= "Warning - " + else + returnValue=2 + strPrefix= "Critical - " + end if + end if + end If + Else + Wscript.Echo "Error! Arguments wrong, please verify -w -c parameter" + Wscript.Quit(intError) + Exit Function + End If + End If + + End Function + +'------------------------------------------------------------------------------------------------- +'Function Name: f_GetPrefixWithRange. +'Descripton: Get Prefix. +'Input: No. +'Output: No. +'------------------------------------------------------------------------------------------------- + Function f_GetPrefixWithRange(intValue) + + On Error Resume Next + lWarningValue = "" + uWarningValue = "" + lCriticalValue= "" + uCriticalValue= "" + warningReturn = 0 + criticalReturn = 0 + If(warningValue <> "") Then + f_GetWarningValueFromRange(warningValue) + End If + If(criticalValue <> "") Then + f_GetCriticalValueFromRange(criticalValue) + End If + strPrefix = "" + 'verify warning + If((lWarningValue <> "") And (uWarningValue <> "")) Then + If(Int(lWarningValue) <= Int(uWarningValue)) Then + If((Int(lWarningValue) >= Int(intValue)) Or (Int(intValue) >= Int(uWarningValue))) Then + warningReturn=1 + End If + Else + If((Int(intValue) >= Int(uWarningValue) ) And (Int(intValue) <= Int(lWarningValue))) Then + warningReturn=1 + End If + End If + End If + If((lWarningValue <> "") And (uWarningValue = "")) Then + If(Int(intValue) <= Int(lWarningValue)) Then + warningReturn=1 + End If + End If + If((lWarningValue = "") And (uWarningValue <> "")) Then + If(Int(intValue) >= Int(uWarningValue)) Then + warningReturn=1 + End If + End If + + 'verify critical + If((lCriticalValue <> "") And (uCriticalValue <> "")) Then + If(Int(lCriticalValue) <= Int(uCriticalValue)) Then + If((Int(lCriticalValue) >= Int(intValue)) Or (Int(intValue) >= Int(uCriticalValue))) Then + criticalReturn=2 + End If + Else + If((Int(intValue) >= Int(uCriticalValue) ) And (Int(intValue) <= Int(lCriticalValue))) Then + criticalReturn=2 + End If + End If + End If + If((lCriticalValue <> "") And (uCriticalValue = "")) Then + If(Int(intValue) <= Int(lCriticalValue)) Then + criticalReturn=2 + End If + End If + If((lCriticalValue = "") And (uCriticalValue <> "")) Then + If(Int(intValue) >= Int(uCriticalValue)) Then + criticalReturn=2 + End If + End If + + 'return result + If(criticalReturn = 2) Then + returnValue=2 + strPrefix= "Critical - " + Else + If(warningReturn = 1) Then + returnValue=1 + strPrefix= "Warning - " + Else + returnValue=0 + strPrefix= "Ok - " + End If + End If + + End Function + +'------------------------------------------------------------------------------------------------- +'Function Name: f_GetWarningValueFromRange(). +'Descripton: Get perform value at Local Host. +'Input: warningValueRange. +'Output: No. +'------------------------------------------------------------------------------------------------- + Function f_GetWarningValueFromRange(warningValue) + + On Error Resume Next + lWarningValue = "" + uWarningValue = "" + temp1 = 0 + temp1 = InStr(1, warningValue, ":") + if(temp1 > 0) then + lWarningTemp = Mid(warningValue, 1, temp1 -1) + uWarningTemp = Mid(warningValue, temp1 +1, len(warningValue) - temp1) + if(IsNumeric(lWarningTemp) or IsNumeric(uWarningTemp)) then + lWarningValue = lWarningTemp + uWarningValue = uWarningTemp + else + Wscript.Echo "Error! Arguments wrong, please verify -w parameter" + Wscript.Quit(intError) + Exit Function + end if + else + Wscript.Echo "Error! Arguments wrong, please verify -w parameter" + Wscript.Quit(intError) + Exit Function + end if + + End Function + +'------------------------------------------------------------------------------------------------- +'Function Name: f_GetCriticalValueFromRange(). +'Descripton: Get perform value at Local Host. +'Input: warningValueRange. +'Output: No. +'------------------------------------------------------------------------------------------------- + Function f_GetCriticalValueFromRange(criticalValue) + + On Error Resume Next + lCriticalValue = "" + uCriticalValue = "" + temp1 = 0 + temp1 = InStr(1, criticalValue, ":") + if(temp1 > 0) then + lCriticalTemp = Mid(criticalValue, 1, temp1 -1) + uCriticalTemp = Mid(criticalValue, temp1 +1, len(criticalValue) - temp1) + if(IsNumeric(lCriticalTemp) or IsNumeric(uCriticalTemp)) then + lCriticalValue = lCriticalTemp + uCriticalValue = uCriticalTemp + else + Wscript.Echo "Error! Arguments wrong, please verify -c parameter" + Wscript.Quit(intError) + Exit Function + end if + else + WScript.Echo "Error! Arguments wrong, please verify -c parameter" + Wscript.Quit(intError) + Exit Function + end if + + End Function + +'------------------------------------------------------------------------------------------------- +'Function Name: f_Display. +'Descripton: Format data the same as output. +'Input: service. +'Output: No. +'------------------------------------------------------------------------------------------------- + Function f_Display() + + On Error Resume Next + + strDisplay1 = "" + strDisplay2 = "" + strResultTemp3 = "" + strResultTemp4 = "" + 'strName = instance + 'strPropName = "Number of processes with " + 'intValue = count + Dim strDSName + strDSName = f_FormatDSName(strName) + if((warningValue <> "") Or (criticalValue <> "")) then + strDisplay1 = strName & " '" & strPropName & "'" & " = " & intValue & "; " + strDisplay2 = "'" & strDSName & "'" & "=" & intValue & ";" & warningValue & ";" & criticalValue & ";; " + If(InStr(1, warningValue, ":") > 0 Or InStr(1, criticalValue, ":") > 0) Then + f_GetPrefixWithRange(intValue) + Else + f_GetPrefix(intValue) + End If + strResultTemp3 = strResultTemp3 & strPrefix & strDisplay1 + strResultTemp4 = strResultTemp4 & strDisplay2 + if( intReturnTemp1 < returnValue) then + intReturnTemp1 = returnValue + end if + else + strResultTemp3 = strResultTemp3 & "OK - " & strName & " '" & strPropName & "'" & " = " & intValue & "; " + strResultTemp4 = "" + end if + + End Function + +'------------------------------------------------------------------------------------------------- +'Function Name: f_FormatDSName. +'Descripton: Get infomation at Local Host. +'Input: strName. +'Output: No. +'------------------------------------------------------------------------------------------------- + Function f_FormatDSName(strName) + + On Error Resume Next + + first = 1 + position1 = 0 + + position1 = InStr(first, strName, "=") + Dim proc_name + proc_name = "" + If(position1 > 0) Then + proc_name = Mid(strName,position1+1,(Len(strName)-position1)) + proc_name = Replace(proc_name,".","_") + proc_name = Replace(proc_name,"-","_") + proc_name = Replace(proc_name,":","") + proc_name = Mid(proc_name,1, 19) + + + Else + proc_name = Mid(strName,position1+1,(Len(strName)-position1)) + proc_name = Replace(proc_name,".","_") + proc_name = Replace(proc_name,"-","_") + proc_name = Replace(proc_name,":","") + proc_name = Mid(proc_name,1, 19) + + End If + f_FormatDSName = proc_name + Exit Function + End Function + +'------------------------------------------------------------------------------------------------- +'Function Name: f_ExecQuery. +'Descripton: Format data the same as output. +'Input: service. +'Output: No. +'------------------------------------------------------------------------------------------------- + Function f_ExecQuery() + + On Error Resume Next + + strQuery = "Select " & strProp & " from " & strClass & " where DriveType = 3" + Set colWMI = objWMIService.ExecQuery(strQuery) + count = -1 + count = colWMI.count + if(count = -1) then + Wscript.Echo "Unknown - No data received from WMI;" + Wscript.Quit(intUnknown) + end if + + End Function + +'------------------------------------------------------------------------------------------------- +'Function Name: f_GetInformation. +'Descripton: Get information data. +'Input: No. +'Output: Values. +'------------------------------------------------------------------------------------------------- + Function f_GetInformation() + + On Error Resume Next + + strResult = "" + strResult1 = "" + strResult2 = "" + intReturn = 0 + + if(thresoldArraySize > 0 and (thresoldArraySize <> instanceArraySize)) then + Wscript.Echo "Error! Arguments wrong, number of instances and thresolds do not match." + Wscript.Quit(intError) + Exit Function + end if + + If(thresoldArraySize > 0 and (thresoldArraySize = instanceArraySize)) then + for i = 0 to instanceArraySize -1 + instance = instanceArray(i) + warningValue = warningArray(i) + criticalValue = criticalArray(i) + f_GetInstance(instance) + strResult1 = strResult1 & strResultTemp1 + strResult2 = strResult2 & strResultTemp2 + if intReturn < intReturnTemp then + intReturn = intReturnTemp + end if + Next + Else + If(instanceArraySize > 0 and (warningArraySize > 1 Or criticalArraySize > 1)) Then + for i = 0 to instanceArraySize -1 + instance = instanceArray(i) + warningValue = warningArray(i) + criticalValue = criticalArray(i) + f_GetInstance(instance) + strResult1 = strResult1 & strResultTemp1 + strResult2 = strResult2 & strResultTemp2 + if intReturn < intReturnTemp then + intReturn = intReturnTemp + end if + Next + Else + for i = 0 to instanceArraySize -1 + instance = instanceArray(i) + f_GetInstance(instance) + strResult1 = strResult1 & strResultTemp1 + strResult2 = strResult2 & strResultTemp2 + if intReturn < intReturnTemp then + intReturn = intReturnTemp + end if + Next + End If + End if + if(strResult2 = "") then + strResult = strResult1 + else + strResult = strResult1 & "|" & strResult2 + end if + Wscript.Echo strResult + Wscript.Quit(intReturn) + + End Function + +'------------------------------------------------------------------------------------------------- +'Function Name: f_GetInstances. +'Descripton: Get Prefix. +'Input: No. +'Output: No. +'------------------------------------------------------------------------------------------------- + Function f_GetInstances() + + On Error Resume Next + + first = 1 + position = 0 + instanceArraySize = 0 + + position = InStr(first, strInst, ",") + if (position = 0) then + instanceTemp = strInst + InstanceArraySize = 1 + ReDim instanceArray(instanceArraySize) + instanceArray(0) = instanceTemp + + else + do while (position > 0) + instanceTemp = Mid(strInst,first,position - first) + instanceArraySize = instanceArraySize + 1 + ReDim Preserve instanceArray(instanceArraySize) + instanceArray(instanceArraySize -1) = Trim(instanceTemp) + first = position + 1 + position = InStr(first, strInst, ",") + loop + instanceTemp = Mid(strInst,first,len(strInst)) + instanceArraySize = instanceArraySize + 1 + ReDim Preserve instanceArray(instanceArraySize) + instanceArray(instanceArraySize -1) = Trim(instanceTemp) + end if + + End Function + +'------------------------------------------------------------------------------------------------- +'Function Name: f_GetWarningCriticalValues. +'Descripton: Get Prefix. +'Input: No. +'Output: No. +'------------------------------------------------------------------------------------------------- + Function f_GetWarningCriticalValues() + + On Error Resume Next + + position1 = 0 + position2 = 0 + position3 = 0 + position4 = 0 + temp1 = 1 + temp2 = 1 + warningArraySize = 0 + criticalArraySize = 0 + + 'get warning + position2 = InStr(temp1, warningValueString, ",") + If(position2 = 0) then + position2 = Len(warningValueString)+1 + end if + + If(position2 > position1) then + do while (position2 > position1) + warningPair = Mid(warningValueString, position1 + 1, (position2 - position1 -1)) + warningArraySize = warningArraySize + 1 + ReDim Preserve warningArray(warningArraySize) + warningArray(warningArraySize -1) = Trim(warningPair) + temp1 = position2 + 1 + position1 = position2 + position2 = InStr(temp1, warningValueString, ",") + If(position2 = 0) then + position2 = Len(warningValueString)+1 + End If + loop + end If + + If(Int(warningArraySize) < Int(instanceArraySize)) Then + ReDim Preserve warningArray(instanceArraySize) + For i = 0 To (instanceArraySize - warningArraySize - 1) + warningArray(warningArraySize +i) = warningArray(warningArraySize-1) + Next + warningArraySize = instanceArraySize + End If + 'get critical + position4 = InStr(temp2, criticalValueString, ",") + If(position4 = 0) then + position4 = Len(criticalValueString)+1 + end if + + If(position4 > position3) then + do while (position4 > position3) + criticalPair = Mid(criticalValueString, position3 + 1, (position4 - position3 -1)) + criticalArraySize = criticalArraySize + 1 + ReDim Preserve criticalArray(criticalArraySize) + criticalArray(criticalArraySize -1) = Trim(criticalPair) + temp2 = position4 + 1 + position3 = position4 + position4 = InStr(temp2, criticalValueString, ",") + If(position4 = 0) then + position4 = Len(criticalValueString)+1 + End If + loop + End If + If(Int(criticalArraySize) < Int(instanceArraySize)) Then + ReDim Preserve criticalArray(instanceArraySize) + For i = 0 To (instanceArraySize - criticalArraySize - 1) + criticalArray(criticalArraySize +i) = criticalArray(criticalArraySize-1) + Next + criticalArraySize = instanceArraySize + End If + + End Function + +'------------------------------------------------------------------------------------------------- +'Function Name: f_GetThresolds. +'Descripton: Get Prefix. +'Input: No. +'Output: No. +'------------------------------------------------------------------------------------------------- + Function f_GetThresolds() + + On Error Resume Next + + first = 1 + position1 = 0 + position2 = 0 + temp = 1 + temp1 = 0 + thresoldArraySize = 0 + + position2 = InStr(temp, strThresolds, ":") + If(position2 = 0) then + position2 = Len(strThresolds)+1 + end if + + + if(position2 > position1) then + + do while (position2 > position1) + thresoldPair = Mid(strThresolds, position1 + 1, (position2 - position1 -1)) + temp1 = InStr(1, thresoldPair, ",") + if(temp1 > 0) then + warningTemp = Mid(thresoldPair, 1, temp1 -1) + criticalTemp = Mid(thresoldPair, temp1 +1, len(thresoldPair) - temp1) + if(IsNumeric(warningTemp) or IsNumeric(criticalTemp)) then + thresoldArraySize = thresoldArraySize + 1 + ReDim Preserve warningArray(thresoldArraySize) + ReDim Preserve criticalArray(thresoldArraySize) + warningArray(thresoldArraySize -1) = Trim(warningTemp) + criticalArray(thresoldArraySize -1) = Trim(criticalTemp) + else + Wscript.Echo "Error! Arguments wrong, please verify -t parameter" + Wscript.Quit(intError) + Exit Function + end if + Else + Wscript.Echo "Error! Arguments wrong, please verify -t parameter" + Wscript.Quit(intError) + Exit Function + end if + temp = position2 + 1 + position1 = position2 + position2 = InStr(temp, strThresolds, ":") + if(position2 = 0) then + position2 = Len(strThresolds)+1 + end if + loop + end if + End Function + +'------------------------------------------------------------------------------------------------- +'Function Name: f_LocalPerfValue. +'Descripton: Get perform value at Local Host. +'Input: No. +'Output: No. +'------------------------------------------------------------------------------------------------- + Function f_LocalPerfValue() + + On Error Resume Next + + Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\" & strNameSpace) + f_Error() + + f_ExecQuery() + 'f_GetInstances() + f_GetInformation() + + End Function + +'------------------------------------------------------------------------------------------------- +'Function Name: f_RemotePerfValue. +'Descripton: Get perform values at Remote Host. +'Input: No. +'Output: Values. +'------------------------------------------------------------------------------------------------- + Function f_RemotePerfValue() + + On Error Resume Next + + Set objSWbemLocator = CreateObject("WbemScripting.SWbemLocator") + if (strDomain = "") then + Set objWMIService = objSWbemLocator.ConnectServer _ + (strComputer, strNameSpace , strUser, strPass ) + f_Error() + + else + Set objWMIService = objSWbemLocator.ConnectServer _ + (strComputer, strNameSpace , strUser, strPass,"MS_409","ntlmdomain:" + strDomain ) + f_Error() + + end if + objWMIService.Security_.ImpersonationLevel = 3 + f_Error() + + f_ExecQuery() + 'f_GetInstances() + f_GetInformation() + + End Function + +'************************************************************************************************* +' Main Function +'************************************************************************************************* + + '///////////////////// + + strCommandName="check_disks_percentage_space_used.vbs" + strDescription="Enumerate the needed windows host information." + + '///////////////////// + + strNameSpace = "root\cimv2" + strClass = "Win32_LogicalDisk" + strProp = "DeviceID, Size, FreeSpace" + f_GetAllArg() + tempCount = argcountcommand/2 + f_Error() + + if ((UCase(arg(0))="-H") Or (UCase(arg(0))="--HELP")) and (argcountcommand=1) then + f_help() + else + if( ((argcountcommand Mod 2) = 0) and (1 < tempCount < 8)) then + strComputer = f_GetOneArg("-h") + strInst = f_GetOneArg("-inst") + f_GetInstances() + warningValue = f_GetOneArg("-w") + warningValueString = f_GetOneArg("-w") + criticalValue = f_GetOneArg("-c") + criticalValueString = f_GetOneArg("-c") + If((warningValueString <> "") Or (criticalValueString <> "")) Then + f_GetWarningCriticalValues() + End if + strThresolds = f_GetOneArg("-t") + + strUser = f_GetOneArg("-user") + strPass = f_GetOneArg("-pass") + strDomain = f_GetOneArg("-domain") + if((strComputer = "") or (strInst = "")) then + Wscript.Echo "Error! Arguments wrong, require verify -h -inst parameters" + Wscript.Quit(intError) + else + Select Case tempCount + Case 2: + f_LocalPerfValue() + Case 3: + if(strThresolds <> "") then + f_GetThresolds() + f_LocalPerfValue() + else + Wscript.Echo "Error! Arguments wrong, please verify -t parameters" + Wscript.Quit(intError) + end if + Case 4: + if ((warningValue <> "") and (criticalValue <> "")) then + f_LocalPerfValue() + end if + if ((strUser <> "") and (strPass <> "")) then + f_RemotePerfValue() + else + Wscript.Echo "Error! Arguments wrong, please verify -user -pass or -w -c parameters" + Wscript.Quit(intError) + end if + Case 5: + if ((strUser <> "") and (strPass <> "") and (strThresolds <> "")) then + f_GetThresolds() + f_RemotePerfValue() + else + Wscript.Echo "Error! Arguments wrong, please verify -user -pass or -t parameters" + Wscript.Quit(intError) + end if + Case 6: + if ((strUser <> "") and (strPass <> "") and (warningValue <> "") and (criticalValue <> "")) then + f_RemotePerfValue() + else + Wscript.Echo "Error! Arguments wrong for remote check, please verify -w -c -user -pass parameters" + Wscript.Quit(intError) + end if + Case 7: + if ((strUser <> "") and (strPass <> "") and (warningValue <> "") and (criticalValue <> "") and (strDomain <> "")) then + f_RemotePerfValue() + else + Wscript.Echo "Error! Arguments wrong for remote check, please verify -w -c -user -pass -domain parameters" + Wscript.Quit(intError) + end if + Case Else + Wscript.Echo "Error! Arguments wrong, please type -h for Help" + Wscript.Quit(intError) + End Select + + end if + else + Wscript.Echo "Error! Arguments wrong, please type -h for Help" + Wscript.Quit(intError) + end if + + end if \ No newline at end of file diff --git a/nsclient/trunk/scripts/wmi/check_memory_percentage_space_used.vbs b/nsclient/trunk/scripts/wmi/check_memory_percentage_space_used.vbs new file mode 100644 index 0000000..afaa0fa --- /dev/null +++ b/nsclient/trunk/scripts/wmi/check_memory_percentage_space_used.vbs @@ -0,0 +1,1003 @@ +' Copyright 2007 GroundWork Open Source Inc. +' +' This program is free software; you can redistribute it and/or +' modify it under the terms of the GNU General Public License +' as published by the Free Software Foundation; version 2 +' of the License. +' +' This program is distributed in the hope that it will be useful, +' but WITHOUT ANY WARRANTY; without even the implied warranty of +' MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +' GNU General Public License for more details. +' +' +' Author Dr. Dave Blunt at GroundWork Open Source Inc. (dblunt@groundworkopensource.com) + +'************************************************************************************************* +' Public Variable +'************************************************************************************************* +Const intOK = 0 +Const intWarning = 1 +Const intCritical = 2 +Const intError = 3 +Const intUnknown = 3 + +Dim argcountcommand +Dim arg(20) +Dim strComputer +Dim strClass +Dim strProp +Dim strDisks +Dim warningValue +Dim warningValueString +Dim criticalValue +Dim criticalValueString +Dim strUser +Dim strPass +Dim strDomain +Dim strNameSpace +Dim strDescription +Dim strCommandName +Dim strResultTemp +Dim strResult +Dim strResult1 +Dim strResult2 +Dim intReturnTemp +Dim intReturn +Dim strResultTemp1 +Dim strResultTemp2 +Dim strResultTemp3 +Dim strResultTemp4 +Dim intReturnTemp1 +Dim strPrefix +Dim intValue +Dim returnValue +Dim strThresolds +Dim strThresoldPair +Dim instanceArray() +Dim instanceArraySize +Dim thresoldArraySize +Dim warningArraySize +Dim criticalArraySize +Dim warningArray() +Dim criticalArray() +Dim instance +Dim lWarningValue +Dim uWarningValue +Dim lCriticalValue +Dim uCriticalValue + +Dim strDisplay1 +Dim strDisplay2 +Dim strName +Dim strPropName +Dim percentPhysical +Dim percentVirtual +Dim percentTotal + +Dim ArgCount +Dim strArgMain(10) +Dim strArgSortDes(10) +Dim strArgDetailDes(10) +Dim strArgExample(10) + +Dim objWMIService, colWMI1, colWMI2, objWMI1, objWMI2,objSWbemLocator + +strComputer="" +strClass = "" +strProp = "" +strInst = "" +warningValue = -1 +criticalValue = -1 +strUser = "" +strPass = "" +strDomain = "" + +intReturnTemp1 = 0 + +'************************************************************************************************* +' Functions and Subs +'************************************************************************************************* + +'------------------------------------------------------------------------------------------------- +'Function Name: f_Error. +'Descripton: Display an error notice include : Error Number and Error Description. +'Input: No. +'Output: No. +'------------------------------------------------------------------------------------------------- + Function f_Error() + + nbrError = err.number + if (nbrError <> 0 ) then + Select Case nbrError + Case 462, -2147023174 + strExitMsg = "Timeout connecting to WMI on this host! Error Number: " & nbrError & " Description: " & err.description + Case -2147024891 + strExitMsg = "Authentication failure to remote host! Error Number: " & nbrError & " Description: " & err.description + Case -2147217392 + strExitMsg = "Error! Number: " & nbrError & " Description: Invalid Class" + Case Else + strExitMsg = "Error! Number: " & nbrError & " Description: " & err.description + End Select + wscript.echo strExitMsg + wscript.quit(intUnknown) + end if + + End Function + + +'------------------------------------------------------------------------------------------------- +'Function Name: f_Help. +'Descripton: Display help of command include : Description, Arguments, Examples +'Input: No. +'Output: No. +'------------------------------------------------------------------------------------------------- + Function f_Help() + + Dim str + str="Check Memory Percentage Space Used. If your Local Machine has the same Administrator account and password as the Remote Machine then you don't have to use the two last parameters."&vbCrlF&vbCrlF + str=str&"cscript check_memory_percentage_space_used.vbs -h hostname -inst memory [-w warning_level -c critical_level] [-t thresoldpairs] [-user username -pass password [-domain domain]]"&vbCrlF + str=str&vbCrlF + str=str&"-h [--help] Help."&vbCrlF + str=str&"-h hostname Host name."&vbCrlF + str=str&"-inst memory Memory categories as RAM, PAGING, _TOTAL."&vbCrlF + str=str&"-w warning_level Warning threshold by percentage."&vbCrlF + str=str&"-c critical_level Critical threshold by percentage."&vbCrlF + str=str&"-t thresold pairs Threshold pairs againts with each individual memory categories. Note: each thresold pair is separated by a ':', warning value and critical separate by ',' character"&vbCrlF + str=str&"-user username Account Administrator on Remote Machine."&vbCrlF + str=str&"-pass password Password Account Administrator on Remote Machine."&vbCrlF + str=str&"-domain domain Domain Name of Remote Machine."&vbCrlF + str=str&vbCrlF + str=str&"Example: cscript check_memory_percentage_space_used.vbs -h Ser1 -inst ""*"" -w 30 -c 70 [-user Ser1\Administrator -pass password -domain ITSP] " &vbCrlF + str=str&"Example: cscript check_memory_percentage_space_used.vbs -h Ser1 -inst ""RAM, _Total"" -w 30 -c 70 [-user Ser1\Administrator -pass password -domain ITSP] " &vbCrlF + str=str&"Example: cscript check_memory_percentage_space_used.vbs -h Ser1 -inst ""RAM, _Total"" -t ""70,90:60,80"" [-user Ser1\Administrator -pass password -domain ITSP] " &vbCrlF + wscript.echo str + + End Function +'------------------------------------------------------------------------------------------------- +'Function Name: f_GetAllArg. +'Descripton: Get all of arguments from command. +'Input: No. +'Output: No. +'------------------------------------------------------------------------------------------------- + Function f_GetAllArg() + + On Error Resume Next + + Dim i + + argcountcommand=WScript.Arguments.Count + + for i=0 to argcountcommand-1 + arg(i)=WScript.Arguments(i) + next + + End Function +'------------------------------------------------------------------------------------------------- +'Function Name: f_GetOneArg. +'Descripton: Get an argument from command. +'Input: Yes. +' strName: Name of argument +'Output: Value. +'------------------------------------------------------------------------------------------------- + Function f_GetOneArg(strName) + + On Error Resume Next + + Dim i + for i=0 to argcountcommand-1 + if (Ucase(arg(i))=Ucase(strName)) then + f_GetOneArg=arg(i+1) + Exit Function + end if + next + + End Function + +'------------------------------------------------------------------------------------------------- +'Function Name: f_GetInstance. +'Descripton: Get infomation at Local Host. +'Input: instance. +'Output: No. +'------------------------------------------------------------------------------------------------- + Function f_GetInstance(instance) + + On Error Resume Next + + strResultTemp1 = "" + strResultTemp2 = "" + intResultTemp1 = 0 + strResultTemp = "" + intResultTemp = 0 + strPropName = "Percentage Space Used" + + if(instance = "*") then + strName = "RAM" + intValue = Int(percentPhysical) + f_Display() + strResultTemp1 = strResultTemp1 & strResultTemp3 + strResultTemp2 = strResultTemp2 & strResultTemp4 + + strName = "PAGING" + intValue = Int(percentVirtual) + f_Display() + strResultTemp1 = strResultTemp1 & strResultTemp3 + strResultTemp2 = strResultTemp2 & strResultTemp4 + + strName = "_Total" + intValue = Int(percentTotal) + f_Display() + + strResultTemp1 = strResultTemp1 & strResultTemp3 + strResultTemp2 = strResultTemp2 & strResultTemp4 + intReturnTemp = intReturnTemp1 + + Exit Function + else + if(UCase(instance) = "RAM") then + strName = instance + intValue = Int(percentPhysical) + f_Display() + strResultTemp1 = strResultTemp3 + strResultTemp2 = strResultTemp4 + intReturnTemp = intReturnTemp1 + Exit Function + else + if(UCase(instance) = "PAGING") then + strName = instance + intValue = Int(percentVirtual) + f_Display() + strResultTemp1 = strResultTemp3 + strResultTemp2 = strResultTemp4 + intReturnTemp = intReturnTemp1 + Exit Function + else + if(UCase(instance) = "_TOTAL") then + strName = instance + intValue = Int(percentTotal) + f_Display() + strResultTemp1 = strResultTemp3 + strResultTemp2 = strResultTemp4 + intReturnTemp = intReturnTemp1 + Exit Function + else + strResultTemp1 = "Unknown - " & instance &" query: No row returned." + intReturnTemp = intUnknown + Exit Function + end if + end if + end if + end if + + End Function + +'------------------------------------------------------------------------------------------------- +'Function Name: f_GetPrefix. +'Descripton: Get Prefix. +'Input: No. +'Output: No. +'------------------------------------------------------------------------------------------------- + Function f_GetPrefix(intValue) + + On Error Resume Next + + strPrefix = "" + If(warningValue <> "" And criticalValue = "") Then + If (IsNumeric(warningValue)) Then + If (Int(intValue) < Int(warningValue)) Then + returnValue=0 + strPrefix= "OK - " + Else + returnValue=1 + strPrefix= "Warning - " + End If + Else + Wscript.Echo "Error! Arguments wrong, please verify -w parameter" + Wscript.Quit(intError) + Exit Function + End If + End If + If(warningValue = "" And criticalValue <> "") Then + If (IsNumeric(criticalValue)) Then + If (Int(intValue) < Int(criticalValue)) Then + returnValue=0 + strPrefix= "OK - " + Else + returnValue=2 + strPrefix= "Critical - " + End If + Else + Wscript.Echo "Error! Arguments wrong, please verify -c parameter" + Wscript.Quit(intError) + Exit Function + End If + End If + If (warningValue <> "" And criticalValue <> "") Then + If (IsNumeric(warningValue) And IsNumeric(criticalValue)) Then + if (Int(warningValue) < Int(criticalValue)) then + + if (Int(intValue) < Int(warningValue)) then + returnValue=0 + strPrefix= "OK - " + else + if (Int(intValue) < Int(criticalValue)) then + returnValue=1 + strPrefix= "Warning - " + else + returnValue=2 + strPrefix= "Critical - " + end if + end if + else + if (Int(intValue) > Int(warningValue)) then + returnValue=0 + strPrefix= "OK - " + else + if (Int(intValue) > Int(criticalValue)) then + returnValue=1 + strPrefix= "Warning - " + else + returnValue=2 + strPrefix= "Critical - " + end if + end if + end If + Else + Wscript.Echo "Error! Arguments wrong, please verify -w -c parameter" + Wscript.Quit(intError) + Exit Function + End If + End If + + End Function + +'------------------------------------------------------------------------------------------------- +'Function Name: f_GetPrefixWithRange. +'Descripton: Get Prefix. +'Input: No. +'Output: No. +'------------------------------------------------------------------------------------------------- + Function f_GetPrefixWithRange(intValue) + + On Error Resume Next + lWarningValue = "" + uWarningValue = "" + lCriticalValue= "" + uCriticalValue= "" + warningReturn = 0 + criticalReturn = 0 + If(warningValue <> "") Then + f_GetWarningValueFromRange(warningValue) + End If + If(criticalValue <> "") Then + f_GetCriticalValueFromRange(criticalValue) + End If + strPrefix = "" + 'verify warning + If((lWarningValue <> "") And (uWarningValue <> "")) Then + If(Int(lWarningValue) <= Int(uWarningValue)) Then + If((Int(lWarningValue) >= Int(intValue)) Or (Int(intValue) >= Int(uWarningValue))) Then + warningReturn=1 + End If + Else + If((Int(intValue) >= Int(uWarningValue) ) And (Int(intValue) <= Int(lWarningValue))) Then + warningReturn=1 + End If + End If + End If + If((lWarningValue <> "") And (uWarningValue = "")) Then + If(Int(intValue) <= Int(lWarningValue)) Then + warningReturn=1 + End If + End If + If((lWarningValue = "") And (uWarningValue <> "")) Then + If(Int(intValue) >= Int(uWarningValue)) Then + warningReturn=1 + End If + End If + + 'verify critical + If((lCriticalValue <> "") And (uCriticalValue <> "")) Then + If(Int(lCriticalValue) <= Int(uCriticalValue)) Then + If((Int(lCriticalValue) >= Int(intValue)) Or (Int(intValue) >= Int(uCriticalValue))) Then + criticalReturn=2 + End If + Else + If((Int(intValue) >= Int(uCriticalValue) ) And (Int(intValue) <= Int(lCriticalValue))) Then + criticalReturn=2 + End If + End If + End If + If((lCriticalValue <> "") And (uCriticalValue = "")) Then + If(Int(intValue) <= Int(lCriticalValue)) Then + criticalReturn=2 + End If + End If + If((lCriticalValue = "") And (uCriticalValue <> "")) Then + If(Int(intValue) >= Int(uCriticalValue)) Then + criticalReturn=2 + End If + End If + + 'return result + If(criticalReturn = 2) Then + returnValue=2 + strPrefix= "Critical - " + Else + If(warningReturn = 1) Then + returnValue=1 + strPrefix= "Warning - " + Else + returnValue=0 + strPrefix= "Ok - " + End If + End If + + End Function + +'------------------------------------------------------------------------------------------------- +'Function Name: f_GetWarningValueFromRange(). +'Descripton: Get perform value at Local Host. +'Input: warningValueRange. +'Output: No. +'------------------------------------------------------------------------------------------------- + Function f_GetWarningValueFromRange(warningValue) + + On Error Resume Next + lWarningValue = "" + uWarningValue = "" + temp1 = 0 + temp1 = InStr(1, warningValue, ":") + if(temp1 > 0) then + lWarningTemp = Mid(warningValue, 1, temp1 -1) + uWarningTemp = Mid(warningValue, temp1 +1, len(warningValue) - temp1) + if(IsNumeric(lWarningTemp) or IsNumeric(uWarningTemp)) then + lWarningValue = lWarningTemp + uWarningValue = uWarningTemp + else + Wscript.Echo "Error! Arguments wrong, please verify -w parameter" + Wscript.Quit(intError) + Exit Function + end if + else + Wscript.Echo "Error! Arguments wrong, please verify -w parameter" + Wscript.Quit(intError) + Exit Function + end if + + End Function + +'------------------------------------------------------------------------------------------------- +'Function Name: f_GetCriticalValueFromRange(). +'Descripton: Get perform value at Local Host. +'Input: warningValueRange. +'Output: No. +'------------------------------------------------------------------------------------------------- + Function f_GetCriticalValueFromRange(criticalValue) + + On Error Resume Next + lCriticalValue = "" + uCriticalValue = "" + temp1 = 0 + temp1 = InStr(1, criticalValue, ":") + if(temp1 > 0) then + lCriticalTemp = Mid(criticalValue, 1, temp1 -1) + uCriticalTemp = Mid(criticalValue, temp1 +1, len(criticalValue) - temp1) + if(IsNumeric(lCriticalTemp) or IsNumeric(uCriticalTemp)) then + lCriticalValue = lCriticalTemp + uCriticalValue = uCriticalTemp + else + Wscript.Echo "Error! Arguments wrong, please verify -c parameter" + Wscript.Quit(intError) + Exit Function + end if + else + WScript.Echo "Error! Arguments wrong, please verify -c parameter" + Wscript.Quit(intError) + Exit Function + end if + + End Function + +'------------------------------------------------------------------------------------------------- +'Function Name: f_Display. +'Descripton: Get Prefix. +'Input: No. +'Output: No. +'------------------------------------------------------------------------------------------------- + Function f_Display() + + On Error Resume Next + + strDisplay1 = "" + strDisplay2 = "" + strResultTemp3 = "" + strResultTemp4 = "" + 'strName = instance + 'strPropName = "Number of processes with " + 'intValue = count + Dim strDSName + strDSName = f_FormatDSName(strName) + if((warningValue <> "") Or (criticalValue <> "")) then + strDisplay1 = strName & " '" & strPropName & "'" & " = " & intValue & "; " + strDisplay2 = "'" & strDSName & "'" & "=" & intValue & ";" & warningValue & ";" & criticalValue & ";; " + If(InStr(1, warningValue, ":") > 0 Or InStr(1, criticalValue, ":") > 0) Then + f_GetPrefixWithRange(intValue) + Else + f_GetPrefix(intValue) + End If + strResultTemp3 = strResultTemp3 & strPrefix & strDisplay1 + strResultTemp4 = strResultTemp4 & strDisplay2 + if( intReturnTemp1 < returnValue) then + intReturnTemp1 = returnValue + end if + else + strResultTemp3 = strResultTemp3 & "OK - " & strName & " '" & strPropName & "'" & " = " & intValue & "; " + strResultTemp4 = "" + end if + + End Function + +'------------------------------------------------------------------------------------------------- +'Function Name: f_FormatDSName. +'Descripton: Get infomation at Local Host. +'Input: strName. +'Output: No. +'------------------------------------------------------------------------------------------------- + Function f_FormatDSName(strName) + + On Error Resume Next + + first = 1 + position1 = 0 + + position1 = InStr(first, strName, "=") + Dim proc_name + proc_name = "" + If(position1 > 0) Then + proc_name = Mid(strName,position1+1,(Len(strName)-position1)) + proc_name = Replace(proc_name,".","_") + proc_name = Replace(proc_name,"-","_") + proc_name = Mid(proc_name,1, 19) + + + Else + proc_name = Mid(strName,position1+1,(Len(strName)-position1)) + proc_name = Replace(proc_name,".","_") + proc_name = Replace(proc_name,"-","_") + proc_name = Mid(proc_name,1, 19) + + End If + f_FormatDSName = proc_name + Exit Function + End Function + +'------------------------------------------------------------------------------------------------- +'Function Name: f_ExecQuery. +'Descripton: Format data the same as output. +'Input: service. +'Output: No. +'------------------------------------------------------------------------------------------------- + Function f_ExecQuery() + + On Error Resume Next + + percentPhysical = 0 + percentVirtual = 0 + percentTotal = 0 + count = -1 + strQuery = "Select " & strProp & " from " & strClass + Set colWMI = objWMIService.ExecQuery(strQuery) + count = colWMI.count + if(count = -1) then + Wscript.Echo "Unknown - No data received from WMI;" + Wscript.Quit(intUnknown) + end if + For Each objWMI in colWMI + intFreePhysical = objWMI.Properties_("FreePhysicalMemory") + intFreeVirtual = objWMI.Properties_("FreeVirtualMemory") + intTotalPhysical = objWMI.Properties_("TotalVisibleMemorySize") + intTotalVirtual = objWMI.Properties_("TotalVirtualMemorySize") + Next + + percentPhysical = ((intTotalPhysical - intFreePhysical)*100)/intTotalPhysical + percentVirtual = ((intTotalVirtual - intFreeVirtual)*100)/intTotalVirtual + percentTotal = (intTotalPhysical * 1 + intTotalVirtual - intFreePhysical - intFreeVirtual)*100/(intTotalPhysical * 1 + intTotalVirtual) + End Function + +'------------------------------------------------------------------------------------------------- +'Function Name: f_GetInformation. +'Descripton: Get information data. +'Input: No. +'Output: Values. +'------------------------------------------------------------------------------------------------- + Function f_GetInformation() + + On Error Resume Next + + strResult = "" + strResult1 = "" + strResult2 = "" + intReturn = 0 + + if(thresoldArraySize > 0 and (thresoldArraySize <> instanceArraySize)) then + Wscript.Echo "Error! Arguments wrong, number of instances and thresolds do not match." + Wscript.Quit(intError) + Exit Function + end if + + If(thresoldArraySize > 0 and (thresoldArraySize = instanceArraySize)) then + for i = 0 to instanceArraySize -1 + instance = instanceArray(i) + warningValue = warningArray(i) + criticalValue = criticalArray(i) + f_GetInstance(instance) + strResult1 = strResult1 & strResultTemp1 + strResult2 = strResult2 & strResultTemp2 + if intReturn < intReturnTemp then + intReturn = intReturnTemp + end if + Next + Else + If(instanceArraySize > 0 and (warningArraySize > 1 Or criticalArraySize > 1)) Then + for i = 0 to instanceArraySize -1 + instance = instanceArray(i) + warningValue = warningArray(i) + criticalValue = criticalArray(i) + f_GetInstance(instance) + strResult1 = strResult1 & strResultTemp1 + strResult2 = strResult2 & strResultTemp2 + if intReturn < intReturnTemp then + intReturn = intReturnTemp + end if + Next + Else + for i = 0 to instanceArraySize -1 + instance = instanceArray(i) + f_GetInstance(instance) + strResult1 = strResult1 & strResultTemp1 + strResult2 = strResult2 & strResultTemp2 + if intReturn < intReturnTemp then + intReturn = intReturnTemp + end if + Next + End If + End if + if(strResult2 = "") then + strResult = strResult1 + else + strResult = strResult1 & "|" & strResult2 + end if + Wscript.Echo strResult + Wscript.Quit(intReturn) + + End Function + +'------------------------------------------------------------------------------------------------- +'Function Name: f_GetInstances. +'Descripton: Get Prefix. +'Input: No. +'Output: No. +'------------------------------------------------------------------------------------------------- + Function f_GetInstances() + + On Error Resume Next + + first = 1 + position = 0 + instanceArraySize = 0 + + position = InStr(first, strInst, ",") + if (position = 0) then + instanceTemp = strInst + InstanceArraySize = 1 + ReDim instanceArray(instanceArraySize) + instanceArray(0) = instanceTemp + else + do while (position > 0) + instanceTemp = Mid(strInst,first,position - first) + instanceArraySize = instanceArraySize + 1 + ReDim Preserve instanceArray(instanceArraySize) + instanceArray(instanceArraySize -1) = Trim(instanceTemp) + first = position + 1 + position = InStr(first, strInst, ",") + loop + instanceTemp = Mid(strInst,first,len(strInst)) + instanceArraySize = instanceArraySize + 1 + ReDim Preserve instanceArray(instanceArraySize) + instanceArray(instanceArraySize -1) = Trim(instanceTemp) + end if + End Function + +'------------------------------------------------------------------------------------------------- +'Function Name: f_GetWarningCriticalValues. +'Descripton: Get Prefix. +'Input: No. +'Output: No. +'------------------------------------------------------------------------------------------------- + Function f_GetWarningCriticalValues() + + On Error Resume Next + + position1 = 0 + position2 = 0 + position3 = 0 + position4 = 0 + temp1 = 1 + temp2 = 1 + warningArraySize = 0 + criticalArraySize = 0 + + 'get warning + position2 = InStr(temp1, warningValueString, ",") + If(position2 = 0) then + position2 = Len(warningValueString)+1 + end if + + If(position2 > position1) then + do while (position2 > position1) + warningPair = Mid(warningValueString, position1 + 1, (position2 - position1 -1)) + warningArraySize = warningArraySize + 1 + ReDim Preserve warningArray(warningArraySize) + warningArray(warningArraySize -1) = Trim(warningPair) + temp1 = position2 + 1 + position1 = position2 + position2 = InStr(temp1, warningValueString, ",") + If(position2 = 0) then + position2 = Len(warningValueString)+1 + End If + loop + end If + + If(Int(warningArraySize) < Int(instanceArraySize)) Then + ReDim Preserve warningArray(instanceArraySize) + For i = 0 To (instanceArraySize - warningArraySize - 1) + warningArray(warningArraySize +i) = warningArray(warningArraySize-1) + Next + warningArraySize = instanceArraySize + End If + 'get critical + position4 = InStr(temp2, criticalValueString, ",") + If(position4 = 0) then + position4 = Len(criticalValueString)+1 + end if + + If(position4 > position3) then + do while (position4 > position3) + criticalPair = Mid(criticalValueString, position3 + 1, (position4 - position3 -1)) + criticalArraySize = criticalArraySize + 1 + ReDim Preserve criticalArray(criticalArraySize) + criticalArray(criticalArraySize -1) = Trim(criticalPair) + temp2 = position4 + 1 + position3 = position4 + position4 = InStr(temp2, criticalValueString, ",") + If(position4 = 0) then + position4 = Len(criticalValueString)+1 + End If + loop + End If + If(Int(criticalArraySize) < Int(instanceArraySize)) Then + ReDim Preserve criticalArray(instanceArraySize) + For i = 0 To (instanceArraySize - criticalArraySize - 1) + criticalArray(criticalArraySize +i) = criticalArray(criticalArraySize-1) + Next + criticalArraySize = instanceArraySize + End If + + End Function + +'------------------------------------------------------------------------------------------------- +'Function Name: f_GetThresolds. +'Descripton: Get Prefix. +'Input: No. +'Output: No. +'------------------------------------------------------------------------------------------------- + Function f_GetThresolds() + + On Error Resume Next + + first = 1 + position1 = 0 + position2 = 0 + temp = 1 + temp1 = 0 + thresoldArraySize = 0 + + position2 = InStr(temp, strThresolds, ":") + if(position2 = 0) then + position2 = Len(strThresolds)+1 + end if + + if(position2 > position1) then + + do while (position2 > position1) + thresoldPair = Mid(strThresolds, position1 + 1, (position2 - position1 -1)) + temp1 = InStr(1, thresoldPair, ",") + if(temp1 > 0) then + warningTemp = Mid(thresoldPair, 1, temp1 -1) + criticalTemp = Mid(thresoldPair, temp1 +1, len(thresoldPair) - temp1) + if(IsNumeric(warningTemp) or IsNumeric(criticalTemp)) then + thresoldArraySize = thresoldArraySize + 1 + ReDim Preserve warningArray(thresoldArraySize) + ReDim Preserve criticalArray(thresoldArraySize) + warningArray(thresoldArraySize -1) = Trim(warningTemp) + criticalArray(thresoldArraySize -1) = Trim(criticalTemp) + else + Wscript.Echo "Error! Arguments wrong, please verify -t parameter" + Wscript.Quit(intError) + Exit Function + end if + else + Wscript.Echo "Error! Arguments wrong, please verify -t parameter" + Wscript.Quit(intError) + Exit Function + end if + temp = position2 + 1 + position1 = position2 + position2 = InStr(temp, strThresolds, ":") + if(position2 = 0) then + position2 = Len(strThresolds)+1 + end if + loop + end if + End Function + +'------------------------------------------------------------------------------------------------- +'Function Name: f_LocalPerfValue. +'Descripton: Get perform value at Local Host. +'Input: No. +'Output: No. +'------------------------------------------------------------------------------------------------- + Function f_LocalPerfValue() + + On Error Resume Next + + Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\" & strNameSpace) + f_Error() + 'Set colInstances1 = GetObject("winmgmts:{impersonationLevel=impersonate}\\" & strComputer & "\" & strNameSpace).InstancesOf(strClass) + 'For Each objInstance1 in colInstances1 + 'Next + 'f_Error() + + f_ExecQuery() + 'f_GetInstances() + f_GetInformation() + + End Function + +'------------------------------------------------------------------------------------------------- +'Function Name: f_RemotePerfValue. +'Descripton: Get perform values at Remote Host. +'Input: No. +'Output: Values. +'------------------------------------------------------------------------------------------------- + Function f_RemotePerfValue() + + On Error Resume Next + + Set objSWbemLocator = CreateObject("WbemScripting.SWbemLocator") + if (strDomain = "") then + Set objWMIService = objSWbemLocator.ConnectServer _ + (strComputer, strNameSpace , strUser, strPass ) + f_Error() + + 'Set colInstances1 = objSWbemLocator.ConnectServer(strComputer, strNamespace , strUser, strPass).InstancesOf(strClass) + 'For Each objInstance1 in colInstances1 + 'Next + 'f_Error() + else + Set objWMIService = objSWbemLocator.ConnectServer _ + (strComputer, strNameSpace , strUser, strPass,"MS_409","ntlmdomain:" + strDomain ) + f_Error() + + 'Set colInstances1 = objSWbemLocator.ConnectServer(strComputer, strNamespace , strUser, strPass,"MS_409","ntlmdomain:" & strDomain ).InstancesOf(strClass) + 'For Each objInstance1 in colInstances1 + 'Next + 'f_Error() + end if + objWMIService.Security_.ImpersonationLevel = 3 + f_Error() + + f_ExecQuery() + 'f_GetInstances() + f_GetInformation() + + End Function + +'************************************************************************************************* +' Main Function +'************************************************************************************************* + + '///////////////////// + + strCommandName="check_memory_percentage_space_used.vbs" + strDescription="Enumerate the needed windows host information." + + '///////////////////// + + strNameSpace = "root\cimv2" + strClass = "Win32_OperatingSystem" + strProp = "FreePhysicalMemory, FreeVirtualMemory, TotalVirtualMemorySize, TotalVisibleMemorySize" + f_GetAllArg() + tempCount = argcountcommand/2 + f_Error() + + if ((UCase(arg(0))="-H") Or (UCase(arg(0))="--HELP")) and (argcountcommand=1) then + f_help() + else + if( ((argcountcommand Mod 2) = 0) and (1 < tempCount < 8)) then + strComputer = f_GetOneArg("-h") + strInst = f_GetOneArg("-inst") + f_GetInstances() + warningValue = f_GetOneArg("-w") + warningValueString = f_GetOneArg("-w") + criticalValue = f_GetOneArg("-c") + criticalValueString = f_GetOneArg("-c") + If((warningValueString <> "") Or (criticalValueString <> "")) Then + f_GetWarningCriticalValues() + End if + strThresolds = f_GetOneArg("-t") + + strUser = f_GetOneArg("-user") + strPass = f_GetOneArg("-pass") + strDomain = f_GetOneArg("-domain") + if((strComputer = "") or (strInst = "")) then + Wscript.Echo "Error! Arguments wrong, require verify -h -inst parameters" + Wscript.Quit(intError) + else + Select Case tempCount + Case 2: + f_LocalPerfValue() + Case 3: + if(strThresolds <> "") then + f_GetThresolds() + f_LocalPerfValue() + + else + Wscript.Echo "Error! Arguments wrong, please verify -t parameters" + Wscript.Quit(intError) + end if + Case 4: + if ((warningValue <> "") and (criticalValue <> "")) then + f_LocalPerfValue() + end if + if ((strUser <> "") and (strPass <> "")) then + f_RemotePerfValue() + else + Wscript.Echo "Error! Arguments wrong, please verify -user -pass or -w -c parameters" + Wscript.Quit(intError) + end if + Case 5: + if ((strUser <> "") and (strPass <> "") and (strThresolds <> "")) then + f_GetThresolds() + f_RemotePerfValue() + else + Wscript.Echo "Error! Arguments wrong, please verify -user -pass or -t parameters" + Wscript.Quit(intError) + end if + Case 6: + if ((strUser <> "") and (strPass <> "") and (warningValue <> "") and (criticalValue <> "")) then + f_RemotePerfValue() + else + Wscript.Echo "Error! Arguments wrong for remote check, please verify -w -c -user -pass parameters" + Wscript.Quit(intError) + end if + Case 7: + if ((strUser <> "") and (strPass <> "") and (warningValue <> "") and (criticalValue <> "") and (strDomain <> "")) then + f_RemotePerfValue() + else + Wscript.Echo "Error! Arguments wrong for remote check, please verify -w -c -user -pass -domain parameters" + Wscript.Quit(intError) + end if + Case Else + Wscript.Echo "Error! Arguments wrong, please type -h for Help" + Wscript.Quit(intError) + End Select + + end if + else + Wscript.Echo "Error! Arguments wrong, please type -h for Help" + Wscript.Quit(intError) + end if + + end if \ No newline at end of file diff --git a/nsclient/trunk/scripts/wmi/check_network_io.vbs b/nsclient/trunk/scripts/wmi/check_network_io.vbs new file mode 100644 index 0000000..ae80787 --- /dev/null +++ b/nsclient/trunk/scripts/wmi/check_network_io.vbs @@ -0,0 +1,1049 @@ +' Copyright 2007 GroundWork Open Source Inc. +' +' This program is free software; you can redistribute it and/or +' modify it under the terms of the GNU General Public License +' as published by the Free Software Foundation; version 2 +' of the License. +' +' This program is distributed in the hope that it will be useful, +' but WITHOUT ANY WARRANTY; without even the implied warranty of +' MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +' GNU General Public License for more details. +' +' +' Author Dr. Dave Blunt at GroundWork Open Source Inc. (dblunt@groundworkopensource.com) + +'************************************************************************************************* +' Public Variable +'************************************************************************************************* +Const intOK = 0 +Const intWarning = 1 +Const intCritical = 2 +Const intError = 3 +Const intUnknown = 3 + +Dim argcountcommand +Dim arg(20) +Dim strComputer +Dim strClass +Dim strProp +Dim strDisks +Dim warningValue +Dim warningValueString +Dim criticalValue +Dim criticalValueString +Dim strUser +Dim strPass +Dim strDomain +Dim strNameSpace +Dim strDescription +Dim strCommandName +Dim strResultTemp +Dim strResult +Dim strResult1 +Dim strResult2 +Dim intReturnTemp +Dim intReturn +Dim strResultTemp1 +Dim strResultTemp2 +Dim strResultTemp3 +Dim strResultTemp4 +Dim intReturnTemp1 +Dim strPrefix +Dim intValue +Dim returnValue +Dim strThresolds +Dim strThresoldPair +Dim instanceArray() +Dim instanceArraySize +Dim thresoldArraySize +Dim warningArraySize +Dim criticalArraySize +Dim warningArray() +Dim criticalArray() +Dim instance +Dim propArray() +Dim propArraySize +Dim counterValueArray() +Dim timerValueTempArray() +Dim strNameArray() +Dim prop +Dim lWarningValue +Dim uWarningValue +Dim lCriticalValue +Dim uCriticalValue +Dim propInstanceArraySize + +Dim strDisplay1 +Dim strDisplay2 +Dim strName +Dim strPropName +Dim intAverageValue + +Dim ArgCount +Dim strArgMain(10) +Dim strArgSortDes(10) +Dim strArgDetailDes(10) +Dim strArgExample(10) + +Dim objWMIService, colWMI,colWMITemp, objWMI,objSWbemLocator + +strComputer="" +strClass = "" +strProp = "" +strInst = "" +warningValue = -1 +criticalValue = -1 +strUser = "" +strPass = "" +strDomain = "" + +intReturnTemp1 = 0 +'************************************************************************************************* +' Functions and Subs +'************************************************************************************************* + +'------------------------------------------------------------------------------------------------- +'Function Name: f_Error. +'Descripton: Display an error notice include : Error Number and Error Description. +'Input: No. +'Output: No. +'------------------------------------------------------------------------------------------------- + Function f_Error() + + nbrError = err.number + if (nbrError <> 0 ) then + Select Case nbrError + Case 462, -2147023174 + strExitMsg = "Timeout connecting to WMI on this host! Error Number: " & nbrError & " Description: " & err.description + Case -2147024891 + strExitMsg = "Authentication failure to remote host! Error Number: " & nbrError & " Description: " & err.description + Case -2147217392 + strExitMsg = "Error! Number: " & nbrError & " Description: Invalid Class" + Case Else + strExitMsg = "Error! Number: " & nbrError & " Description: " & err.description + End Select + wscript.echo strExitMsg + wscript.quit(intUnknown) + end if + + End Function + + +'------------------------------------------------------------------------------------------------- +'Function Name: f_Help. +'Descripton: Display help of command include : Description, Arguments, Examples +'Input: No. +'Output: No. +'------------------------------------------------------------------------------------------------- + Function f_Help() + + Dim str + str="Check Network IO. If your Local Machine has the same Administrator account and password as the Remote Machine then you don't have to use the two last parameters."&vbCrlF&vbCrlF + str=str&"cscript check_network_io.vbs -h hostname -prop properties -inst Names [-w warning_level -c critical_level] [-t thresoldpairs] [-user username -pass password [-domain domain]]"&vbCrlF + str=str&vbCrlF + str=str&"-h [--help] Help."&vbCrlF + str=str&"-h hostname Host name."&vbCrlF + str=str&"-inst name Name of network interface."&vbCrlF + str=str&"-prop properties Must be one or multiple of BytesReceivedPerSec, PacketsReceivedPerSec, BytesSentPerSec, PacketsSentPerSec."&vbCrlF + str=str&"-w warning_level Warning threshold by percentage."&vbCrlF + str=str&"-c critical_level Critical threshold by percentage."&vbCrlF + str=str&"-t thresold pairs Threshold pairs for each network interface. Note: each thresold pair separated by ':', warning value and critical separated by ',' character"&vbCrlF + str=str&"-user username Account Administrator on Remote Machine."&vbCrlF + str=str&"-pass password Password Account Administrator on Remote Machine."&vbCrlF + str=str&"-domain domain Domain Name of Remote Machine."&vbCrlF + str=str&vbCrlF + str=str&"Example: cscript check_network_io.vbs -h Ser1 -prop ""PacketsReceivedPerSec, PacketsSentPerSec"" -inst ""MS TCP Loopback interface"" -w 30 -c 70 [-user Ser1\Administrator -pass password -domain ITSP] " &vbCrlF + str=str&"Example: cscript check_network_io.vbs -h Ser1 -inst -prop ""BytesReceivedPerSec, PacketsReceivedPerSec"" -inst ""LAN1, WAN1"" -t ""700,900:60,80"" [-user Ser1\Administrator -pass password -domain ITSP] " &vbCrlF + wscript.echo str + + End Function +'------------------------------------------------------------------------------------------------- +'Function Name: f_GetAllArg. +'Descripton: Get all of arguments from command. +'Input: No. +'Output: No. +'------------------------------------------------------------------------------------------------- + Function f_GetAllArg() + + On Error Resume Next + + Dim i + + argcountcommand=WScript.Arguments.Count + + for i=0 to argcountcommand-1 + arg(i)=WScript.Arguments(i) + next + + End Function +'------------------------------------------------------------------------------------------------- +'Function Name: f_GetOneArg. +'Descripton: Get an argument from command. +'Input: Yes. +' strName: Name of argument +'Output: Value. +'------------------------------------------------------------------------------------------------- + Function f_GetOneArg(strName) + + On Error Resume Next + + Dim i + for i=0 to argcountcommand-1 + if (Ucase(arg(i))=Ucase(strName)) then + f_GetOneArg=arg(i+1) + Exit Function + end if + next + + End Function + +'------------------------------------------------------------------------------------------------- +'Function Name: f_GetInstance. +'Descripton: Get infomation at Local Host. +'Input: instance. +'Output: No. +'------------------------------------------------------------------------------------------------- + Function f_GetInstance() + + On Error Resume Next + + strResultTemp1 = "" + strResultTemp2 = "" + intResultTemp1 = 0 + strResultTemp = "" + intResultTemp = 0 + + ReDim strNameArray(Int(colWMI.count)) + ReDim counterValueArray(Int(colWMI.count)) + ReDim timerValueArray(Int(colWMI.count)) + strName = "" + strPropName = "" + counterValueTemp = 0 + timerValueTemp = 0 + timeBaseTemp = 0 + i, j = 0 + + For Each objWMITemp in colWMITemp + counterValueArray(i) = objWMITemp.Properties_(prop) + timerValueArray(i) = objWMITemp.Properties_("TimeStamp_PerfTime") + i = i + 1 + Next + + For Each objWMI in colWMI + strName = objWMI.Name + isValid=InStr(1,Ucase(strName),Ucase(instance),1) + if (isValid > 0) then + strPropName = objWMI.Properties_(prop).Name + counterValueTemp = objWMI.Properties_(prop) + timerValueTemp = objWMI.Properties_("TimeStamp_PerfTime") + timeBase = objWMI.Properties_("Frequency_PerfTime") + + if((timerValueTemp - timerValueArray(j)) = 0) then + intValue = 0 + f_Display() + else + intValue = Int((counterValueTemp - counterValueArray(j)) / ((timerValueTemp - timerValueArray(j)) / timeBase)) + f_display() + end if + strResultTemp1 = strResultTemp3 + strResultTemp2 = strResultTemp4 + intReturnTemp = intReturnTemp1 + Exit Function + end if + j = j + 1 + Next + + strResultTemp1 = "Unknown - " & instance & " no row return." + intReturnTemp = intUnknown + Exit Function + + End Function + +'------------------------------------------------------------------------------------------------- +'Function Name: f_GetPrefix. +'Descripton: Get Prefix. +'Input: No. +'Output: No. +'------------------------------------------------------------------------------------------------- + Function f_GetPrefix(intValue) + + On Error Resume Next + + strPrefix = "" + If(warningValue <> "" And criticalValue = "") Then + If (IsNumeric(warningValue)) Then + If (Int(intValue) < Int(warningValue)) Then + returnValue=0 + strPrefix= "OK - " + Else + returnValue=1 + strPrefix= "Warning - " + End If + Else + Wscript.Echo "Error! Arguments wrong, please verify -w parameter" + Wscript.Quit(intError) + Exit Function + End If + End If + If(warningValue = "" And criticalValue <> "") Then + If (IsNumeric(criticalValue)) Then + If (Int(intValue) < Int(criticalValue)) Then + returnValue=0 + strPrefix= "OK - " + Else + returnValue=2 + strPrefix= "Critical - " + End If + Else + Wscript.Echo "Error! Arguments wrong, please verify -c parameter" + Wscript.Quit(intError) + Exit Function + End If + End If + If (warningValue <> "" And criticalValue <> "") Then + If (IsNumeric(warningValue) And IsNumeric(criticalValue)) Then + if (Int(warningValue) < Int(criticalValue)) then + + if (Int(intValue) < Int(warningValue)) then + returnValue=0 + strPrefix= "OK - " + else + if (Int(intValue) < Int(criticalValue)) then + returnValue=1 + strPrefix= "Warning - " + else + returnValue=2 + strPrefix= "Critical - " + end if + end if + else + if (Int(intValue) > Int(warningValue)) then + returnValue=0 + strPrefix= "OK - " + else + if (Int(intValue) > Int(criticalValue)) then + returnValue=1 + strPrefix= "Warning - " + else + returnValue=2 + strPrefix= "Critical - " + end if + end if + end If + Else + Wscript.Echo "Error! Arguments wrong, please verify -w -c parameter" + Wscript.Quit(intError) + Exit Function + End If + End If + + End Function + +'------------------------------------------------------------------------------------------------- +'Function Name: f_GetPrefixWithRange. +'Descripton: Get Prefix. +'Input: No. +'Output: No. +'------------------------------------------------------------------------------------------------- + Function f_GetPrefixWithRange(intValue) + + On Error Resume Next + lWarningValue = "" + uWarningValue = "" + lCriticalValue= "" + uCriticalValue= "" + warningReturn = 0 + criticalReturn = 0 + If(warningValue <> "") Then + f_GetWarningValueFromRange(warningValue) + End If + If(criticalValue <> "") Then + f_GetCriticalValueFromRange(criticalValue) + End If + strPrefix = "" + 'verify warning + If((lWarningValue <> "") And (uWarningValue <> "")) Then + If(Int(lWarningValue) <= Int(uWarningValue)) Then + If((Int(lWarningValue) >= Int(intValue)) Or (Int(intValue) >= Int(uWarningValue))) Then + warningReturn=1 + End If + Else + If((Int(intValue) >= Int(uWarningValue) ) And (Int(intValue) <= Int(lWarningValue))) Then + warningReturn=1 + End If + End If + End If + If((lWarningValue <> "") And (uWarningValue = "")) Then + If(Int(intValue) <= Int(lWarningValue)) Then + warningReturn=1 + End If + End If + If((lWarningValue = "") And (uWarningValue <> "")) Then + If(Int(intValue) >= Int(uWarningValue)) Then + warningReturn=1 + End If + End If + + 'verify critical + If((lCriticalValue <> "") And (uCriticalValue <> "")) Then + If(Int(lCriticalValue) <= Int(uCriticalValue)) Then + If((Int(lCriticalValue) >= Int(intValue)) Or (Int(intValue) >= Int(uCriticalValue))) Then + criticalReturn=2 + End If + Else + If((Int(intValue) >= Int(uCriticalValue) ) And (Int(intValue) <= Int(lCriticalValue))) Then + criticalReturn=2 + End If + End If + End If + If((lCriticalValue <> "") And (uCriticalValue = "")) Then + If(Int(intValue) <= Int(lCriticalValue)) Then + criticalReturn=2 + End If + End If + If((lCriticalValue = "") And (uCriticalValue <> "")) Then + If(Int(intValue) >= Int(uCriticalValue)) Then + criticalReturn=2 + End If + End If + + 'return result + If(criticalReturn = 2) Then + returnValue=2 + strPrefix= "Critical - " + Else + If(warningReturn = 1) Then + returnValue=1 + strPrefix= "Warning - " + Else + returnValue=0 + strPrefix= "Ok - " + End If + End If + + End Function + +'------------------------------------------------------------------------------------------------- +'Function Name: f_GetWarningValueFromRange(). +'Descripton: Get perform value at Local Host. +'Input: warningValueRange. +'Output: No. +'------------------------------------------------------------------------------------------------- + Function f_GetWarningValueFromRange(warningValue) + + On Error Resume Next + lWarningValue = "" + uWarningValue = "" + temp1 = 0 + temp1 = InStr(1, warningValue, ":") + if(temp1 > 0) then + lWarningTemp = Mid(warningValue, 1, temp1 -1) + uWarningTemp = Mid(warningValue, temp1 +1, len(warningValue) - temp1) + if(IsNumeric(lWarningTemp) or IsNumeric(uWarningTemp)) then + lWarningValue = lWarningTemp + uWarningValue = uWarningTemp + else + Wscript.Echo "Error! Arguments wrong, please verify -w parameter" + Wscript.Quit(intError) + Exit Function + end if + else + Wscript.Echo "Error! Arguments wrong, please verify -w parameter" + Wscript.Quit(intError) + Exit Function + end if + + End Function + +'------------------------------------------------------------------------------------------------- +'Function Name: f_GetCriticalValueFromRange(). +'Descripton: Get perform value at Local Host. +'Input: warningValueRange. +'Output: No. +'------------------------------------------------------------------------------------------------- + Function f_GetCriticalValueFromRange(criticalValue) + + On Error Resume Next + lCriticalValue = "" + uCriticalValue = "" + temp1 = 0 + temp1 = InStr(1, criticalValue, ":") + if(temp1 > 0) then + lCriticalTemp = Mid(criticalValue, 1, temp1 -1) + uCriticalTemp = Mid(criticalValue, temp1 +1, len(criticalValue) - temp1) + if(IsNumeric(lCriticalTemp) or IsNumeric(uCriticalTemp)) then + lCriticalValue = lCriticalTemp + uCriticalValue = uCriticalTemp + else + Wscript.Echo "Error! Arguments wrong, please verify -c parameter" + Wscript.Quit(intError) + Exit Function + end if + else + WScript.Echo "Error! Arguments wrong, please verify -c parameter" + Wscript.Quit(intError) + Exit Function + end if + + End Function + +'------------------------------------------------------------------------------------------------- +'Function Name: f_Display. +'Descripton: Get Prefix. +'Input: No. +'Output: No. +'------------------------------------------------------------------------------------------------- + Function f_Display() + + On Error Resume Next + + strDisplay1 = "" + strDisplay2 = "" + strResultTemp3 = "" + strResultTemp4 = "" + 'strName = instance + 'strPropName = "Number of processes with " + 'intValue = count + Dim strDSName + strDSName = f_FormatDSName(strName) + if((warningValue <> "") Or (criticalValue <> "")) then + strDisplay1 = strName & " '" & strPropName & "'" & " = " & intValue & "; " + strDisplay2 = "'" & strDSName & "'" & "=" & intValue & ";" & warningValue & ";" & criticalValue & ";; " + If(InStr(1, warningValue, ":") > 0 Or InStr(1, criticalValue, ":") > 0) Then + f_GetPrefixWithRange(intValue) + Else + f_GetPrefix(intValue) + End If + strResultTemp3 = strResultTemp3 & strPrefix & strDisplay1 + strResultTemp4 = strResultTemp4 & strDisplay2 + if( intReturnTemp1 < returnValue) then + intReturnTemp1 = returnValue + end if + else + strResultTemp3 = strResultTemp3 & "OK - " & strName & " '" & strPropName & "'" & " = " & intValue & "; " + strResultTemp4 = "" + end if + + End Function + +'------------------------------------------------------------------------------------------------- +'Function Name: f_FormatDSName. +'Descripton: Get infomation at Local Host. +'Input: strName. +'Output: No. +'------------------------------------------------------------------------------------------------- + Function f_FormatDSName(strName) + + On Error Resume Next + + first = 1 + position1 = 0 + + position1 = InStr(first, strName, "=") + Dim proc_name + proc_name = "" + If(position1 > 0) Then + proc_name = Mid(strName,position1+1,(Len(strName)-position1)) + proc_name = Replace(proc_name,".","_") + proc_name = Replace(proc_name,"-","_") + proc_name = Mid(proc_name,1, 19) + + + Else + proc_name = Mid(strName,position1+1,(Len(strName)-position1)) + proc_name = Replace(proc_name,".","_") + proc_name = Replace(proc_name,"-","_") + proc_name = Mid(proc_name,1, 19) + + End If + f_FormatDSName = proc_name + Exit Function + End Function + +'------------------------------------------------------------------------------------------------- +'Function Name: f_ExecQuery. +'Descripton: Format data the same as output. +'Input: service. +'Output: No. +'------------------------------------------------------------------------------------------------- + Function f_ExecQuery() + + On Error Resume Next + + strQuery = "Select BytesReceivedPerSec, PacketsReceivedPerSec, BytesSentPerSec, PacketsSentPerSec, TimeStamp_PerfTime, Frequency_PerfTime" _ + & " from " & strClass + Set colWMITemp = objWMIService.ExecQuery(strQuery) + Wscript.Sleep(1000) + Set colWMI = objWMIService.ExecQuery(strQuery) + + count = -1 + count = colWMI.count + if(count = -1) then + Wscript.Echo "Unknown - No data received from WMI;" + Wscript.Quit(intUnknown) + end if + + End Function + +'------------------------------------------------------------------------------------------------- +'Function Name: f_GetInformation. +'Descripton: Get information data. +'Input: No. +'Output: Values. +'------------------------------------------------------------------------------------------------- + Function f_GetInformation() + + On Error Resume Next + + strResult = "" + strResult1 = "" + strResult2 = "" + intReturn = 0 + + if(thresoldArraySize > 0 and (thresoldArraySize <> instanceArraySize * propArraySize)) then + Wscript.Echo "Error! Arguments wrong, number of instances and thresolds do not match." + Wscript.Quit(intError) + Exit Function + end if + + if(thresoldArraySize > 0 and (thresoldArraySize = (instanceArraySize * propArraySize))) then + for i = 0 to instanceArraySize -1 + instance = instanceArray(i) + for j = 0 to propArraySize -1 + prop = propArray(j) + t = ((i*propArraySize) + j) + warningValue = warningArray(t) + criticalValue = criticalArray(t) + f_GetInstance() + strResult1 = strResult1 & strResultTemp1 + strResult2 = strResult2 & strResultTemp2 + if intReturn < intReturnTemp then + intReturn = intReturnTemp + end if + next + Next + Else + If(instanceArraySize > 0 and (warningArraySize > 1 Or criticalArraySize > 1)) Then + for i = 0 to instanceArraySize -1 + instance = instanceArray(i) + for j = 0 to propArraySize -1 + prop = propArray(j) + t = ((i*propArraySize) + j) + warningValue = warningArray(t) + criticalValue = criticalArray(t) + f_GetInstance() + strResult1 = strResult1 & strResultTemp1 + strResult2 = strResult2 & strResultTemp2 + if intReturn < intReturnTemp then + intReturn = intReturnTemp + end if + Next + + Next + Else + for i = 0 to instanceArraySize -1 + instance = instanceArray(i) + for j = 0 to propArraySize -1 + prop = propArray(j) + f_GetInstance() + strResult1 = strResult1 & strResultTemp1 + strResult2 = strResult2 & strResultTemp2 + if intReturn < intReturnTemp then + intReturn = intReturnTemp + end if + next + Next + End If + End If + if(strResult2 = "") then + strResult = strResult1 + else + strResult = strResult1 & "|" & strResult2 + end if + Wscript.Echo strResult + Wscript.Quit(intReturn) + + End Function + +'------------------------------------------------------------------------------------------------- +'Function Name: f_GetInstances. +'Descripton: Get Prefix. +'Input: No. +'Output: No. +'------------------------------------------------------------------------------------------------- + Function f_GetInstances() + + On Error Resume Next + + first = 1 + position = 0 + instanceArraySize = 0 + + position = InStr(first, strInst, ",") + if (position = 0) then + instanceTemp = strInst + InstanceArraySize = 1 + ReDim instanceArray(instanceArraySize) + instanceArray(0) = instanceTemp + + else + do while (position > 0) + instanceTemp = Mid(strInst,first,position - first) + instanceArraySize = instanceArraySize + 1 + ReDim Preserve instanceArray(instanceArraySize) + instanceArray(instanceArraySize -1) = Trim(instanceTemp) + first = position + 1 + position = InStr(first, strInst, ",") + loop + instanceTemp = Mid(strInst,first,len(strInst)) + instanceArraySize = instanceArraySize + 1 + ReDim Preserve instanceArray(instanceArraySize) + instanceArray(instanceArraySize -1) = Trim(instanceTemp) + end if + + End Function + +'------------------------------------------------------------------------------------------------- +'Function Name: f_GetWarningCriticalValues. +'Descripton: Get Prefix. +'Input: No. +'Output: No. +'------------------------------------------------------------------------------------------------- + Function f_GetWarningCriticalValues() + + On Error Resume Next + + position1 = 0 + position2 = 0 + position3 = 0 + position4 = 0 + temp1 = 1 + temp2 = 1 + warningArraySize = 0 + criticalArraySize = 0 + + 'get warning + position2 = InStr(temp1, warningValueString, ",") + If(position2 = 0) then + position2 = Len(warningValueString)+1 + end if + + If(position2 > position1) then + do while (position2 > position1) + warningPair = Mid(warningValueString, position1 + 1, (position2 - position1 -1)) + warningArraySize = warningArraySize + 1 + ReDim Preserve warningArray(warningArraySize) + warningArray(warningArraySize -1) = Trim(warningPair) + temp1 = position2 + 1 + position1 = position2 + position2 = InStr(temp1, warningValueString, ",") + If(position2 = 0) then + position2 = Len(warningValueString)+1 + End If + loop + end If + propInstanceArraySize = Int(instanceArraySize * propArraySize) + If(Int(warningArraySize) < Int(propInstanceArraySize)) Then + ReDim Preserve warningArray(propInstanceArraySize) + For i = 0 To (propInstanceArraySize - warningArraySize - 1) + warningArray(warningArraySize +i) = warningArray(warningArraySize-1) + Next + warningArraySize = propInstanceArraySize + End If + 'get critical + position4 = InStr(temp2, criticalValueString, ",") + If(position4 = 0) then + position4 = Len(criticalValueString)+1 + end if + + If(position4 > position3) then + do while (position4 > position3) + criticalPair = Mid(criticalValueString, position3 + 1, (position4 - position3 -1)) + criticalArraySize = criticalArraySize + 1 + ReDim Preserve criticalArray(criticalArraySize) + criticalArray(criticalArraySize -1) = Trim(criticalPair) + temp2 = position4 + 1 + position3 = position4 + position4 = InStr(temp2, criticalValueString, ",") + If(position4 = 0) then + position4 = Len(criticalValueString)+1 + End If + loop + End If + If(Int(criticalArraySize) < Int(propInstanceArraySize)) Then + ReDim Preserve criticalArray(propInstanceArraySize) + For i = 0 To (propInstanceArraySize - criticalArraySize - 1) + criticalArray(criticalArraySize +i) = criticalArray(criticalArraySize-1) + Next + criticalArraySize = propInstanceArraySize + End If + + End Function + +'------------------------------------------------------------------------------------------------- +'Function Name: f_GetProps. +'Descripton: Get Prefix. +'Input: No. +'Output: No. +'------------------------------------------------------------------------------------------------- + Function f_GetProps() + + On Error Resume Next + + first = 1 + position = 0 + propArraySize = 0 + + position = InStr(first, strProp, ",") + if (position = 0) then + propTemp = strProp + propArraySize = 1 + ReDim propArray(propArraySize) + propArray(0) = propTemp + + else + do while (position > 0) + propTemp = Mid(strProp,first,position - first) + propArraySize = propArraySize + 1 + ReDim Preserve propArray(propArraySize) + propArray(propArraySize -1) = Trim(propTemp) + first = position + 1 + position = InStr(first, strProp, ",") + loop + propTemp = Mid(strProp,first,len(strProp)) + propArraySize = propArraySize + 1 + ReDim Preserve propArray(propArraySize) + propArray(propArraySize -1) = Trim(propTemp) + end if + + for i = 0 to propArraySize -1 + propTemp = propArray(i) + if ((StrComp(propTemp, "BytesReceivedPerSec") = -1) and (StrComp(propTemp, "PacketsReceivedPerSec") = -1) and _ + (StrComp(propTemp, "BytesSentPerSec") = -1) and (StrComp(propTemp, "PacketsSentPerSec") = -1) ) then + Wscript.Echo "Error! Arguments wrong, " & propTemp & " is not supported." + Wscript.Quit(intError) + end if + Next + + End Function + +'------------------------------------------------------------------------------------------------- +'Function Name: f_GetThresolds. +'Descripton: Get Prefix. +'Input: No. +'Output: No. +'------------------------------------------------------------------------------------------------- + Function f_GetThresolds() + + On Error Resume Next + + first = 1 + position1 = 0 + position2 = 0 + temp = 1 + temp1 = 0 + thresoldArraySize = 0 + + position2 = InStr(temp, strThresolds, ":") + if(position2 = 0) then + position2 = Len(strThresolds)+1 + end if + + + if(position2 > position1) then + + do while (position2 > position1) + thresoldPair = Mid(strThresolds, position1 + 1, (position2 - position1 -1)) + temp1 = InStr(1, thresoldPair, ",") + if(temp1 > 0) then + warningTemp = Mid(thresoldPair, 1, temp1 -1) + criticalTemp = Mid(thresoldPair, temp1 +1, len(thresoldPair) - temp1) + if(IsNumeric(warningTemp) or IsNumeric(criticalTemp)) then + thresoldArraySize = thresoldArraySize + 1 + ReDim Preserve warningArray(thresoldArraySize) + ReDim Preserve criticalArray(thresoldArraySize) + warningArray(thresoldArraySize -1) = Trim(warningTemp) + criticalArray(thresoldArraySize -1) = Trim(criticalTemp) + else + Wscript.Echo "Error! Arguments wrong, please verify -t parameter" + Wscript.Quit(intError) + Exit Function + end if + else + Wscript.Echo "Error! Arguments wrong, please verify -t parameter" + Wscript.Quit(intError) + Exit Function + end if + temp = position2 + 1 + position1 = position2 + position2 = InStr(temp, strThresolds, ":") + if(position2 = 0) then + position2 = Len(strThresolds)+1 + end if + loop + end if + End Function + +'------------------------------------------------------------------------------------------------- +'Function Name: f_LocalPerfValue. +'Descripton: Get perform value at Local Host. +'Input: No. +'Output: No. +'------------------------------------------------------------------------------------------------- + Function f_LocalPerfValue() + + On Error Resume Next + + Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\" & strNameSpace) + f_Error() + 'Set colInstances = GetObject("winmgmts:{impersonationLevel=impersonate}\\" & strComputer & "\" & strNameSpace).InstancesOf(strClass) + 'For Each objInstance in colInstances + 'Next + 'f_Error() + + f_ExecQuery() + 'f_GetInstances() + f_GetInformation() + + End Function + +'------------------------------------------------------------------------------------------------- +'Function Name: f_RemotePerfValue. +'Descripton: Get perform values at Remote Host. +'Input: No. +'Output: Values. +'------------------------------------------------------------------------------------------------- + Function f_RemotePerfValue() + + On Error Resume Next + + Set objSWbemLocator = CreateObject("WbemScripting.SWbemLocator") + if (strDomain = "") then + Set objWMIService = objSWbemLocator.ConnectServer _ + (strComputer, strNameSpace , strUser, strPass ) + f_Error() + + 'Set colInstances = objSWbemLocator.ConnectServer(strComputer, strNamespace , strUser, strPass).InstancesOf(strClass) + 'For Each objInstance in colInstances + 'Next + 'f_Error() + else + Set objWMIService = objSWbemLocator.ConnectServer _ + (strComputer, strNameSpace , strUser, strPass,"MS_409","ntlmdomain:" + strDomain ) + f_Error() + + 'Set colInstances = objSWbemLocator.ConnectServer(strComputer, strNamespace , strUser, strPass,"MS_409","ntlmdomain:" & strDomain ).InstancesOf(strClass) + 'For Each objInstance in colInstances + 'Next + 'f_Error() + end if + objWMIService.Security_.ImpersonationLevel = 3 + f_Error() + + f_ExecQuery() + 'f_GetInstances() + f_GetInformation() + + End Function + +'************************************************************************************************* +' Main Function +'************************************************************************************************* + + '///////////////////// + + strCommandName="check_network_io.vbs" + strDescription="Enumerate the needed windows host information." + + '///////////////////// + + strNameSpace = "root\cimv2" + strClass = "Win32_PerfRawData_Tcpip_NetworkInterface" + + f_GetAllArg() + tempCount = argcountcommand/2 + f_Error() + + if ((UCase(arg(0))="-H") Or (UCase(arg(0))="--HELP")) and (argcountcommand=1) then + f_help() + else + if( ((argcountcommand Mod 2) = 0) and (2 < tempCount < 8)) then + strComputer = f_GetOneArg("-h") + strProp = f_GetOneArg("-prop") + f_GetProps() + strInst = f_GetOneArg("-inst") + f_GetInstances() + warningValue = f_GetOneArg("-w") + warningValueString = f_GetOneArg("-w") + criticalValue = f_GetOneArg("-c") + criticalValueString = f_GetOneArg("-c") + If((warningValueString <> "") Or (criticalValueString <> "")) Then + f_GetWarningCriticalValues() + End if + strThresolds = f_GetOneArg("-t") + + strUser = f_GetOneArg("-user") + strPass = f_GetOneArg("-pass") + strDomain = f_GetOneArg("-domain") + if((strComputer = "") or (strInst = "") or (strProp = "")) then + Wscript.Echo "Error! Arguments wrong, require verify -h -prop -inst parameters" + Wscript.Quit(intError) + else + + Select Case tempCount + Case 3: + f_LocalPerfValue() + Case 4: + if(strThresolds <> "") then + f_GetThresolds() + f_LocalPerfValue() + + else + Wscript.Echo "Error! Arguments wrong, please verify -t parameters" + Wscript.Quit(intError) + end if + Case 5: + if ((warningValue <> "") and (criticalValue <> "")) then + f_LocalPerfValue() + end if + if ((strUser <> "") and (strPass <> "")) then + f_RemotePerfValue() + else + Wscript.Echo "Error! Arguments wrong, please verify -user -pass or -w -c parameters" + Wscript.Quit(intError) + end if + Case 6: + if ((strUser <> "") and (strPass <> "") and (strThresolds <> "")) then + f_GetThresolds() + f_RemotePerfValue() + else + Wscript.Echo "Error! Arguments wrong, please verify -user -pass or -t parameters" + Wscript.Quit(intError) + end if + Case 7: + if ((strUser <> "") and (strPass <> "") and (warningValue <> "") and (criticalValue <> "")) then + f_RemotePerfValue() + else + Wscript.Echo "Error! Arguments wrong for remote check, please verify -w -c -user -pass parameters" + Wscript.Quit(intError) + end if + Case 8: + if ((strUser <> "") and (strPass <> "") and (warningValue <> "") and (criticalValue <> "") and (strDomain <> "")) then + f_RemotePerfValue() + else + Wscript.Echo "Error! Arguments wrong for remote check, please verify -w -c -user -pass -domain parameters" + Wscript.Quit(intError) + end if + Case Else + Wscript.Echo "Error! Arguments wrong, please type -h for Help" + Wscript.Quit(intError) + End Select + + end if + else + Wscript.Echo "Error! Arguments wrong, please type -h for Help" + Wscript.Quit(intError) + end if + + end if \ No newline at end of file diff --git a/nsclient/trunk/scripts/wmi/check_proc_num.vbs b/nsclient/trunk/scripts/wmi/check_proc_num.vbs new file mode 100644 index 0000000..fb9190f --- /dev/null +++ b/nsclient/trunk/scripts/wmi/check_proc_num.vbs @@ -0,0 +1,841 @@ +' Copyright 2007 GroundWork Open Source Inc. +' +' This program is free software; you can redistribute it and/or +' modify it under the terms of the GNU General Public License +' as published by the Free Software Foundation; version 2 +' of the License. +' +' This program is distributed in the hope that it will be useful, +' but WITHOUT ANY WARRANTY; without even the implied warranty of +' MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +' GNU General Public License for more details. +' +' +' Author Dr. Dave Blunt at GroundWork Open Source Inc. (dblunt@groundworkopensource.com) + +'************************************************************************************************* +' Public Variable +'************************************************************************************************* +Const intOK = 0 +Const intWarning = 1 +Const intCritical = 2 +Const intError = 3 +Const intUnknown = 3 + +Dim argcountcommand +Dim arg(20) +Dim strComputer +Dim strClass +Dim strProp +Dim strInst +Dim warningValue +Dim warningValueString +Dim criticalValue +Dim criticalValueString +Dim strUser +Dim strPass +Dim strDomain +Dim strNameSpace +Dim strDescription +Dim strCommandName +Dim strResultTemp +Dim strResult +Dim strResult1 +Dim strResult2 +Dim intReturnTemp +Dim intReturn +Dim strResultTemp1 +Dim strResultTemp2 +Dim strResultTemp3 +Dim strResultTemp4 +Dim intReturnTemp1 +Dim strPrefix +Dim intValue +Dim returnValue +Dim instance +Dim instanceArray() +Dim instanceArraySize +Dim warningArraySize +Dim criticalArraySize +Dim warningArray() +Dim criticalArray() +Dim lWarningValue +Dim uWarningValue +Dim lCriticalValue +Dim uCriticalValue + +Dim ArgCount +Dim strArgMain(10) +Dim strArgSortDes(10) +Dim strArgDetailDes(10) +Dim strArgExample(10) + +Dim objWMIService, colWMI,objWMI,objSWbemLocator + +strComputer="" +strClass = "" +strProp = "" +strInst = "" +warningValue = -1 +criticalValue = -1 +strUser = "" +strPass = "" +strDomain = "" + +intReturnTemp1 = 0 + +'************************************************************************************************* +' Functions and Subs +'************************************************************************************************* + +'------------------------------------------------------------------------------------------------- +'Function Name: f_Error. +'Descripton: Display an error notice include : Error Number and Error Description. +'Input: No. +'Output: No. +'------------------------------------------------------------------------------------------------- + Function f_Error() + + nbrError = err.number + if (nbrError <> 0 ) then + Select Case nbrError + Case 462, -2147023174 + strExitMsg = "Timeout connecting to WMI on this host! Error Number: " & nbrError & " Description: " & err.description + Case -2147024891 + strExitMsg = "Authentication failure to remote host! Error Number: " & nbrError & " Description: " & err.description + Case -2147217392 + strExitMsg = "Error! Number: " & nbrError & " Description: Invalid Class" + Case Else + strExitMsg = "Error! Number: " & nbrError & " Description: " & err.description + End Select + wscript.echo strExitMsg + wscript.quit(intUnknown) + end if + + End Function + + +'------------------------------------------------------------------------------------------------- +'Function Name: f_Help. +'Descripton: Display help of command include : Description, Arguments, Examples +'Input: No. +'Output: No. +'------------------------------------------------------------------------------------------------- + Function f_Help() + + Dim str + str="Check Number of Processes. If your Local Machine has the same Administrator account and password as the Remote Machine then you don't have to use the two last parameters."&vbCrlF&vbCrlF + str=str&"cscript check_proc_num.vbs -h hostname -inst instancename [-w warning_level -c critical_level] [-user username -pass password [-domain domain]]"&vbCrlF + str=str&vbCrlF + str=str&"-h [--help] Help."&vbCrlF + str=str&"-h hostname Host name."&vbCrlF + str=str&"-inst instance Needed Instance."&vbCrlF + str=str&"-w warning_level Warning threshold."&vbCrlF + str=str&"-c critical_level Critical threshold."&vbCrlF + str=str&"-user username Account Administrator on Remote Machine."&vbCrlF + str=str&"-pass password Password Account Administrator on Remote Machine."&vbCrlF + str=str&"-domain domain Domain Name of Remote Machine."&vbCrlF + str=str&vbCrlF + str=str&"Example: cscript check_proc_num.vbs -h Ser1 -inst ""cmd.exe"" -w 5 -c 10 [-user Ser1\Administrator -pass password -domain ITSP] " + str=str&"Example: cscript check_proc_num.vbs -h Ser1 -inst ""cmd.exe,firefox.exe"" -w 5 -c 10 [-user Ser1\Administrator -pass password -domain ITSP] " + wscript.echo str + + End Function +'------------------------------------------------------------------------------------------------- +'Function Name: f_GetAllArg. +'Descripton: Get all of arguments from command. +'Input: No. +'Output: No. +'------------------------------------------------------------------------------------------------- + Function f_GetAllArg() + + On Error Resume Next + + Dim i + + argcountcommand=WScript.Arguments.Count + + for i=0 to argcountcommand-1 + arg(i)=WScript.Arguments(i) + next + + End Function +'------------------------------------------------------------------------------------------------- +'Function Name: f_GetOneArg. +'Descripton: Get an argument from command. +'Input: Yes. +' strName: Name of argument +'Output: Value. +'------------------------------------------------------------------------------------------------- + Function f_GetOneArg(strName) + + On Error Resume Next + + Dim i + for i=0 to argcountcommand-1 + if (Ucase(arg(i))=Ucase(strName)) then + f_GetOneArg=arg(i+1) + Exit Function + end if + next + + End Function + +'------------------------------------------------------------------------------------------------- +'Function Name: f_GetInstance. +'Descripton: Get infomation at Local Host. +'Input: instance. +'Output: No. +'------------------------------------------------------------------------------------------------- + Function f_GetInstance(instance) + + On Error Resume Next + + strResultTemp = "" + strResultTemp1 = "" + strResultTemp2 = "" + intResultTemp = 0 + strInstanceTemp1 = "" + strInstanceTemp2 = "" + intInstanceTemp1 = 0 + intInstanceTemp2 = 0 + + 'Depend on strInfo parameters to get the result value + + intInstanceTemp1 = InStr(1,instance,"=") + strInstanceTemp1 = Mid(instance,1,intInstanceTemp1-1) + intInstanceTemp2 = Len(instance) + strInstanceTemp2 = Mid(instance,intInstanceTemp1+1,intInstanceTemp2-intInstanceTemp1) + instance=strInstanceTemp1 & "='" & strInstanceTemp2 & "'" + + strQuery = "Select " & strProp & " from " & strClass & " where " & instance + + Set colWMI = objWMIService.ExecQuery(strQuery) + + count = -1 + count = colWMI.count + if(count = -1) then + Wscript.Echo "Unknown - No data received from WMI;" + Wscript.Quit(intUnknown) + else + if(colWMI.count > 0) then + f_FormatData(colWMI.count) + + strResultTemp1 = strResultTemp1 & strResultTemp3 + strResultTemp2 = strResultTemp2 & strResultTemp4 + intReturnTemp = intReturnTemp1 + Exit Function + else + f_FormatData(0) + + strResultTemp1 = strResultTemp1 & strResultTemp3 + strResultTemp2 = strResultTemp2 & strResultTemp4 + intReturnTemp = intReturnTemp1 + Exit Function + end if + end if + End Function + +'------------------------------------------------------------------------------------------------- +'Function Name: f_GetPrefix. +'Descripton: Get Prefix. +'Input: No. +'Output: No. +'------------------------------------------------------------------------------------------------- + Function f_GetPrefix(intValue) + + On Error Resume Next + + strPrefix = "" + If(warningValue <> "" And criticalValue = "") Then + If (IsNumeric(warningValue)) Then + If (Int(intValue) < Int(warningValue)) Then + returnValue=0 + strPrefix= "OK - " + Else + returnValue=1 + strPrefix= "Warning - " + End If + Else + Wscript.Echo "Error! Arguments wrong, please verify -w parameter" + Wscript.Quit(intError) + Exit Function + End If + End If + If(warningValue = "" And criticalValue <> "") Then + If (IsNumeric(criticalValue)) Then + If (Int(intValue) < Int(criticalValue)) Then + returnValue=0 + strPrefix= "OK - " + Else + returnValue=2 + strPrefix= "Critical - " + End If + Else + Wscript.Echo "Error! Arguments wrong, please verify -c parameter" + Wscript.Quit(intError) + Exit Function + End If + End If + If (warningValue <> "" And criticalValue <> "") Then + If (IsNumeric(warningValue) And IsNumeric(criticalValue)) Then + if (Int(warningValue) < Int(criticalValue)) then + + if (Int(intValue) < Int(warningValue)) then + returnValue=0 + strPrefix= "OK - " + else + if (Int(intValue) < Int(criticalValue)) then + returnValue=1 + strPrefix= "Warning - " + else + returnValue=2 + strPrefix= "Critical - " + end if + end if + else + if (Int(intValue) > Int(warningValue)) then + returnValue=0 + strPrefix= "OK - " + else + if (Int(intValue) > Int(criticalValue)) then + returnValue=1 + strPrefix= "Warning - " + else + returnValue=2 + strPrefix= "Critical - " + end if + end if + end If + Else + Wscript.Echo "Error! Arguments wrong, please verify -w -c parameter" + Wscript.Quit(intError) + Exit Function + End If + End If + + End Function + +'------------------------------------------------------------------------------------------------- +'Function Name: f_GetPrefixWithRange. +'Descripton: Get Prefix. +'Input: No. +'Output: No. +'------------------------------------------------------------------------------------------------- + Function f_GetPrefixWithRange(intValue) + + On Error Resume Next + lWarningValue = "" + uWarningValue = "" + lCriticalValue= "" + uCriticalValue= "" + warningReturn = 0 + criticalReturn = 0 + If(warningValue <> "") Then + f_GetWarningValueFromRange(warningValue) + End If + If(criticalValue <> "") Then + f_GetCriticalValueFromRange(criticalValue) + End If + strPrefix = "" + 'verify warning + If((lWarningValue <> "") And (uWarningValue <> "")) Then + If(Int(lWarningValue) <= Int(uWarningValue)) Then + If((Int(lWarningValue) >= Int(intValue)) Or (Int(intValue) >= Int(uWarningValue))) Then + warningReturn=1 + End If + Else + If((Int(intValue) >= Int(uWarningValue) ) And (Int(intValue) <= Int(lWarningValue))) Then + warningReturn=1 + End If + End If + End If + If((lWarningValue <> "") And (uWarningValue = "")) Then + If(Int(intValue) <= Int(lWarningValue)) Then + warningReturn=1 + End If + End If + If((lWarningValue = "") And (uWarningValue <> "")) Then + If(Int(intValue) >= Int(uWarningValue)) Then + warningReturn=1 + End If + End If + + 'verify critical + If((lCriticalValue <> "") And (uCriticalValue <> "")) Then + If(Int(lCriticalValue) <= Int(uCriticalValue)) Then + If((Int(lCriticalValue) >= Int(intValue)) Or (Int(intValue) >= Int(uCriticalValue))) Then + criticalReturn=2 + End If + Else + If((Int(intValue) >= Int(uCriticalValue) ) And (Int(intValue) <= Int(lCriticalValue))) Then + criticalReturn=2 + End If + End If + End If + If((lCriticalValue <> "") And (uCriticalValue = "")) Then + If(Int(intValue) <= Int(lCriticalValue)) Then + criticalReturn=2 + End If + End If + If((lCriticalValue = "") And (uCriticalValue <> "")) Then + If(Int(intValue) >= Int(uCriticalValue)) Then + criticalReturn=2 + End If + End If + + 'return result + If(criticalReturn = 2) Then + returnValue=2 + strPrefix= "Critical - " + Else + If(warningReturn = 1) Then + returnValue=1 + strPrefix= "Warning - " + Else + returnValue=0 + strPrefix= "Ok - " + End If + End If + + End Function + +'------------------------------------------------------------------------------------------------- +'Function Name: f_GetWarningValueFromRange(). +'Descripton: Get perform value at Local Host. +'Input: warningValueRange. +'Output: No. +'------------------------------------------------------------------------------------------------- + Function f_GetWarningValueFromRange(warningValue) + + On Error Resume Next + lWarningValue = "" + uWarningValue = "" + temp1 = 0 + temp1 = InStr(1, warningValue, ":") + if(temp1 > 0) then + lWarningTemp = Mid(warningValue, 1, temp1 -1) + uWarningTemp = Mid(warningValue, temp1 +1, len(warningValue) - temp1) + if(IsNumeric(lWarningTemp) or IsNumeric(uWarningTemp)) then + lWarningValue = lWarningTemp + uWarningValue = uWarningTemp + else + Wscript.Echo "Error! Arguments wrong, please verify -w parameter" + Wscript.Quit(intError) + Exit Function + end if + else + Wscript.Echo "Error! Arguments wrong, please verify -w parameter" + Wscript.Quit(intError) + Exit Function + end if + + End Function + +'------------------------------------------------------------------------------------------------- +'Function Name: f_GetCriticalValueFromRange(). +'Descripton: Get perform value at Local Host. +'Input: warningValueRange. +'Output: No. +'------------------------------------------------------------------------------------------------- + Function f_GetCriticalValueFromRange(criticalValue) + + On Error Resume Next + lCriticalValue = "" + uCriticalValue = "" + temp1 = 0 + temp1 = InStr(1, criticalValue, ":") + if(temp1 > 0) then + lCriticalTemp = Mid(criticalValue, 1, temp1 -1) + uCriticalTemp = Mid(criticalValue, temp1 +1, len(criticalValue) - temp1) + if(IsNumeric(lCriticalTemp) or IsNumeric(uCriticalTemp)) then + lCriticalValue = lCriticalTemp + uCriticalValue = uCriticalTemp + else + Wscript.Echo "Error! Arguments wrong, please verify -c parameter" + Wscript.Quit(intError) + Exit Function + end if + else + WScript.Echo "Error! Arguments wrong, please verify -c parameter" + Wscript.Quit(intError) + Exit Function + end if + + End Function + +'------------------------------------------------------------------------------------------------- +'Function Name: f_FormatData. +'Descripton: Format data the same as output. +'Input: service. +'Output: No. +'------------------------------------------------------------------------------------------------- + Function f_FormatData(count) + + On Error Resume Next + + strDisplay1 = "" + strDisplay2 = "" + strResultTemp3 = "" + strResultTemp4 = "" + strName = instance + strPropName = "Number of processes with " + intValue = count + Dim strDSName + strDSName = f_FormatDSName(strName) + if((warningValue <> "") Or (criticalValue <> "")) then + strDisplay1 = strPropName & strName & " = " & intValue & "; " + strDisplay2 = "'" & strDSName & "'" & "=" & intValue & ";" & warningValue & ";" & criticalValue & ";; " + If(InStr(1, warningValue, ":") > 0 Or InStr(1, criticalValue, ":") > 0) Then + f_GetPrefixWithRange(intValue) + Else + f_GetPrefix(intValue) + End If + strResultTemp3 = strResultTemp3 & strPrefix & strDisplay1 + strResultTemp4 = strResultTemp4 & strDisplay2 + if( intReturnTemp1 < returnValue) then + intReturnTemp1 = returnValue + end if + else + strResultTemp3 = strResultTemp3 & "OK - " & strPropName & strName & " = " & intValue & "; " + strResultTemp4 = "" + end if + + End Function + +'------------------------------------------------------------------------------------------------- +'Function Name: f_FormatDSName. +'Descripton: Get infomation at Local Host. +'Input: strName. +'Output: No. +'------------------------------------------------------------------------------------------------- + Function f_FormatDSName(strName) + + On Error Resume Next + + first = 1 + position1 = 0 + + position1 = InStr(first, strName, "=") + Dim proc_name + proc_name = "" + If(position1 > 0) Then + proc_name = Mid(strName,position1+1,(Len(strName)-position1)) + proc_name = Replace(proc_name,".","_") + proc_name = Replace(proc_name,"-","_") + proc_name = Mid(proc_name,1, 19) + + + Else + proc_name = Mid(strName,position1+1,(Len(strName)-position1)) + proc_name = Replace(proc_name,".","_") + proc_name = Replace(proc_name,"-","_") + proc_name = Mid(proc_name,1, 19) + + End If + f_FormatDSName = proc_name + Exit Function + End Function + +'------------------------------------------------------------------------------------------------- +'Function Name: f_GetInformation. +'Descripton: Get information data. +'Input: No. +'Output: Values. +'------------------------------------------------------------------------------------------------- + Function f_GetInformation() + + On Error Resume Next + + strResult = "" + strResult1 = "" + strResult2 = "" + intReturn = 0 + + If(instanceArraySize > 0 and (warningArraySize > 1 Or criticalArraySize > 1)) Then + for i = 0 to instanceArraySize -1 + instance = instanceArray(i) + warningValue = warningArray(i) + criticalValue = criticalArray(i) + f_GetInstance(instance) + strResult1 = strResult1 & strResultTemp1 + strResult2 = strResult2 & strResultTemp2 + if intReturn < intReturnTemp then + intReturn = intReturnTemp + end if + Next + Else + for i = 0 to instanceArraySize -1 + instance = instanceArray(i) + f_GetInstance(instance) + strResult1 = strResult1 & strResultTemp1 + strResult2 = strResult2 & strResultTemp2 + if intReturn < intReturnTemp then + intReturn = intReturnTemp + end if + Next + end if + if(strResult2 = "") then + strResult = strResult1 + else + strResult = strResult1 & "|" & strResult2 + end if + Wscript.Echo strResult + Wscript.Quit(intReturn) + + End Function + +'------------------------------------------------------------------------------------------------- +'Function Name: f_GetInstances. +'Descripton: Get Prefix. +'Input: No. +'Output: No. +'------------------------------------------------------------------------------------------------- + Function f_GetInstances() + + On Error Resume Next + + first = 1 + position = 0 + instanceArraySize = 0 + + position = InStr(first, strInst, ",") + if (position = 0) then + instanceTemp = strInst + InstanceArraySize = 1 + ReDim instanceArray(instanceArraySize) + instanceArray(0) = instanceTemp + + else + do while (position > 0) + instanceTemp = Mid(strInst,first,position - first) + instanceArraySize = instanceArraySize + 1 + ReDim Preserve instanceArray(instanceArraySize) + instanceArray(instanceArraySize -1) = Trim(instanceTemp) + first = position + 1 + position = InStr(first, strInst, ",") + loop + instanceTemp = Mid(strInst,first,len(strInst)) + instanceArraySize = instanceArraySize + 1 + ReDim Preserve instanceArray(instanceArraySize) + instanceArray(instanceArraySize -1) = Trim(instanceTemp) + end if + + End Function + +'------------------------------------------------------------------------------------------------- +'Function Name: f_GetWarningCriticalValues. +'Descripton: Get Prefix. +'Input: No. +'Output: No. +'------------------------------------------------------------------------------------------------- + Function f_GetWarningCriticalValues() + + On Error Resume Next + + position1 = 0 + position2 = 0 + position3 = 0 + position4 = 0 + temp1 = 1 + temp2 = 1 + warningArraySize = 0 + criticalArraySize = 0 + + 'get warning + position2 = InStr(temp1, warningValueString, ",") + If(position2 = 0) then + position2 = Len(warningValueString)+1 + end if + + If(position2 > position1) then + do while (position2 > position1) + warningPair = Mid(warningValueString, position1 + 1, (position2 - position1 -1)) + warningArraySize = warningArraySize + 1 + ReDim Preserve warningArray(warningArraySize) + warningArray(warningArraySize -1) = Trim(warningPair) + temp1 = position2 + 1 + position1 = position2 + position2 = InStr(temp1, warningValueString, ",") + If(position2 = 0) then + position2 = Len(warningValueString)+1 + End If + loop + end If + + If(Int(warningArraySize) < Int(instanceArraySize)) Then + ReDim Preserve warningArray(instanceArraySize) + For i = 0 To (instanceArraySize - warningArraySize - 1) + warningArray(warningArraySize +i) = warningArray(warningArraySize-1) + Next + warningArraySize = instanceArraySize + End If + 'get critical + position4 = InStr(temp2, criticalValueString, ",") + If(position4 = 0) then + position4 = Len(criticalValueString)+1 + end if + + If(position4 > position3) then + do while (position4 > position3) + criticalPair = Mid(criticalValueString, position3 + 1, (position4 - position3 -1)) + criticalArraySize = criticalArraySize + 1 + ReDim Preserve criticalArray(criticalArraySize) + criticalArray(criticalArraySize -1) = Trim(criticalPair) + temp2 = position4 + 1 + position3 = position4 + position4 = InStr(temp2, criticalValueString, ",") + If(position4 = 0) then + position4 = Len(criticalValueString)+1 + End If + loop + End If + If(Int(criticalArraySize) < Int(instanceArraySize)) Then + ReDim Preserve criticalArray(instanceArraySize) + For i = 0 To (instanceArraySize - criticalArraySize - 1) + criticalArray(criticalArraySize +i) = criticalArray(criticalArraySize-1) + Next + criticalArraySize = instanceArraySize + End If + + End Function + +'------------------------------------------------------------------------------------------------- +'Function Name: f_LocalPerfValue. +'Descripton: Get perform value at Local Host. +'Input: No. +'Output: No. +'------------------------------------------------------------------------------------------------- + Function f_LocalPerfValue() + + On Error Resume Next + + Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\" & strNameSpace) + f_Error() + + 'Set colInstances = GetObject("winmgmts:{impersonationLevel=impersonate}\\" & strComputer & "\" & strNameSpace).InstancesOf(strClass) + 'For Each objInstance in colInstances + 'Next + 'f_Error() + + f_GetInformation() + + End Function + +'------------------------------------------------------------------------------------------------- +'Function Name: f_RemotePerfValue. +'Descripton: Get perform values at Remote Host. +'Input: No. +'Output: Values. +'------------------------------------------------------------------------------------------------- + Function f_RemotePerfValue() + + On Error Resume Next + + Set objSWbemLocator = CreateObject("WbemScripting.SWbemLocator") + if (strDomain = "") then + Set objWMIService = objSWbemLocator.ConnectServer _ + (strComputer, strNameSpace , strUser, strPass ) + f_Error() + + 'Set colInstances = objSWbemLocator.ConnectServer(strComputer, strNamespace , strUser, strPass).InstancesOf(strClass) + 'For Each objInstance in colInstances + 'Next + 'f_Error() + else + Set objWMIService = objSWbemLocator.ConnectServer _ + (strComputer, strNameSpace , strUser, strPass,"MS_409","ntlmdomain:" + strDomain ) + f_Error() + + 'Set colInstances = objSWbemLocator.ConnectServer(strComputer, strNamespace , strUser, strPass,"MS_409","ntlmdomain:" & strDomain ).InstancesOf(strClass) + 'For Each objInstance in colInstances + 'Next + 'f_Error() + end if + objWMIService.Security_.ImpersonationLevel = 3 + f_Error() + + f_GetInformation() + + End Function + +'************************************************************************************************* +' Main Function +'************************************************************************************************* + + '///////////////////// + + strCommandName="check_proc_num.vbs" + strDescription="Check number processes of a process." + + '///////////////////// + + strNameSpace = "root\cimv2" + strClass = "Win32_Process" + strProp = "Name" + f_GetAllArg() + tempCount = argcountcommand/2 + f_Error() + + if ((UCase(arg(0))="-H") Or (UCase(arg(0))="--HELP")) and (argcountcommand=1) then + f_help() + else + if( ((argcountcommand Mod 2) = 0) and (1 < tempCount < 8)) then + strComputer = f_GetOneArg("-h") + strInst = f_GetOneArg("-inst") + f_GetInstances() + warningValue = f_GetOneArg("-w") + warningValueString = f_GetOneArg("-w") + criticalValue = f_GetOneArg("-c") + criticalValueString = f_GetOneArg("-c") + If((warningValueString <> "") Or (criticalValueString <> "")) Then + f_GetWarningCriticalValues() + End if + strUser = f_GetOneArg("-user") + strPass = f_GetOneArg("-pass") + strDomain = f_GetOneArg("-domain") + if((strComputer = "") or (strInst = "")) then + Wscript.Echo "Error! Arguments wrong, require verify -h -inst parameters" + Wscript.Quit(intError) + else + Select Case tempCount + Case 2: + f_LocalPerfValue() + Case 3: + f_LocalPerfValue() + Case 4: + if ((warningValue <> "") and (criticalValue <> "") ) then + f_LocalPerfValue() + end if + if ((strUser <> "") and (strPass <> "")) then + f_RemotePerfValue() + else + Wscript.Echo "Error! Arguments wrong, please verify -user -pass or -w -c parameters" + Wscript.Quit(intError) + end if + Case 6: + if ((strUser <> "") and (strPass <> "") and (warningValue <> "") and (criticalValue <> "")) then + f_RemotePerfValue() + else + Wscript.Echo "Error! Arguments wrong for remote check, please verify -w -c -user -pass parameters" + Wscript.Quit(intError) + end if + Case 7: + if ((strUser <> "") and (strPass <> "") and (warningValue <> "") and (criticalValue <> "") and (strDomain <> "")) then + f_RemotePerfValue() + else + Wscript.Echo "Error! Arguments wrong for remote check, please verify -w -c -user -pass -domain parameters" + Wscript.Quit(intError) + end if + Case Else + Wscript.Echo "Error! Arguments wrong, please type -h for Help" + Wscript.Quit(intError) + End Select + + end if + else + Wscript.Echo "Error! Arguments wrong, please type -h for Help" + Wscript.Quit(intError) + end if + + end if \ No newline at end of file diff --git a/nsclient/trunk/scripts/wmi/check_raw_fraction.vbs b/nsclient/trunk/scripts/wmi/check_raw_fraction.vbs new file mode 100644 index 0000000..810cd0d --- /dev/null +++ b/nsclient/trunk/scripts/wmi/check_raw_fraction.vbs @@ -0,0 +1,856 @@ +' Copyright 2007 GroundWork Open Source Inc. +' +' This program is free software; you can redistribute it and/or +' modify it under the terms of the GNU General Public License +' as published by the Free Software Foundation; version 2 +' of the License. +' +' This program is distributed in the hope that it will be useful, +' but WITHOUT ANY WARRANTY; without even the implied warranty of +' MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +' GNU General Public License for more details. +' +' +' Author Dr. Dave Blunt at GroundWork Open Source Inc. (dblunt@groundworkopensource.com) + +'************************************************************************************************* +' Public Variable +'************************************************************************************************* +Const intOK = 0 +Const intWarning = 1 +Const intCritical = 2 +Const intError = 3 +Const intUnknown = 3 + +Dim argcountcommand +Dim arg(20) +Dim strComputer +Dim strClass +Dim strProp +Dim strInst +Dim warningValue +Dim warningValueString +Dim criticalValue +Dim criticalValueString +Dim strUser +Dim strPass +Dim strDomain +Dim strNameSpace +Dim strDescription +Dim strCommandName +Dim strResultTemp +Dim strResult +Dim strResult1 +Dim strResult2 +Dim intReturnTemp +Dim intReturn +Dim strResultTemp1 +Dim strResultTemp2 +Dim strResultTemp3 +Dim strResultTemp4 +Dim intReturnTemp1 +Dim strPrefix +Dim intValue +Dim returnValue +Dim strPropBase +Dim strPropName +Dim instanceArray() +Dim instanceArraySize +Dim warningArraySize +Dim criticalArraySize +Dim warningArray() +Dim criticalArray() +Dim instance +Dim propArray() +Dim propArraySize +Dim lWarningValue +Dim uWarningValue +Dim lCriticalValue +Dim uCriticalValue + +Dim ArgCount +Dim strArgMain(10) +Dim strArgSortDes(10) +Dim strArgDetailDes(10) +Dim strArgExample(10) + +Dim objWMIService, colWMI,objWMI,objSWbemLocator + +strComputer="" +strClass = "" +strProp = "" +strInst = "" +warningValue = -1 +criticalValue = -1 +strUser = "" +strPass = "" +strDomain = "" + +intReturnTemp1 = 0 + +'************************************************************************************************* +' Functions and Subs +'************************************************************************************************* + +'------------------------------------------------------------------------------------------------- +'Function Name: f_Error. +'Descripton: Display an error notice include : Error Number and Error Description. +'Input: No. +'Output: No. +'------------------------------------------------------------------------------------------------- + Function f_Error() + + nbrError = err.number + if (nbrError <> 0 ) then + Select Case nbrError + Case 462, -2147023174 + strExitMsg = "Timeout connecting to WMI on this host! Error Number: " & nbrError & " Description: " & err.description + Case -2147024891 + strExitMsg = "Authentication failure to remote host! Error Number: " & nbrError & " Description: " & err.description + Case -2147217392 + strExitMsg = "Error! Number: " & nbrError & " Description: Invalid Class" + Case Else + strExitMsg = "Error! Number: " & nbrError & " Description: " & err.description + End Select + wscript.echo strExitMsg + wscript.quit(intUnknown) + end if + + End Function + + +'------------------------------------------------------------------------------------------------- +'Function Name: f_Help. +'Descripton: Display help of command include : Description, Arguments, Examples +'Input: No. +'Output: No. +'------------------------------------------------------------------------------------------------- + Function f_Help() + + Dim str + str="Check Raw Fraction. If your Local Machine has the same Administrator account and password as the Remote Machine then you don't have to use the two last parameters."&vbCrlF&vbCrlF + str=str&"cscript check_raw_fraction.vbs -h hostname -class classname -prop property -inst instancename [-w warning_level -c critical_level] [-user username -pass password [-domain domain]]"&vbCrlF + str=str&vbCrlF + str=str&"-h [--help] Help."&vbCrlF + str=str&"-h hostname Host name."&vbCrlF + str=str&"-class classname Class name."&vbCrlF + str=str&"-prop property Property of Class."&vbCrlF + str=str&"-inst instance Needed Instance."&vbCrlF + str=str&"-w warning_level Warning threshold."&vbCrlF + str=str&"-c critical_level Critical threshold."&vbCrlF + str=str&"-user username Account Administrator on Remote Machine."&vbCrlF + str=str&"-pass password Password Account Administrator on Remote Machine."&vbCrlF + str=str&"-domain domain Domain Name of Remote Machine."&vbCrlF + str=str&vbCrlF + str=str&"Example: cscript check_raw_fraction.vbs -h Ser1 -class Win32_PerfRawData_PerfDisk_LogicalDisk -prop PercentFreeSpace -inst ""*"" -w 30 -c 70 [-user Ser1\Administrator -pass password -domain ITSP] " &vbCrlF + str=str&"Example: cscript check_raw_fraction.vbs -h Ser1 -class Win32_PerfRawData_PerfDisk_LogicalDisk -prop PercentFreeSpace -inst ""name=C:"" -w 30 -c 70 [-user Ser1\Administrator -pass password -domain ITSP] " + wscript.echo str + + End Function +'------------------------------------------------------------------------------------------------- +'Function Name: f_GetAllArg. +'Descripton: Get all of arguments from command. +'Input: No. +'Output: No. +'------------------------------------------------------------------------------------------------- + Function f_GetAllArg() + + On Error Resume Next + + Dim i + + argcountcommand=WScript.Arguments.Count + + for i=0 to argcountcommand-1 + arg(i)=WScript.Arguments(i) + next + + End Function +'------------------------------------------------------------------------------------------------- +'Function Name: f_GetOneArg. +'Descripton: Get an argument from command. +'Input: Yes. +' strName: Name of argument +'Output: Value. +'------------------------------------------------------------------------------------------------- + Function f_GetOneArg(strName) + + On Error Resume Next + + Dim i + for i=0 to argcountcommand-1 + if (Ucase(arg(i))=Ucase(strName)) then + f_GetOneArg=arg(i+1) + Exit Function + end if + next + + End Function + +'------------------------------------------------------------------------------------------------- +'Function Name: f_GetInstance. +'Descripton: Get infomation at Local Host. +'Input: instance. +'Output: No. +'------------------------------------------------------------------------------------------------- + Function f_GetInstance(instance) + + On Error Resume Next + + strResultTemp1 = "" + strResultTemp2 = "" + strResultTemp = "" + intResultTemp = 0 + + strInstanceTemp1 = "" + strInstanceTemp2 = "" + intInstanceTemp1 = 0 + intInstanceTemp2 = 0 + + strPropBase = "" + strPropBase = strProp & "_Base" + 'Depend on strInfo parameters to get the result value + + if(instance = "*") then + strQuery = "Select " & strProp & ", " & strPropBase & " from " & strClass + Set colWMI = objWMIService.ExecQuery(strQuery) + else + intInstanceTemp1 = InStr(1,instance,"=") + strInstanceTemp1 = Mid(instance,1,intInstanceTemp1-1) + intInstanceTemp2 = Len(instance) + strInstanceTemp2 = Mid(instance,intInstanceTemp1+1,intInstanceTemp2-intInstanceTemp1) + instance=strInstanceTemp1 & "='" & strInstanceTemp2 & "'" + + strQuery = "Select " & strProp & ", " & strPropBase & " from " & strClass & " where " & instance + Set colWMI = objWMIService.ExecQuery(strQuery) + end if + + count = -1 + count = colWMI.count + if(count = -1) then + Wscript.Echo "Unknown - No data received from WMI;" + Wscript.Quit(intUnknown) + else + if(colWMI.count > 0) then + f_FormatData(colWMI) + + strResultTemp1 = strResultTemp1 & strResultTemp3 + strResultTemp2 = strResultTemp2 & strResultTemp4 + intReturnTemp = intReturnTemp1 + Exit Function + else + strResultTemp1 = "Unknown - " & instance &" query: No row returned." + intReturnTemp = intUnknown + Exit Function + end if + end if + End Function + +'------------------------------------------------------------------------------------------------- +'Function Name: f_GetPrefix. +'Descripton: Get Prefix. +'Input: No. +'Output: No. +'------------------------------------------------------------------------------------------------- + Function f_GetPrefix(intValue) + + On Error Resume Next + + strPrefix = "" + If(warningValue <> "" And criticalValue = "") Then + If (IsNumeric(warningValue)) Then + If (Int(intValue) < Int(warningValue)) Then + returnValue=0 + strPrefix= "OK - " + Else + returnValue=1 + strPrefix= "Warning - " + End If + Else + Wscript.Echo "Error! Arguments wrong, please verify -w parameter" + Wscript.Quit(intError) + Exit Function + End If + End If + If(warningValue = "" And criticalValue <> "") Then + If (IsNumeric(criticalValue)) Then + If (Int(intValue) < Int(criticalValue)) Then + returnValue=0 + strPrefix= "OK - " + Else + returnValue=2 + strPrefix= "Critical - " + End If + Else + Wscript.Echo "Error! Arguments wrong, please verify -c parameter" + Wscript.Quit(intError) + Exit Function + End If + End If + If (warningValue <> "" And criticalValue <> "") Then + If (IsNumeric(warningValue) And IsNumeric(criticalValue)) Then + if (Int(warningValue) < Int(criticalValue)) then + + if (Int(intValue) < Int(warningValue)) then + returnValue=0 + strPrefix= "OK - " + else + if (Int(intValue) < Int(criticalValue)) then + returnValue=1 + strPrefix= "Warning - " + else + returnValue=2 + strPrefix= "Critical - " + end if + end if + else + if (Int(intValue) > Int(warningValue)) then + returnValue=0 + strPrefix= "OK - " + else + if (Int(intValue) > Int(criticalValue)) then + returnValue=1 + strPrefix= "Warning - " + else + returnValue=2 + strPrefix= "Critical - " + end if + end if + end If + Else + Wscript.Echo "Error! Arguments wrong, please verify -w -c parameter" + Wscript.Quit(intError) + Exit Function + End If + End If + + End Function + +'------------------------------------------------------------------------------------------------- +'Function Name: f_GetPrefixWithRange. +'Descripton: Get Prefix. +'Input: No. +'Output: No. +'------------------------------------------------------------------------------------------------- + Function f_GetPrefixWithRange(intValue) + + On Error Resume Next + lWarningValue = "" + uWarningValue = "" + lCriticalValue= "" + uCriticalValue= "" + warningReturn = 0 + criticalReturn = 0 + If(warningValue <> "") Then + f_GetWarningValueFromRange(warningValue) + End If + If(criticalValue <> "") Then + f_GetCriticalValueFromRange(criticalValue) + End If + strPrefix = "" + 'verify warning + If((lWarningValue <> "") And (uWarningValue <> "")) Then + If(Int(lWarningValue) <= Int(uWarningValue)) Then + If((Int(lWarningValue) >= Int(intValue)) Or (Int(intValue) >= Int(uWarningValue))) Then + warningReturn=1 + End If + Else + If((Int(intValue) >= Int(uWarningValue) ) And (Int(intValue) <= Int(lWarningValue))) Then + warningReturn=1 + End If + End If + End If + If((lWarningValue <> "") And (uWarningValue = "")) Then + If(Int(intValue) <= Int(lWarningValue)) Then + warningReturn=1 + End If + End If + If((lWarningValue = "") And (uWarningValue <> "")) Then + If(Int(intValue) >= Int(uWarningValue)) Then + warningReturn=1 + End If + End If + + 'verify critical + If((lCriticalValue <> "") And (uCriticalValue <> "")) Then + If(Int(lCriticalValue) <= Int(uCriticalValue)) Then + If((Int(lCriticalValue) >= Int(intValue)) Or (Int(intValue) >= Int(uCriticalValue))) Then + criticalReturn=2 + End If + Else + If((Int(intValue) >= Int(uCriticalValue) ) And (Int(intValue) <= Int(lCriticalValue))) Then + criticalReturn=2 + End If + End If + End If + If((lCriticalValue <> "") And (uCriticalValue = "")) Then + If(Int(intValue) <= Int(lCriticalValue)) Then + criticalReturn=2 + End If + End If + If((lCriticalValue = "") And (uCriticalValue <> "")) Then + If(Int(intValue) >= Int(uCriticalValue)) Then + criticalReturn=2 + End If + End If + + 'return result + If(criticalReturn = 2) Then + returnValue=2 + strPrefix= "Critical - " + Else + If(warningReturn = 1) Then + returnValue=1 + strPrefix= "Warning - " + Else + returnValue=0 + strPrefix= "Ok - " + End If + End If + + End Function + +'------------------------------------------------------------------------------------------------- +'Function Name: f_GetWarningValueFromRange(). +'Descripton: Get perform value at Local Host. +'Input: warningValueRange. +'Output: No. +'------------------------------------------------------------------------------------------------- + Function f_GetWarningValueFromRange(warningValue) + + On Error Resume Next + lWarningValue = "" + uWarningValue = "" + temp1 = 0 + temp1 = InStr(1, warningValue, ":") + if(temp1 > 0) then + lWarningTemp = Mid(warningValue, 1, temp1 -1) + uWarningTemp = Mid(warningValue, temp1 +1, len(warningValue) - temp1) + if(IsNumeric(lWarningTemp) or IsNumeric(uWarningTemp)) then + lWarningValue = lWarningTemp + uWarningValue = uWarningTemp + else + Wscript.Echo "Error! Arguments wrong, please verify -w parameter" + Wscript.Quit(intError) + Exit Function + end if + else + Wscript.Echo "Error! Arguments wrong, please verify -w parameter" + Wscript.Quit(intError) + Exit Function + end if + + End Function + +'------------------------------------------------------------------------------------------------- +'Function Name: f_GetCriticalValueFromRange(). +'Descripton: Get perform value at Local Host. +'Input: warningValueRange. +'Output: No. +'------------------------------------------------------------------------------------------------- + Function f_GetCriticalValueFromRange(criticalValue) + + On Error Resume Next + lCriticalValue = "" + uCriticalValue = "" + temp1 = 0 + temp1 = InStr(1, criticalValue, ":") + if(temp1 > 0) then + lCriticalTemp = Mid(criticalValue, 1, temp1 -1) + uCriticalTemp = Mid(criticalValue, temp1 +1, len(criticalValue) - temp1) + if(IsNumeric(lCriticalTemp) or IsNumeric(uCriticalTemp)) then + lCriticalValue = lCriticalTemp + uCriticalValue = uCriticalTemp + else + Wscript.Echo "Error! Arguments wrong, please verify -c parameter" + Wscript.Quit(intError) + Exit Function + end if + else + WScript.Echo "Error! Arguments wrong, please verify -c parameter" + Wscript.Quit(intError) + Exit Function + end if + + End Function + +'------------------------------------------------------------------------------------------------- +'Function Name: f_FormatData. +'Descripton: Format data the same as output. +'Input: service. +'Output: No. +'------------------------------------------------------------------------------------------------- + Function f_FormatData(colWMI) + + On Error Resume Next + + strDisplay1 = "" + strDisplay2 = "" + strResultTemp3 = "" + strResultTemp4 = "" + + For Each objWMI in colWMI + strName = objWMI.Name + strPropName = objWMI.Properties_(strProp).Name + intValueRaw = objWMI.Properties_(strProp) + intValueBase = objWMI.Properties_(strPropBase) + intValue = Int((100 * intValueRaw)/intValueBase) + Dim strDSName + strDSName = f_FormatDSName(strName) + + if((warningValue <> "") and (criticalValue <> "")) then + strDisplay1 = strName & " '" & strPropName & "'" & " = " & intValue & "; " + strDisplay2 = "'" &strDSName & "'" & "=" & intValue & ";" & warningValue & ";" & criticalValue & ";; " + If(InStr(1, warningValue, ":") > 0 Or InStr(1, criticalValue, ":") > 0) Then + f_GetPrefixWithRange(intValue) + Else + f_GetPrefix(intValue) + End If + strResultTemp3 = strResultTemp3 & strPrefix & strDisplay1 + strResultTemp4 = strResultTemp4 & strDisplay2 + if( intReturnTemp1 < returnValue) then + intReturnTemp1 = returnValue + end if + else + strResultTemp3 = strResultTemp3 & "OK - " & strName & " '" & strPropName & "'" & " = " & intValue & "; " + strResultTemp4 = "" + end if + Next + + End Function + +'------------------------------------------------------------------------------------------------- +'Function Name: f_FormatDSName. +'Descripton: Get infomation at Local Host. +'Input: strName. +'Output: No. +'------------------------------------------------------------------------------------------------- + Function f_FormatDSName(strName) + + On Error Resume Next + + first = 1 + position1 = 0 + + position1 = InStr(first, strName, "=") + Dim proc_name + proc_name = "" + If(position1 > 0) Then + proc_name = Mid(strName,position1+1,(Len(strName)-position1)) + proc_name = Replace(proc_name,".","_") + proc_name = Replace(proc_name,"-","_") + proc_name = Mid(proc_name,1, 19) + + + Else + proc_name = Mid(strName,position1+1,(Len(strName)-position1)) + proc_name = Replace(proc_name,".","_") + proc_name = Replace(proc_name,"-","_") + proc_name = Mid(proc_name,1, 19) + + End If + f_FormatDSName = proc_name + Exit Function + End Function + +'------------------------------------------------------------------------------------------------- +'Function Name: f_GetInformation. +'Descripton: Get information data. +'Input: No. +'Output: Values. +'------------------------------------------------------------------------------------------------- + Function f_GetInformation() + + On Error Resume Next + + strResult = "" + strResult1 = "" + strResult2 = "" + intReturn = 0 + + If(instanceArraySize > 0 and (warningArraySize > 1 Or criticalArraySize > 1)) Then + for i = 0 to instanceArraySize -1 + instance = instanceArray(i) + warningValue = warningArray(i) + criticalValue = criticalArray(i) + f_GetInstance(instance) + strResult1 = strResult1 & strResultTemp1 + strResult2 = strResult2 & strResultTemp2 + if intReturn < intReturnTemp then + intReturn = intReturnTemp + end if + Next + Else + for i = 0 to instanceArraySize -1 + instance = instanceArray(i) + f_GetInstance(instance) + strResult1 = strResult1 & strResultTemp1 + strResult2 = strResult2 & strResultTemp2 + if intReturn < intReturnTemp then + intReturn = intReturnTemp + end if + Next + end if + if(strResult2 = "") then + strResult = strResult1 + else + strResult = strResult1 & "|" & strResult2 + end if + Wscript.Echo strResult + Wscript.Quit(intReturn) + + End Function + +'------------------------------------------------------------------------------------------------- +'Function Name: f_GetInstances. +'Descripton: Get Prefix. +'Input: No. +'Output: No. +'------------------------------------------------------------------------------------------------- + Function f_GetInstances() + + On Error Resume Next + + first = 1 + position = 0 + instanceArraySize = 0 + + position = InStr(first, strInst, ",") + if (position = 0) then + instanceTemp = strInst + InstanceArraySize = 1 + ReDim instanceArray(instanceArraySize) + instanceArray(0) = instanceTemp + + else + do while (position > 0) + instanceTemp = Mid(strInst,first,position - first) + instanceArraySize = instanceArraySize + 1 + ReDim Preserve instanceArray(instanceArraySize) + instanceArray(instanceArraySize -1) = Trim(instanceTemp) + first = position + 1 + position = InStr(first, strInst, ",") + loop + instanceTemp = Mid(strInst,first,len(strInst)) + instanceArraySize = instanceArraySize + 1 + ReDim Preserve instanceArray(instanceArraySize) + instanceArray(instanceArraySize -1) = Trim(instanceTemp) + end if + + End Function + +'------------------------------------------------------------------------------------------------- +'Function Name: f_GetWarningCriticalValues. +'Descripton: Get Prefix. +'Input: No. +'Output: No. +'------------------------------------------------------------------------------------------------- + Function f_GetWarningCriticalValues() + + On Error Resume Next + + position1 = 0 + position2 = 0 + position3 = 0 + position4 = 0 + temp1 = 1 + temp2 = 1 + warningArraySize = 0 + criticalArraySize = 0 + + 'get warning + position2 = InStr(temp1, warningValueString, ",") + If(position2 = 0) then + position2 = Len(warningValueString)+1 + end if + + If(position2 > position1) then + do while (position2 > position1) + warningPair = Mid(warningValueString, position1 + 1, (position2 - position1 -1)) + warningArraySize = warningArraySize + 1 + ReDim Preserve warningArray(warningArraySize) + warningArray(warningArraySize -1) = Trim(warningPair) + temp1 = position2 + 1 + position1 = position2 + position2 = InStr(temp1, warningValueString, ",") + If(position2 = 0) then + position2 = Len(warningValueString)+1 + End If + loop + end If + + If(Int(warningArraySize) < Int(instanceArraySize)) Then + ReDim Preserve warningArray(instanceArraySize) + For i = 0 To (instanceArraySize - warningArraySize - 1) + warningArray(warningArraySize +i) = warningArray(warningArraySize-1) + Next + warningArraySize = instanceArraySize + End If + 'get critical + position4 = InStr(temp2, criticalValueString, ",") + If(position4 = 0) then + position4 = Len(criticalValueString)+1 + end if + + If(position4 > position3) then + do while (position4 > position3) + criticalPair = Mid(criticalValueString, position3 + 1, (position4 - position3 -1)) + criticalArraySize = criticalArraySize + 1 + ReDim Preserve criticalArray(criticalArraySize) + criticalArray(criticalArraySize -1) = Trim(criticalPair) + temp2 = position4 + 1 + position3 = position4 + position4 = InStr(temp2, criticalValueString, ",") + If(position4 = 0) then + position4 = Len(criticalValueString)+1 + End If + loop + End If + If(Int(criticalArraySize) < Int(instanceArraySize)) Then + ReDim Preserve criticalArray(instanceArraySize) + For i = 0 To (instanceArraySize - criticalArraySize - 1) + criticalArray(criticalArraySize +i) = criticalArray(criticalArraySize-1) + Next + criticalArraySize = instanceArraySize + End If + + End Function + +'------------------------------------------------------------------------------------------------- +'Function Name: f_LocalPerfValue. +'Descripton: Get perform value at Local Host. +'Input: No. +'Output: No. +'------------------------------------------------------------------------------------------------- + Function f_LocalPerfValue() + + On Error Resume Next + + Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\" & strNameSpace) + f_Error() + + 'Set colInstances = GetObject("winmgmts:{impersonationLevel=impersonate}\\" & strComputer & "\" & strNameSpace).InstancesOf(strClass) + 'For Each objInstance in colInstances + 'Next + 'f_Error() + + f_GetInformation() + + End Function + +'------------------------------------------------------------------------------------------------- +'Function Name: f_RemotePerfValue. +'Descripton: Get perform values at Remote Host. +'Input: No. +'Output: Values. +'------------------------------------------------------------------------------------------------- + Function f_RemotePerfValue() + + On Error Resume Next + + Set objSWbemLocator = CreateObject("WbemScripting.SWbemLocator") + if (strDomain = "") then + Set objWMIService = objSWbemLocator.ConnectServer _ + (strComputer, strNameSpace , strUser, strPass ) + f_Error() + + 'Set colInstances = objSWbemLocator.ConnectServer(strComputer, strNamespace , strUser, strPass).InstancesOf(strClass) + 'For Each objInstance in colInstances + 'Next + 'f_Error() + else + Set objWMIService = objSWbemLocator.ConnectServer _ + (strComputer, strNameSpace , strUser, strPass,"MS_409","ntlmdomain:" + strDomain ) + f_Error() + + 'Set colInstances = objSWbemLocator.ConnectServer(strComputer, strNamespace , strUser, strPass,"MS_409","ntlmdomain:" & strDomain ).InstancesOf(strClass) + 'For Each objInstance in colInstances + 'Next + 'f_Error() + end if + objWMIService.Security_.ImpersonationLevel = 3 + f_Error() + + f_GetInformation() + + End Function + +'************************************************************************************************* +' Main Function +'************************************************************************************************* + + '///////////////////// + + strCommandName="check_counter_rawcount.vbs" + strDescription="Enumerate the needed windows host information." + + '///////////////////// + + strNameSpace = "root\cimv2" + + f_GetAllArg() + tempCount = argcountcommand/2 + f_Error() + strClass = "" + if ((UCase(arg(0))="-H") Or (UCase(arg(0))="--HELP")) and (argcountcommand=1) then + f_help() + else + if( ((argcountcommand Mod 2) = 0) and (3 < tempCount < 10)) then + strComputer = f_GetOneArg("-h") + strClass = f_GetOneArg("-class") + strProp = f_GetOneArg("-prop") + strInst = f_GetOneArg("-inst") + f_GetInstances() + warningValue = f_GetOneArg("-w") + warningValueString = f_GetOneArg("-w") + criticalValue = f_GetOneArg("-c") + criticalValueString = f_GetOneArg("-c") + If((warningValueString <> "") Or (criticalValueString <> "")) Then + f_GetWarningCriticalValues() + End if + strUser = f_GetOneArg("-user") + strPass = f_GetOneArg("-pass") + strDomain = f_GetOneArg("-domain") + if((strComputer = "") or (strClass = "") or (strProp = "") or (strInst = "")) then + Wscript.Echo "Error! Arguments wrong, require verify -h -class -prop -inst parameters" + Wscript.Quit(intError) + else + Select Case tempCount + Case 4: + f_LocalPerfValue() + Case 6: + if ((warningValue <> "") and (criticalValue <> "")) then + f_LocalPerfValue() + end if + if ((strUser <> "") and (strPass <> "")) then + f_RemotePerfValue() + else + Wscript.Echo "Error! Arguments wrong, please verify -user -pass or -w -c parameters" + Wscript.Quit(intError) + end if + Case 8: + if ((strUser <> "") and (strPass <> "") and (warningValue <> "") and (criticalValue <> "")) then + f_RemotePerfValue() + else + Wscript.Echo "Error! Arguments wrong for remote check, please verify -w -c -user -pass parameters" + Wscript.Quit(intError) + end if + Case 9: + if ((strUser <> "") and (strPass <> "") and (warningValue <> "") and (criticalValue <> "") and (strDomain <> "")) then + f_RemotePerfValue() + else + Wscript.Echo "Error! Arguments wrong for remote check, please verify -w -c -user -pass -domain parameters" + Wscript.Quit(intError) + end if + Case Else + Wscript.Echo "Error! Arguments wrong, please type -h for Help" + Wscript.Quit(intError) + End Select + + end if + else + Wscript.Echo "Error! Arguments wrong, please type -h for Help" + Wscript.Quit(intError) + end if + + end if \ No newline at end of file diff --git a/nsclient/trunk/scripts/wmi/check_services_states.vbs b/nsclient/trunk/scripts/wmi/check_services_states.vbs new file mode 100644 index 0000000..3e03121 --- /dev/null +++ b/nsclient/trunk/scripts/wmi/check_services_states.vbs @@ -0,0 +1,468 @@ +' Copyright 2007 GroundWork Open Source Inc. +' +' This program is free software; you can redistribute it and/or +' modify it under the terms of the GNU General Public License +' as published by the Free Software Foundation; version 2 +' of the License. +' +' This program is distributed in the hope that it will be useful, +' but WITHOUT ANY WARRANTY; without even the implied warranty of +' MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +' GNU General Public License for more details. +' +' +' Author Dr. Dave Blunt at GroundWork Open Source Inc. (dblunt@groundworkopensource.com) + +'************************************************************************************************* +' Public Variable +'************************************************************************************************* +Const intOK = 0 +Const intWarning = 1 +Const intCritical = 2 +Const intError = 3 +Const intUnknown = 3 + +Dim argcountcommand +Dim arg(20) +Dim strComputer +Dim strClass +Dim strProp +Dim strInst +Dim warningValue +Dim criticalValue +Dim strUser +Dim strPass +Dim strDomain +Dim strNameSpace +Dim strDescription +Dim strCommandName +Dim strResultTemp +Dim strResult1 +Dim strResult2 +Dim intReturnTemp +Dim intReturn +Dim strPrefix +Dim intValue +Dim returnValue +Dim instance +Dim instanceArray() +Dim instanceArraySize + +Dim ArgCount +Dim strArgMain(10) +Dim strArgSortDes(10) +Dim strArgDetailDes(10) +Dim strArgExample(10) + +Dim objWMIService, colWMI,objWMI,objSWbemLocator + +strComputer="" +strClass = "" +strProp = "" +strInst = "" +strUser = "" +strPass = "" +strDomain = "" +'************************************************************************************************* +' Functions and Subs +'************************************************************************************************* + +'------------------------------------------------------------------------------------------------- +'Function Name: f_Error. +'Descripton: Display an error notice include : Error Number and Error Description. +'Input: No. +'Output: No. +'------------------------------------------------------------------------------------------------- + Function f_Error() + + if (err.number <>0 ) then + if err.number = -2147023174 then + Wscript.echo "Critical - Timeout connecting to WMI on this host! Error Number: " & err.number & " Description: " & err.Description + WScript.Quit(intCritical) + else + if err.number = -2147024891 then + Wscript.echo "Authentication failure to remote host! Error Number: " & err.number & " Description: " & err.description + else + if err.number = 462 then + Wscript.echo "Critical - Timeout connecting to WMI on this host! Error Number: " & err.number & " Description: " & err.Description + WScript.Quit(intCritical) + else + if err.number=-2147217392 then + Wscript.echo "Error! Error Number: -2147217392 Description: Invalid Class" + else + Wscript.echo "Error! Error Number: " & err.number & " Description: " & err.description + end if + end if + end if + end if + Wscript.Quit(intError) + end if + + End Function +'------------------------------------------------------------------------------------------------- +'Function Name: f_Help. +'Descripton: Display help of command include : Description, Arguments, Examples +'Input: No. +'Output: No. +'------------------------------------------------------------------------------------------------- + Function f_Help() + + Dim str + str="Check State of a Service. If your Local Machine has the same Administrator account and password as the Remote Machine then you don't have to use the two last parameters."&vbCrlF&vbCrlF + str=str&"cscript check_services_states.vbs -h hostname -inst instancename [-user username -pass password [-domain domain]]"&vbCrlF + str=str&vbCrlF + str=str&"-h [--help] Help."&vbCrlF + str=str&"-h hostname Host name."&vbCrlF + str=str&"-inst instance Needed Instance."&vbCrlF + str=str&"-user username Account Administrator on Remote Machine."&vbCrlF + str=str&"-pass password Password Account Administrator on Remote Machine."&vbCrlF + str=str&"-domain domain Domain Name of Remote Machine."&vbCrlF + str=str&vbCrlF + str=str&"Note: information can be one or multiple services, or *." & vbCrlF + str=str&"And if get multiple services, the information must be enclosed in multiple quotes and separate by commas." & vbCrlF + str=str&"Example: cscript check_services_states.vbs -h Ser1 -inst ""WINS,wmi"" [-user SER1\Administrator -pass password] " & vbCrlF + wscript.echo str + + End Function +'------------------------------------------------------------------------------------------------- +'Function Name: f_GetAllArg. +'Descripton: Get all of arguments from command. +'Input: No. +'Output: No. +'------------------------------------------------------------------------------------------------- + Function f_GetAllArg() + + On Error Resume Next + + Dim i + + argcountcommand=WScript.Arguments.Count + + for i=0 to argcountcommand-1 + arg(i)=WScript.Arguments(i) + next + + End Function +'------------------------------------------------------------------------------------------------- +'Function Name: f_GetOneArg. +'Descripton: Get an argument from command. +'Input: Yes. +' strName: Name of argument +'Output: Value. +'------------------------------------------------------------------------------------------------- + Function f_GetOneArg(strName) + + On Error Resume Next + + Dim i + for i=0 to argcountcommand-1 + if (Ucase(arg(i))=Ucase(strName)) then + f_GetOneArg=arg(i+1) + Exit Function + end if + next + + End Function + +'------------------------------------------------------------------------------------------------- +'Function Name: f_GetOneInstance. +'Descripton: Get infomation at Local Host. +'Input: instance. +'Output: No. +'------------------------------------------------------------------------------------------------- + Function f_GetOneInstance() + + On Error Resume Next + + if(instance = "*") then + for Each objWMI In colWMI + strOut = strOut & objWMI.Name & ": " & objWMI.State & "; " + next + strResultTemp = strOut + Wscript.Echo strResultTemp + Wscript.Quit(intOk) + Exit Function + else + for Each objWMI In colWMI + if(Ucase(instance) = Ucase(objWMI.Name)) then + startMode=objWMI.StartMode + if((startMode = "Disabled") or (startMode = "Manual")) then + Wscript.Echo "OK - " & objWMI.Name & ": " & objWMI.State & " and " & startMode + Wscript.Quit(intOk) + Exit Function + else + if(objWMI.State = "Running") then + Wscript.Echo "OK - " & objWMI.Name & ": " & objWMI.State + Wscript.Quit(intOk) + Exit Function + else + Wscript.Echo "Critical - " & objWMI.Name & ": " & objWMI.State + Wscript.Quit(intCritical) + Exit Function + end if + end if + end if + next + Wscript.Echo "Unknown - " & instance & ": not installed" + Wscript.Quit(intUnknown) + Exit Function + end if + + End Function + +'------------------------------------------------------------------------------------------------- +'Function Name: f_GetMultiInstance. +'Descripton: Get infomation at Local Host. +'Input: instance. +'Output: No. +'------------------------------------------------------------------------------------------------- + Function f_GetMultiInstance() + + On Error Resume Next + + strResultTemp = "" + intResultTemp = 0 + + for Each objWMI In colWMI + if(Ucase(instance) = Ucase(objWMI.Name)) then + startMode=objWMI.StartMode + if((startMode = "Disabled") or (startMode = "Manual")) then + strResultTemp = "OK - " & objWMI.Name & ": " & objWMI.State & " and " & startMode + intReturnTemp = intOk + Exit Function + else + if(objWMI.State = "Running" ) then + strResultTemp = "OK - " & objWMI.Name & ": " & objWMI.State + intReturnTemp = intOk + Exit Function + else + strResultTemp = "Critical - " & objWMI.Name & ": " & objWMI.State + intReturnTemp = intCritical + Exit Function + end if + end if + end if + next + strResultTemp = "Unknown - " & instance & ": not installed" + intReturnTemp = intUnknown + Exit Function + + End Function + +'------------------------------------------------------------------------------------------------- +'Function Name: f_ExecQuery. +'Descripton: Execute query. +'Input: No. +'Output: No. +'------------------------------------------------------------------------------------------------- + Function f_ExecQuery() + + On Error Resume Next + + strQuery = "Select " & strProp & " from " & strClass + Set colWMI = objWMIService.ExecQuery(strQuery) + + count = -1 + count = colWMI.count + if(count = -1) then + Wscript.Echo "Error! Invalid " & strProp & " property." + Wscript.Quit(intError) + end if + + End Function + +'------------------------------------------------------------------------------------------------- +'Function Name: f_GetInstances. +'Descripton: Get Prefix. +'Input: No. +'Output: No. +'------------------------------------------------------------------------------------------------- + Function f_GetInstances() + + On Error Resume Next + + first = 1 + position = 0 + instanceArraySize = 0 + + position = InStr(first, strInst, ",") + if (position = 0) then + instanceTemp = strInst + InstanceArraySize = 1 + ReDim instanceArray(instanceArraySize) + instanceArray(0) = instanceTemp + + else + do while (position > 0) + instanceTemp = Mid(strInst,first,position - first) + instanceArraySize = instanceArraySize + 1 + ReDim Preserve instanceArray(instanceArraySize) + instanceArray(instanceArraySize -1) = Trim(instanceTemp) + first = position + 1 + position = InStr(first, strInst, ",") + loop + instanceTemp = Mid(strInst,first,len(strInst)) + instanceArraySize = instanceArraySize + 1 + ReDim Preserve instanceArray(instanceArraySize) + instanceArray(instanceArraySize -1) = Trim(instanceTemp) + end if + + End Function + +'------------------------------------------------------------------------------------------------- +'Function Name: f_GetInformation. +'Descripton: Get information data. +'Input: No. +'Output: Values. +'------------------------------------------------------------------------------------------------- + Function f_GetInformation() + + On Error Resume Next + + strResult1 = "" + strResult2 = "" + intReturn = 0 + if(instanceArraySize = 1) then + instance = instanceArray(0) + f_GetOneInstance() + else + for i = 0 to instanceArraySize -1 + instance = instanceArray(i) + f_GetMultiInstance() + if intReturn < intReturnTemp then + intReturn = intReturnTemp + end if + if(intReturnTemp > 0) then + strResult2 = strResult2 & strResultTemp & "; " + else + strResult1 = strResult1 & strResultTemp & "; " + end if + next + Wscript.Echo strResult2 & strResult1 + Wscript.Quit(intReturn) + end if + + End Function + + +'------------------------------------------------------------------------------------------------- +'Function Name: f_LocalPerfValue. +'Descripton: Get perform value at Local Host. +'Input: No. +'Output: No. +'------------------------------------------------------------------------------------------------- + Function f_LocalPerfValue() + + On Error Resume Next + + Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\" & strNameSpace) + f_Error() + + 'Set colInstances = GetObject("winmgmts:{impersonationLevel=impersonate}\\" & strComputer & "\" & strNameSpace).InstancesOf(strClass) + 'For Each objInstance in colInstances + 'Next + 'f_Error() + f_ExecQuery() + f_GetInstances() + f_GetInformation() + + End Function + +'------------------------------------------------------------------------------------------------- +'Function Name: f_RemotePerfValue. +'Descripton: Get perform values at Remote Host. +'Input: No. +'Output: Values. +'------------------------------------------------------------------------------------------------- + Function f_RemotePerfValue() + + On Error Resume Next + + Set objSWbemLocator = CreateObject("WbemScripting.SWbemLocator") + if (strDomain = "") then + Set objWMIService = objSWbemLocator.ConnectServer _ + (strComputer, strNameSpace , strUser, strPass ) + f_Error() + + 'Set colInstances = objSWbemLocator.ConnectServer(strComputer, strNamespace , strUser, strPass).InstancesOf(strClass) + 'For Each objInstance in colInstances + 'Next + 'f_Error() + else + Set objWMIService = objSWbemLocator.ConnectServer _ + (strComputer, strNameSpace , strUser, strPass,"MS_409","ntlmdomain:" + strDomain ) + f_Error() + + 'Set colInstances = objSWbemLocator.ConnectServer(strComputer, strNamespace , strUser, strPass,"MS_409","ntlmdomain:" & strDomain ).InstancesOf(strClass) + 'For Each objInstance in colInstances + 'Next + 'f_Error() + end if + objWMIService.Security_.ImpersonationLevel = 3 + f_Error() + f_ExecQuery() + f_GetInstances() + f_GetInformation() + + End Function + +'************************************************************************************************* +' Main Function +'************************************************************************************************* + + '///////////////////// + + strCommandName="check_services_states.vbs" + strDescription="Check state of one or multi services." + + '///////////////////// + + strNameSpace = "root\cimv2" + strClass = "Win32_Service" + strProp = "Name, State, StartMode" + f_GetAllArg() + tempCount = argcountcommand/2 + f_Error() + + if ((UCase(arg(0))="-H") Or (UCase(arg(0))="--HELP")) and (argcountcommand=1) then + f_help() + else + if( ((argcountcommand Mod 2) = 0) and (1 < tempCount < 6)) then + strComputer = f_GetOneArg("-h") + strInst = f_GetOneArg("-inst") + strUser = f_GetOneArg("-user") + strPass = f_GetOneArg("-pass") + strDomain = f_GetOneArg("-domain") + if((strComputer = "") or (strInst = "")) then + Wscript.Echo "Error! Arguments wrong, require verify -h -inst parameters" + Wscript.Quit(intError) + else + Select Case tempCount + Case 2: + f_LocalPerfValue() + Case 4: + if ((strUser <> "") and (strPass <> "")) then + f_RemotePerfValue() + else + Wscript.Echo "Error! Arguments wrong, please verify -user -pass parameters" + Wscript.Quit(intError) + end if + Case 5: + if ((strUser <> "") and (strPass <> "") and (strDomain <> "")) then + f_RemotePerfValue() + else + Wscript.Echo "Error! Arguments wrong for remote check, please verify -w -c -user -pass -domain parameters" + Wscript.Quit(intError) + end if + Case Else + Wscript.Echo "Error! Arguments wrong, please type -h for Help" + Wscript.Quit(intError) + End Select + + end if + else + Wscript.Echo "Error! Arguments wrong, please type -h for Help" + Wscript.Quit(intError) + end if + + end if \ No newline at end of file diff --git a/nsclient/trunk/scripts/wmi/get_computer_info.vbs b/nsclient/trunk/scripts/wmi/get_computer_info.vbs new file mode 100644 index 0000000..99861ac --- /dev/null +++ b/nsclient/trunk/scripts/wmi/get_computer_info.vbs @@ -0,0 +1,601 @@ +' Copyright 2007 GroundWork Open Source Inc. +' +' This program is free software; you can redistribute it and/or +' modify it under the terms of the GNU General Public License +' as published by the Free Software Foundation; version 2 +' of the License. +' +' This program is distributed in the hope that it will be useful, +' but WITHOUT ANY WARRANTY; without even the implied warranty of +' MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +' GNU General Public License for more details. +' +' +' Author Dr. Dave Blunt at GroundWork Open Source Inc. (dblunt@groundworkopensource.com) + +'************************************************************************************************* +' Public Variable +'************************************************************************************************* +Const intOK = 0 +Const intUnknown = 3 +Const intError = 3 + +Dim argcountcommand +Dim arg(20) +Dim strComputer +Dim strUser +Dim strPass +Dim strNameSpace +Dim strDescription +Dim strCommandName +Dim strResultTemp +Dim strResult + +Dim ArgCount +Dim strArgMain(10) +Dim strArgSortDes(10) +Dim strArgDetailDes(10) +Dim strArgExample(10) + +strInfo="" + +'************************************************************************************************* +' Functions and Subs +'************************************************************************************************* + +'------------------------------------------------------------------------------------------------- +'Function Name: f_Error. +'Descripton: Display an error notice include : Error Number and Error Description. +'Input: No. +'Output: No. +'------------------------------------------------------------------------------------------------- + Function f_Error() + + nbrError = err.number + if (nbrError <> 0 ) then + Select Case nbrError + Case 462, -2147023174 + strExitMsg = "Timeout connecting to WMI on this host! Error Number: " & nbrError & " Description: " & err.description + Case -2147024891 + strExitMsg = "Authentication failure to remote host! Error Number: " & nbrError & " Description: " & err.description + Case -2147217392 + strExitMsg = "Error! Number: " & nbrError & " Description: Invalid Class" + Case Else + strExitMsg = "Error! Number: " & nbrError & " Description: " & err.description + End Select + wscript.echo strExitMsg + wscript.quit(intUnknown) + end if + + End Function + +'------------------------------------------------------------------------------------------------- +'Function Name: f_Help. +'Descripton: Display help of command include : Description, Arguments, Examples +'Input: No. +'Output: No. +'------------------------------------------------------------------------------------------------- + Function f_Help() + + Dim strHelp + + + Dim i + Dim strtemp1 + Dim strtemp2 + Dim strtemp3 + + strHelp="" + + strtemp1="" + strtemp2="" + strtemp3="" + + for i=1 to ArgCount + strtemp1=strtemp1 & " " & strArgMain(i) & " " & strArgSortDes(i) + strtemp2=strtemp2 & strArgMain(i) & " " & strArgSortDes(i) & " " & strArgDetailDes(i) & "." & vbCrlF + strtemp3=strtemp3 & " " & strArgMain(i) & " " & strArgExample(i) + next + + '///////////////////// + + strHelp=strHelp & strDescription & " If your Local Machine has the same Administrator account and password as the Remote Machine then you don't have to use the two (three) last parameters."&vbCrlF&vbCrlF + strHelp=strHelp & "cscript " & strCommandName & strtemp1 & " [-user username -pass password -domain domain]" + strHelp=strHelp & vbCrlF + strHelp=strHelp & strtemp2 + strHelp=strHelp & "-user username Account Administrator on Remote Machine." & vbCrlF + strHelp=strHelp & "-pass password Password Account Administrator on Remote Machine." & vbCrlF + strHelp=strHelp & "-domain domain Domain Name on Remote Machine." & vbCrlF + strHelp=strHelp & vbCrlF + strHelp=strHelp & "Example: cscript " & strCommandName & strtemp3 & " [-user Ser1\Administrator -pass password -domain workgroup]." & vbCrlF + strHelp=strHelp & vbCrlF + strHelp=strHelp & "For Help Command: cscript " & strCommandName & " -h (or --help)." & vbCrlF + strHelp=strHelp & vbCrlF + strHelp=strHelp & "Note: information can be one or multiple of network_interfaces, logical_disks, installed_services, running_processes, all_processors or *." & vbCrlF + strHelp=strHelp & "And if get multiple infomation, the information must be enclosed in multiple quotes and separate by commas." & vbCrlF + strHelp=strHelp & "Example: cscript get_computer_info.vbs -h Ser1 -i ""network_interfaces,logical_disks,install_services"" [-user SER1\Administrator -pass password] " & vbCrlF + Wscript.echo strHelp + + End Function +'------------------------------------------------------------------------------------------------- +'Function Name: f_GetAllArg. +'Descripton: Get all of arguments from command. +'Input: No. +'Output: No. +'------------------------------------------------------------------------------------------------- + Function f_GetAllArg() + + On Error Resume Next + + Dim i + + argcountcommand=WScript.Arguments.Count + + for i=0 to argcountcommand-1 + arg(i)=WScript.Arguments(i) + next + + End Function +'------------------------------------------------------------------------------------------------- +'Function Name: f_GetOneArg. +'Descripton: Get an argument from command. +'Input: Yes. +' strName: Name of argument +'Output: Value. +'------------------------------------------------------------------------------------------------- + Function f_GetOneArg(strName) + + On Error Resume Next + + Dim i + for i=0 to argcountcommand-1 + if (Ucase(arg(i))=Ucase(strName)) then + f_GetOneArg=arg(i+1) + Exit Function + end if + next + + End Function + +'------------------------------------------------------------------------------------------------- +'Function Name: f_TestLocalCommand. +'Descripton: Test structure of command run at local host. +'Input: No. +'Output: Yes. +'------------------------------------------------------------------------------------------------- + Function f_TestLocalCommand() + + On Error Resume Next + + Dim i,j + Dim temp + Dim count + Dim check(10) + + count=0 + + for j=1 to ArgCount + check(j)=0 + next + + if (argcountcommand<>ArgCount*2) then + f_TestLocalCommand=0 + else + for i=0 to argcountcommand-1 + if (i mod 2=0) then + temp=UCase(arg(i)) + for j=1 to ArgCount + if (temp=UCase(strArgMain)) and (check(j)=0) then + check(j)=1 + count=count+1 + j=ArgCount + end if + next + end if + next + if count=ArgCount then + f_TestLocalCommand=1 + else + f_TestLocalCommand=0 + end if + end if + + End Function +'------------------------------------------------------------------------------------------------- +'Function Name: f_TestRemoteCommand. +'Descripton: Test structure of command run at remote host. +'Input: No. +'Output: Yes. +'------------------------------------------------------------------------------------------------- + Function f_TestRemoteCommand() + + On Error Resume Next + + Dim i,j + Dim temp + Dim count + Dim check(10) + Dim extra(5) + + count=0 + + for j=1 to ArgCount + check(j)=0 + next + + for j=1 to 3 + extra(j)=0 + next + + + if (argcountcommand=(ArgCount+2)*2) or (argcountcommand=(ArgCount+3)*2) then + for i=0 to argcountcommand-1 + if (i mod 2=0) then + temp=UCase(arg(i)) + if (temp="-USER" and extra(1)=0) then + extra(1)=1 + count=count+1 + else + if (temp="-PASS" and extra(2)=0) then + extra(2)=1 + count=count+1 + else + if (temp="-DOMAIN" and extra(3)=0) then + extra(3)=1 + count=count+1 + else + for j=1 to ArgCount + if (temp=UCase(strArgMain)) and (check(j)=0) then + check(j)=1 + count=count+1 + j=ArgCount + end if + next + end if + end if + end if + end if + next + if (count*2=argcountcommand) then + f_TestRemoteCommand=1 + else + f_TestRemoteCommand=0 + end if + + else + f_TestremoteCommand=0 + end if + + End Function + +'------------------------------------------------------------------------------------------------- +'Function Name: f_LocalInfo. +'Descripton: Get infomation at Local Host. +'Input: info. +'Output: No. +'------------------------------------------------------------------------------------------------- + Function f_LocalInfo(info) + + On Error Resume Next + + Dim objWMIService, colWMI,objWMI + strResultTemp = "" + strOut = "" + Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\" & strNameSpace) + f_Error() + 'Depend on strInfo parameters to get the result value + if(info = "*") then + Set colWMI = objWMIService.ExecQuery("Select * from Win32_PerfRawData_Tcpip_NetworkInterface") + for Each objWMI In colWMI + strOut = strOut & objWMI.Name & ", " + next + Set colWMI = objWMIService.ExecQuery("Select * from Win32_LogicalDisk") + for Each objWMI In colWMI + strOut1 = strOut1 & objWMI.Name & ", " + next + Set colWMI = objWMIService.ExecQuery("Select * from Win32_BaseService") + for Each objWMI In colWMI + strOut2 = strOut2 & objWMI.Name & ", " + next + Set colWMI = objWMIService.ExecQuery("Select * from Win32_Process") + for Each objWMI In colWMI + strOut3 = strOut3 & objWMI.Name & ", " + next + Set colWMI = objWMIService.ExecQuery("Select * from Win32_Processor") + for Each objWMI In colWMI + strOut4 = strOut4 & objWMI.Name & ", " + next + strResultTemp = "; Network Interfaces: " & strOut & "; Logical Disks: " & strOut1 &_ + "; Installed services: " & strOut2 & "; Running Processes: " & strOut3 &_ + "; All Processors: " & strOut4 + Exit Function + end if + + if(info = "network_interfaces") then + Set colWMI = objWMIService.ExecQuery("Select * from Win32_PerfRawData_Tcpip_NetworkInterface") + for Each objWMI In colWMI + strOut = strOut & objWMI.Name & ", " + next + strResultTemp = "; Network Interfaces: " & strOut + Exit Function + else + if(info = "logical_disks") then + Set colWMI = objWMIService.ExecQuery("Select * from Win32_LogicalDisk") + for Each objWMI In colWMI + strOut = strOut & objWMI.Name & ", " + next + strResultTemp = "; Logical Disks: " & strOut + Exit Function + else + if(info = "installed_services") then + Set colWMI = objWMIService.ExecQuery("Select * from Win32_BaseService") + for Each objWMI In colWMI + strOut = strOut & objWMI.Name & ", " + next + strResultTemp = "; Installed Services: " & strOut + Exit Function + else + if(info = "running_processes") then + Set colWMI = objWMIService.ExecQuery("Select * from Win32_Process") + for Each objWMI In colWMI + strOut = strOut & objWMI.Name & ", " + next + strResultTemp = "; Running Processes: " & strOut + Exit Function + else + if(info = "all_processors") then + Set colWMI = objWMIService.ExecQuery("Select * from Win32_Processor") + for Each objWMI In colWMI + strOut = strOut & objWMI.Name & ", " + next + strResultTemp = "; All Processors: " & strOut + Exit Function + else + f_Error() + Wscript.echo "Error! Arguments are wrong." + Wscript.Quit(3) + end if + end if + end if + end if + end if + + End Function + +'------------------------------------------------------------------------------------------------- +'Function Name: f_RemoteInfo. +'Descripton: Get infomation at Remote Host. +'Input: info. +'Output: No. +'------------------------------------------------------------------------------------------------- + Function f_RemoteInfo(info) + + On Error Resume Next + + Dim objWMIService, colWMI,objWMI,objSWbemLocator + Dim strDomain + strResultTemp = "" + strOut = "" + + Set objSWbemLocator = CreateObject("WbemScripting.SWbemLocator") + + if ((ArgCount+2)*2=ArgCountCommand) then + Set objWMIService = objSWbemLocator.ConnectServer _ + (strComputer, strNameSpace , strUser, strPass ) + f_Error() + else + strDomain=f_GetOneArg("-domain") + Set objWMIService = objSWbemLocator.ConnectServer _ + (strComputer, strNameSpace , strUser, strPass,"MS_409","ntlmdomain:" + strDomain ) + f_Error() + end if + + objWMIService.Security_.ImpersonationLevel = 3 + f_Error() + 'Depend on strInfo parameters to get the result value + if(info = "*") then + Set colWMI = objWMIService.ExecQuery("Select * from Win32_PerfRawData_Tcpip_NetworkInterface") + for Each objWMI In colWMI + strOut = strOut & objWMI.Name & ", " + next + Set colWMI = objWMIService.ExecQuery("Select * from Win32_LogicalDisk") + for Each objWMI In colWMI + strOut1 = strOut1 & objWMI.Name & ", " + next + Set colWMI = objWMIService.ExecQuery("Select * from Win32_BaseService") + for Each objWMI In colWMI + strOut2 = strOut2 & objWMI.Name & ", " + next + Set colWMI = objWMIService.ExecQuery("Select * from Win32_Process") + for Each objWMI In colWMI + strOut3 = strOut3 & objWMI.Name & ", " + next + Set colWMI = objWMIService.ExecQuery("Select * from Win32_Processor") + for Each objWMI In colWMI + strOut4 = strOut4 & objWMI.Name & ", " + next + strResultTemp = "; Network Interfaces: " & strOut & "; Logical Disks: " & strOut1 &_ + "; Installed services: " & strOut2 & "; Running Processes: " & strOut3 &_ + "; All Processors: " & strOut4 + Exit Function + end if + + if(info = "network_interfaces") then + Set colWMI = objWMIService.ExecQuery("Select * from Win32_PerfRawData_Tcpip_NetworkInterface") + for Each objWMI In colWMI + strOut = strOut & objWMI.Name & ", " + next + strResultTemp = "; Network Interfaces: " & strOut + Exit Function + else + if(info = "logical_disks") then + Set colWMI = objWMIService.ExecQuery("Select * from Win32_LogicalDisk") + for Each objWMI In colWMI + strOut = strOut & objWMI.Name & ", " + next + strResultTemp = "; Logical Disks: " & strOut + Exit Function + else + if(info = "installed_services") then + Set colWMI = objWMIService.ExecQuery("Select * from Win32_BaseService") + for Each objWMI In colWMI + strOut = strOut & objWMI.Name & ", " + next + strResultTemp = "; Installed Services: " & strOut + Exit Function + else + if(info = "running_processes") then + Set colWMI = objWMIService.ExecQuery("Select * from Win32_Process") + for Each objWMI In colWMI + strOut = strOut & objWMI.Name & ", " + next + strResultTemp = "; Running Processes: " & strOut + Exit Function + else + if(info = "all_processors") then + Set colWMI = objWMIService.ExecQuery("Select * from Win32_Processor") + for Each objWMI In colWMI + strOut = strOut & objWMI.Name & ", " + next + strResultTemp = "; All Processors: " & strOut + Exit Function + else + f_Error() + Wscript.echo "Error! Arguments are wrong." + Wscript.Quit(3) + end if + end if + end if + end if + end if + + End Function + +'------------------------------------------------------------------------------------------------- +'Function Name: f_LocalPerfValue. +'Descripton: Get perform value at Local Host. +'Input: No. +'Output: No. +'------------------------------------------------------------------------------------------------- + Function f_LocalPerfValue() + + On Error Resume Next + strResult = "" + info = strInfo + 'sProcess = arg(3) + first=1 + tam1=10 + if (len(strInfo)>0) then + do while (tam1>0) + tam1=InStr(first,strInfo,",") + if (tam1>0) then + tam2=Mid(strInfo,first,tam1-first) + first=tam1+1 + info = tam2 + f_LocalInfo(Trim(info)) + strResult = strResult & strResultTemp + end if + Loop + tam2=Mid(strInfo,first,len(strInfo)) + info = tam2 + f_LocalInfo(Trim(info)) + strResult = strResult & strResultTemp + end if + strResult = "Host name: " & strComputer & strResult + Wscript.Echo strResult + Wscript.Quit(intOK) + End Function +'------------------------------------------------------------------------------------------------- +'Function Name: f_RemotePerfValue. +'Descripton: Get perform values at Remote Host. +'Input: No. +'Output: Values. +'------------------------------------------------------------------------------------------------- + Function f_RemotePerfValue() + + On Error Resume Next + + strResult = "" + info = strInfo + first=1 + tam1=10 + if (len(strInfo)>0) then + do while (tam1>0) + tam1=InStr(first,strInfo,",") + if (tam1>0) then + tam2=Mid(strInfo,first,tam1-first) + first=tam1+1 + info = tam2 + f_RemoteInfo(Trim(info)) + strResult = strResult & strResultTemp + end if + Loop + tam2=Mid(strInfo,first,len(strInfo)) + info = tam2 + f_RemoteInfo(Trim(info)) + strResult = strResult & strResultTemp + end if + strResult = "Host name: " & strComputer & strResult + Wscript.Echo strResult + Wscript.Quit(intOK) + + End Function +'************************************************************************************************* +' Main Function +'************************************************************************************************* + + '///////////////////// + + strCommandName="get_computer_info.vbs" + strDescription="Enumerate the needed windows host information." + + '///////////////////// + + ArgCount=2 + + strArgMain(1)= "-h" + strArgSortDes(1)= "hostname" + strArgDetailDes(1)= " Host name" + strArgExample(1)= "Ser1" + + strArgMain(2)= "-i" + strArgSortDes(2)= "information" + strArgDetailDes(2)= " The needed information" + strArgExample(2)= "installed_services" + + strNameSpace = "root\cimv2" + + f_GetAllArg() + f_Error() + + if ((UCase(arg(0))="-H") Or (UCase(arg(0))="--HELP")) and (argcountcommand=1) then + f_help() + else + if (f_TestLocalCommand()) then + strComputer=f_GetOneArg("-h") + if(strComputer = "localhost") then + strComputer = "." + Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2") + Set colItems = objWMIService.ExecQuery("Select * from Win32_ComputerSystem",,48) + For Each objItem in colItems + strComputer = objItem.DNSHostName + Next + end if + strInfo=f_GetOneArg("-i") + f_LocalPerfValue() + f_Error() + else + if (f_TestRemoteCommand()) then + strComputer=f_GetOneArg("-h") + strInfo=f_GetOneArg("-i") + strUser=f_GetOneArg("-user") + strPass=f_GetOneArg("-pass") + f_RemotePerfValue() + f_Error() + else + f_Error() + Wscript.echo "Error! Arguments are wrong." + Wscript.Quit(intError) + end if + end if + end if \ No newline at end of file diff --git a/nsclient/trunk/scripts/wmi/get_counter_type.vbs b/nsclient/trunk/scripts/wmi/get_counter_type.vbs new file mode 100644 index 0000000..311b72c --- /dev/null +++ b/nsclient/trunk/scripts/wmi/get_counter_type.vbs @@ -0,0 +1,141 @@ +' Copyright 2007 GroundWork Open Source Inc. +' +' This program is free software; you can redistribute it and/or +' modify it under the terms of the GNU General Public License +' as published by the Free Software Foundation; version 2 +' of the License. +' +' This program is distributed in the hope that it will be useful, +' but WITHOUT ANY WARRANTY; without even the implied warranty of +' MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +' GNU General Public License for more details. +' +' +' Author Dr. Dave Blunt at GroundWork Open Source Inc. (dblunt@groundworkopensource.com) + +'************************************************************************************************* +' Public Variable +'************************************************************************************************* +Const intOK = 0 +Const intCritical = 2 +Const intError = 3 +Const intUnknown = 3 + +Dim arg(20) +i = 0 +strComputer = "." +strNamespace = "root\cimv2" +strClass="Win32_Service" +strProperty = "" +strUser = "" +strPass = "" + +strNameList = "" +countertypeFound = 0 + +'************************************************************************************************* +' Functions and Subs +'************************************************************************************************* + +'------------------------------------------------------------------------------------------------- +'Function Name: f_Error. +'Descripton: Display an error notice include : Error Number and Error Description. +'Input: No. +'Output: No. +'------------------------------------------------------------------------------------------------- + Function f_Error() + + nbrError = err.number + if (nbrError <> 0 ) then + Select Case nbrError + Case 462, -2147023174 + strExitMsg = "Timeout connecting to WMI on this host! Error Number: " & nbrError & " Description: " & err.description + Case -2147024891 + strExitMsg = "Authentication failure to remote host! Error Number: " & nbrError & " Description: " & err.description + Case -2147217392 + strExitMsg = "Error! Number: " & nbrError & " Description: Invalid Class" + Case Else + strExitMsg = "Error! Number: " & nbrError & " Description: " & err.description + End Select + wscript.echo strExitMsg + wscript.quit(intUnknown) + end if + + End Function + + +'************************************************************************************************* +' Main Function +'************************************************************************************************* +On Error Resume Next +For i=0 to WScript.Arguments.Count-1 + arg(i)=WScript.Arguments( i ) +Next + + +if (i=3) then + strComputer=arg(0) + strClass=arg(1) + strProperty=arg(2) +else + if (i=5) then + strComputer=arg(0) + strClass=arg(1) + strProperty=arg(2) + strUser=arg(3) + strPass=arg(4) + else + if (i=2) then + strComputer=arg(0) + strClass=arg(1) + else + if (i=4) then + strComputer=arg(0) + strClass=arg(1) + strUser=arg(2) + strPass=arg(3) + else + wscript.echo "Usage: get_counter_type.vbs [] [ ]" + wscript.quit(3) + end if + end if + end if +end if + + +if (strUser <> "") then + Set objSWbemLocator = CreateObject("WbemScripting.SWbemLocator") + Set objWMIService = objSWbemLocator.ConnectServer _ + (strComputer, strNamespace , strUser, strPass ) + f_Error() + Set objClass = objWMIService.Get(strClass) + f_Error() +else + set objWMIService = GetObject("winmgmts:\\" & strComputer & "\" & strNamespace) + f_Error() + set objClass = GetObject("winmgmts:\\" & strComputer & "\" & strNamespace & ":" & strClass) +end if +f_Error() + +For Each objClassProperty In objClass.Properties_ + If (strProperty<>"") Then + If objClassProperty.Name = strProperty Then + For Each objQualifier in ObjClassProperty.Qualifiers_ + If objQualifier.Name = "countertype" Then + countertypeFound = 1 + wscript.echo "Property " & objClassProperty.Name & " countertype = " & objQualifier.Value + End If + Next + End If + Else + strNameList = strNameList & objClassProperty.Name & " " + End If +Next + +if (strProperty="") then + wscript.echo strNameList +else + if (countertypeFound=0) then + wscript.echo "Property " & strProperty & " does not have a defined countertype." + end if +end if \ No newline at end of file diff --git a/nsclient/trunk/scripts/wmi/verify_wmi_status.vbs b/nsclient/trunk/scripts/wmi/verify_wmi_status.vbs new file mode 100644 index 0000000..3c886e1 --- /dev/null +++ b/nsclient/trunk/scripts/wmi/verify_wmi_status.vbs @@ -0,0 +1,329 @@ +' Copyright 2007 GroundWork Open Source Inc. +' +' This program is free software; you can redistribute it and/or +' modify it under the terms of the GNU General Public License +' as published by the Free Software Foundation; version 2 +' of the License. +' +' This program is distributed in the hope that it will be useful, +' but WITHOUT ANY WARRANTY; without even the implied warranty of +' MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +' GNU General Public License for more details. +' +' +' Author Dr. Dave Blunt at GroundWork Open Source Inc. (dblunt@groundworkopensource.com) + +'************************************************************************************************* +' Public Variable +'************************************************************************************************* +Const intOK = 0 +Const intCritical = 2 +Const intError = 3 +Const intUnknown = 3 + +Dim argcountcommand +Dim arg(20) +Dim strComputer +Dim strClass +Dim strProp +Dim strUser +Dim strPass +Dim strDomain +Dim strNameSpace +Dim strDescription +Dim strCommandName +Dim strResultTemp +Dim strResult +Dim strResult1 +Dim strResult2 +Dim intReturnTemp +Dim intReturn +Dim strResultTemp1 +Dim strResultTemp2 +Dim strResultTemp3 +Dim strResultTemp4 +Dim intReturnTemp1 +Dim strPrefix +Dim intValue +Dim returnValue +Dim instanceArray() +Dim instanceArraySize +Dim thresoldArraySize +Dim instance + +Dim strDisplay1 +Dim strDisplay2 +Dim strName +Dim strPropName +Dim intAverageValue + +Dim ArgCount +Dim strArgMain(10) +Dim strArgSortDes(10) +Dim strArgDetailDes(10) +Dim strArgExample(10) + +Dim objWMIService, colWMI,objWMI,objSWbemLocator + +strComputer="" +strClass = "" +strProp = "" +strUser = "" +strPass = "" +strDomain = "" +'************************************************************************************************* +' Functions and Subs +'************************************************************************************************* + +'------------------------------------------------------------------------------------------------- +'Function Name: f_Error. +'Descripton: Display an error notice include : Error Number and Error Description. +'Input: No. +'Output: No. +'------------------------------------------------------------------------------------------------- + Function f_Error() + + nbrError = err.number + if (nbrError <> 0 ) then + Select Case nbrError + Case 462, -2147023174 + strExitMsg = "Timeout connecting to WMI on this host! Error Number: " & nbrError & " Description: " & err.description + Case -2147024891 + strExitMsg = "Authentication failure to remote host! Error Number: " & nbrError & " Description: " & err.description + Case -2147217392 + strExitMsg = "Error! Number: " & nbrError & " Description: Invalid Class" + Case Else + strExitMsg = "Error! Number: " & nbrError & " Description: " & err.description + End Select + wscript.echo strExitMsg + wscript.quit(intUnknown) + end if + + End Function + +'------------------------------------------------------------------------------------------------- +'Function Name: f_Help. +'Descripton: Display help of command include : Description, Arguments, Examples +'Input: No. +'Output: No. +'------------------------------------------------------------------------------------------------- + Function f_Help() + + Dim str + str="Verify connection to target host via WMI. If your Local Machine has the same Administrator account and password as the Remote Machine then you don't have to use the two last parameters."&vbCrlF&vbCrlF + str=str&"cscript verify_wmi_status.vbs -h hostname [-user username -pass password [-domain domain]]"&vbCrlF + str=str&vbCrlF + str=str&"-h [--help] Help."&vbCrlF + str=str&"-h hostname Host name."&vbCrlF + str=str&"-user username Account Administrator on Remote Machine."&vbCrlF + str=str&"-pass password Password Account Administrator on Remote Machine."&vbCrlF + str=str&"-domain domain Domain Name of Remote Machine."&vbCrlF + str=str&vbCrlF + str=str&"Example: cscript verify_wmi_status.vbs -h Ser1 [-user Ser1\Administrator -pass password -domain ITSP] " &vbCrlF + wscript.echo str + + End Function +'------------------------------------------------------------------------------------------------- +'Function Name: f_GetAllArg. +'Descripton: Get all of arguments from command. +'Input: No. +'Output: No. +'------------------------------------------------------------------------------------------------- + Function f_GetAllArg() + + On Error Resume Next + + Dim i + + argcountcommand=WScript.Arguments.Count + + for i=0 to argcountcommand-1 + arg(i)=WScript.Arguments(i) + next + + End Function +'------------------------------------------------------------------------------------------------- +'Function Name: f_GetOneArg. +'Descripton: Get an argument from command. +'Input: Yes. +' strName: Name of argument +'Output: Value. +'------------------------------------------------------------------------------------------------- + Function f_GetOneArg(strName) + + On Error Resume Next + + Dim i + for i=0 to argcountcommand-1 + if (Ucase(arg(i))=Ucase(strName)) then + f_GetOneArg=arg(i+1) + Exit Function + end if + next + + End Function + +'------------------------------------------------------------------------------------------------- +'Function Name: f_ExecQuery. +'Descripton: Format data the same as output. +'Input: service. +'Output: No. +'------------------------------------------------------------------------------------------------- + Function f_ExecQuery() + + On Error Resume Next + + strQuery = "Select " & strProp & " from " & strClass + Set colWMI = objWMIService.ExecQuery(strQuery) + count = -1 + count = colWMI.count + if(count = -1) then + Wscript.Echo "Error! Invalid " & strProp & " properties." + Wscript.Quit(intError) + end if + + End Function + +'------------------------------------------------------------------------------------------------- +'Function Name: f_GetInformation. +'Descripton: Get information data. +'Input: No. +'Output: Values. +'------------------------------------------------------------------------------------------------- + Function f_GetInformation() + + On Error Resume Next + + strResult = "" + intReturn = 0 + + for Each objInstance in colWMI + strResult = strResult & "" & objInstance.Caption & ", SP " & objInstance.ServicePackMajorVersion & "." & objInstance.ServicePackMinorVersion + Next + strResult = "OK - " & strResult + Wscript.Echo strResult + Wscript.Quit(intReturn) + + End Function + + +'------------------------------------------------------------------------------------------------- +'Function Name: f_LocalPerfValue. +'Descripton: Get perform value at Local Host. +'Input: No. +'Output: No. +'------------------------------------------------------------------------------------------------- + Function f_LocalPerfValue() + + On Error Resume Next + + Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\" & strNameSpace) + f_Error() + Set colInstances = GetObject("winmgmts:{impersonationLevel=impersonate}\\" & strComputer & "\" & strNameSpace).InstancesOf(strClass) + For Each objInstance in colInstances + Next + f_Error() + + f_ExecQuery() + f_GetInformation() + + End Function + +'------------------------------------------------------------------------------------------------- +'Function Name: f_RemotePerfValue. +'Descripton: Get perform values at Remote Host. +'Input: No. +'Output: Values. +'------------------------------------------------------------------------------------------------- + Function f_RemotePerfValue() + + On Error Resume Next + + Set objSWbemLocator = CreateObject("WbemScripting.SWbemLocator") + if (strDomain = "") then + Set objWMIService = objSWbemLocator.ConnectServer _ + (strComputer, strNameSpace , strUser, strPass ) + f_Error() + + Set colInstances = objSWbemLocator.ConnectServer(strComputer, strNamespace , strUser, strPass).InstancesOf(strClass) + For Each objInstance in colInstances + Next + f_Error() + else + Set objWMIService = objSWbemLocator.ConnectServer _ + (strComputer, strNameSpace , strUser, strPass,"MS_409","ntlmdomain:" + strDomain ) + f_Error() + + Set colInstances = objSWbemLocator.ConnectServer(strComputer, strNamespace , strUser, strPass,"MS_409","ntlmdomain:" & strDomain ).InstancesOf(strClass) + For Each objInstance in colInstances + Next + f_Error() + end if + objWMIService.Security_.ImpersonationLevel = 3 + f_Error() + + f_ExecQuery() + f_GetInstances() + f_GetInformation() + + End Function + +'************************************************************************************************* +' Main Function +'************************************************************************************************* + + '///////////////////// + + strCommandName="verify_wmi_status.vbs" + strDescription="Verify target host WMI status." + + '///////////////////// + + strNameSpace = "root\cimv2" + strClass = "Win32_OperatingSystem" + strProp = "Caption,ServicePackMajorVersion,ServicePackMinorVersion" + f_GetAllArg() + tempCount = argcountcommand/2 + f_Error() + + if ((UCase(arg(0))="-H") Or (UCase(arg(0))="--HELP")) and (argcountcommand=1) then + f_help() + else + if( ((argcountcommand Mod 2) = 0) and (1 < tempCount < 5)) then + strComputer = f_GetOneArg("-h") + strUser = f_GetOneArg("-user") + strPass = f_GetOneArg("-pass") + strDomain = f_GetOneArg("-domain") + if((strComputer = "")) then + Wscript.Echo "Error! Arguments wrong, require verify -h parameter" + Wscript.Quit(intError) + else + Select Case tempCount + Case 1: + f_LocalPerfValue() + Case 3: + if ((strUser <> "") and (strPass <> "")) then + f_RemotePerfValue() + else + Wscript.Echo "Error! Arguments wrong, please verify -user -pass parameters" + Wscript.Quit(intError) + end if + Case 4: + if ((strUser <> "") and (strPass <> "") and (strDomain <> "")) then + f_RemotePerfValue() + else + Wscript.Echo "Error! Arguments wrong, please verify -user -pass -domain parameters" + Wscript.Quit(intError) + end if + Case Else + Wscript.Echo "Error! Arguments wrong, please type -h for Help" + Wscript.Quit(intError) + End Select + + end if + else + Wscript.Echo "Error! Arguments wrong, please type -h for Help" + Wscript.Quit(intError) + end if + + end if \ No newline at end of file diff --git a/nsclient/trunk/wmi.ini b/nsclient/trunk/wmi.ini new file mode 100644 index 0000000..0d885ec --- /dev/null +++ b/nsclient/trunk/wmi.ini @@ -0,0 +1,182 @@ + + +[External Scripts] +# ================================= +# Enumeration checks +# ================================= +show_net=cscript.exe //nologo //T:60 c:\nrpe_nt\plugins\v2\get_computer_info.vbs -h "$ARG1$" -i network_interfaces +show_net_auth=cscript.exe //nologo //T:60 c:\nrpe_nt\plugins\v2\get_computer_info.vbs -h "$ARG1$" -i network_interfaces -user "$ARG2$" -pass "$ARG3$" +show_disks=cscript.exe //nologo //T:60 c:\nrpe_nt\plugins\v2\get_computer_info.vbs -h "$ARG1$" -i logical_disks +show_disks_auth=cscript.exe //nologo //T:60 c:\nrpe_nt\plugins\v2\get_computer_info.vbs -h "$ARG1$" -i logical_disks -user "$ARG2$" -pass "$ARG3$" +show_procs=cscript.exe //nologo //T:60 c:\nrpe_nt\plugins\v2\get_computer_info.vbs -h "$ARG1$" -i running_processes +show_procs_auth=cscript.exe //nologo //T:60 c:\nrpe_nt\plugins\v2\get_computer_info.vbs -h "$ARG1$" -i running_processes -user "$ARG2$" -pass "$ARG3$" +show_cpus=cscript.exe //nologo //T:60 c:\nrpe_nt\plugins\v2\get_computer_info.vbs -h "$ARG1$" -i all_processors +show_cpus_auth=cscript.exe //nologo //T:60 c:\nrpe_nt\plugins\v2\get_computer_info.vbs -h "$ARG1$" -i all_processors -user "$ARG2$" -pass "$ARG3$" +show_properties=cscript.exe //nologo //T:60 c:\nrpe_nt\plugins\v2\get_counter_type.vbs "$ARG1$" "$ARG2$" +show_properties_auth=cscript.exe //nologo //T:60 c:\nrpe_nt\plugins\v2\get_counter_type.vbs "$ARG1$" "$ARG2$" "$ARG3$" "$ARG4$" +show_property_type=cscript.exe //nologo //T:60 c:\nrpe_nt\plugins\v2\get_counter_type.vbs "$ARG1$" "$ARG2$" "$ARG3$" +show_property_type_auth=cscript.exe //nologo //T:60 c:\nrpe_nt\plugins\v2\get_counter_type.vbs "$ARG1$" "$ARG2$" "$ARG3$" "$ARG4$" "$ARG5$" +show_os=cscript.exe //nologo //T:60 c:\nrpe_nt\plugins\v2\verify_wmi_status.vbs -h "$ARG1$" +show_os_auth=cscript.exe //nologo //T:60 c:\nrpe_nt\plugins\v2\verify_wmi_status.vbs -h "$ARG1$" -user "$ARG2$" -pass "$ARG3$" + +# Example calls from check_nrpe: +# ./check_nrpe -H -c show_properties -a Win32_PerfRawData_PerfOS_Memory +# ./check_nrpe -H -c show_property_type -a Win32_PerfRawData_PerfOS_Memory WriteCopiesPersec + +# ================================= +# Disk percentage used checks +# ================================= +get_disk=cscript.exe //nologo //T:60 c:\nrpe_nt\plugins\v2\check_disks_percentage_space_used.vbs -h "$ARG1$" -inst "$ARG2$" -t "$ARG3$" +get_disk_auth=cscript.exe //nologo //T:60 c:\nrpe_nt\plugins\v2\check_disks_percentage_space_used.vbs -h "$ARG1$" -inst "$ARG2$" -t "$ARG3$" -user "$ARG4$" -pass "$ARG5$" + +# Example call from check_nrpe: +# ./check_nrpe -H -c get_disk -a C:,D: 80,90:70,60 + +# ================================= +# Memory percentage used checks +# ================================= +get_mem=cscript.exe //nologo //T:60 c:\nrpe_nt\plugins\v2\check_memory_percentage_space_used.vbs -h "$ARG1$" -inst "$ARG2$" -t "$ARG3$" +get_mem_auth=cscript.exe //nologo //T:60 c:\nrpe_nt\plugins\v2\check_memory_percentage_space_used.vbs -h "$ARG1$" -inst "$ARG2$" -t "$ARG3$" -user "$ARG4$" -pass "$ARG5$" + +# Example call from check_nrpe: +# ./check_nrpe -H -c get_mem -a RAM,_TOTAL 80,90:80,90 + +# ================================= +# CPU Load checks +# ================================= +get_cpu=cscript.exe //nologo //T:60 c:\nrpe_nt\plugins\v2\check_cpu_load_percentage.vbs -h "$ARG1$" -inst "$ARG2$" -t "$ARG3$" +get_cpu_auth=cscript.exe //nologo //T:60 c:\nrpe_nt\plugins\v2\check_cpu_load_percentage.vbs -h "$ARG1$" -inst "$ARG2$" -t "$ARG3$" -user "$ARG4$" -pass "$ARG5$" + +# Example call from check_nrpe: +# ./check_nrpe -H -c get_cpu -a CPU0 80,90 + +# ================================= +# Network IO checks +# ================================= +get_netio=cscript.exe //nologo //T:60 c:\nrpe_nt\plugins\v2\check_network_io.vbs -h "$ARG1$" -inst "$ARG2$" -prop "$ARG3$" -t "$ARG4$" +get_netio_auth=cscript.exe //nologo //T:60 c:\nrpe_nt\plugins\v2\check_network_io.vbs -h "$ARG1$" -inst "$ARG2$" -prop "$ARG3$" -t "$ARG4$" -user "$ARG5$" -pass "$ARG6$" + +# Example call from check_nrpe: +# ./check_nrpe -H -c get_netio -a "MS TCP Loopback Interface" "BytesReceivedPerSec" 300,1000 + +# ================================= +# Disk IO checks +# ================================= +get_diskio=cscript.exe //nologo //T:60 c:\nrpe_nt\plugins\v2\check_disks_io.vbs -h "$ARG1$" -inst "$ARG2$" -prop "$ARG3$" -t "$ARG4$" +get_diskio_auth=cscript.exe //nologo //T:60 c:\nrpe_nt\plugins\v2\check_disks_io.vbs -h "$ARG1$" -inst "$ARG2$" -prop "$ARG3$" -t "$ARG4$" -user "$ARG5$" -pass "$ARG6$" + +# Example call from check_nrpe: +# ./check_nrpe -H -c get_diskio -a C: "DiskReadBytesPerSec,DiskWriteBytesPerSec" 300,1000:500,2000 + +# ================================= +# Service checks +# ================================= +get_service=cscript.exe //nologo //T:60 c:\nrpe_nt\plugins\v2\check_services_states.vbs -h "$ARG1$" -inst "$ARG2$" +get_service_auth=cscript.exe //nologo //T:60 c:\nrpe_nt\plugins\v2\check_services_states.vbs -h "$ARG1$" -inst "$ARG2$" -user "$ARG3$" -pass "$ARG4$" + +# Example call from check_nrpe: +# ./check_nrpe -H -c get_service -a winmgmt,msdtc + +# ================================= +# Process checks +# ================================= +get_process=cscript.exe //nologo //T:60 c:\nrpe_nt\plugins\v2\check_proc_num.vbs -h "$ARG1$" -inst "$ARG2$" -w "$ARG3$" -c "$ARG4$" +get_process_auth=cscript.exe //nologo //T:60 c:\nrpe_nt\plugins\v2\check_proc_num.vbs -h "$ARG1$" -inst "$ARG2$" -w "$ARG3$" -c "$ARG4$" -user "$ARG5$" -pass "$ARG6$" + +# Example call from check_nrpe: +# ./check_nrpe -H -c get_process -a Name=svchost.exe,Name=cmd.exe 15 20 +# (at present this plug-in does not support thresholds as minimums) + +# ================================= +# Counter checks +# ================================= +get_100nsec_timer=cscript.exe //nologo //T:60 c:\nrpe_nt\plugins\v2\check_100nsec_timer.vbs -h "$ARG1$" -class "$ARG2$" -inst "$ARG3$" -prop "$ARG4$" -w "$ARG5$" -c "$ARG6$" +get_100nsec_timer_auth=cscript.exe //nologo //T:60 c:\nrpe_nt\plugins\v2\check_100nsec_timer.vbs -h "$ARG1$" -class "$ARG2$" -inst "$ARG3$" -prop "$ARG4$" -w "$ARG5$" -c "$ARG6$" -user "$ARG7$" -pass "$ARG8$" +get_counter_bulk_count=cscript.exe //nologo //T:60 c:\nrpe_nt\plugins\v2\check_counter_bulk_count.vbs -h "$ARG1$" -class "$ARG2$" -inst "$ARG3$" -prop "$ARG4$" -w "$ARG5$" -c "$ARG6$" +get_counter_bulk_count_auth=cscript.exe //nologo //T:60 c:\nrpe_nt\plugins\v2\check_counter_bulk_count.vbs -h "$ARG1$" -class "$ARG2$" -inst "$ARG3$" -prop "$ARG4$" -w "$ARG5$" -c "$ARG6$" -user "$ARG7$" -pass "$ARG8$" +get_counter_counter=cscript.exe //nologo //T:60 c:\nrpe_nt\plugins\v2\check_counter_counter.vbs -h "$ARG1$" -class "$ARG2$" -inst "$ARG3$" -prop "$ARG4$" -w "$ARG5$" -c "$ARG6$" +get_counter_counter_auth=cscript.exe //nologo //T:60 c:\nrpe_nt\plugins\v2\check_counter_counter.vbs -h "$ARG1$" -class "$ARG2$" -inst "$ARG3$" -prop "$ARG4$" -w "$ARG5$" -c "$ARG6$" -user "$ARG7$" -pass "$ARG8$" +get_counter_large_rawcount=cscript.exe //nologo //T:60 c:\nrpe_nt\plugins\v2\check_counter_large_rawcount.vbs -h "$ARG1$" -class "$ARG2$" -inst "$ARG3$" -prop "$ARG4$" -w "$ARG5$" -c "$ARG6$" +get_counter_large_rawcount_auth=cscript.exe //nologo //T:60 c:\nrpe_nt\plugins\v2\check_counter_large_rawcount.vbs -h "$ARG1$" -class "$ARG2$" -inst "$ARG3$" -prop "$ARG4$" -w "$ARG5$" -c "$ARG6$" -user "$ARG7$" -pass "$ARG8$" +get_counter_rawcount=cscript.exe //nologo //T:60 c:\nrpe_nt\plugins\v2\check_counter_rawcount.vbs -h "$ARG1$" -class "$ARG2$" -inst "$ARG3$" -prop "$ARG4$" -w "$ARG5$" -c "$ARG6$" +get_counter_rawcount_auth=cscript.exe //nologo //T:60 c:\nrpe_nt\plugins\v2\check_counter_rawcount.vbs -h "$ARG1$" -class "$ARG2$" -inst "$ARG3$" -prop "$ARG4$" -w "$ARG5$" -c "$ARG6$" -user "$ARG7$" -pass "$ARG8$" +get_raw_fraction=cscript.exe //nologo //T:60 c:\nrpe_nt\plugins\v2\check_raw_fraction.vbs -h "$ARG1$" -class "$ARG2$" -inst "$ARG3$" -prop "$ARG4$" -w "$ARG5$" -c "$ARG6$" +get_raw_fraction_auth=cscript.exe //nologo //T:60 c:\nrpe_nt\plugins\v2\check_raw_fraction.vbs -h "$ARG1$" -class "$ARG2$" -inst "$ARG3$" -prop "$ARG4$" -w "$ARG5$" -c "$ARG6$" -user "$ARG7$" -pass "$ARG8$" + +# Example calls from check_nrpe: +# ./check_nrpe -H -c get_100nsec_timer -a Win32_PerfRawData_PerfOS_Processor Name=_Total PercentUserTime 80 90 +# ./check_nrpe -H -c get_counter_bulk_count -a Win32_PerfRawData_PerfOS_System '*' FileControlBytesPerSec 50000 100000 +# ./check_nrpe -H -c get_counter_counter -a Win32_PerfRawData_PerfOS_Processor Name=0,Name=1 InterruptsPerSec 20000 30000 +# ./check_nrpe -H -c get_counter_large_rawcount -a Win32_PerfRawData_PerfProc_Process Name=spoolsv WorkingSet 10000000 20000000 +# ./check_nrpe -H -c get_counter_rawcount -a Win32_PerfRawData_PerfProc_Process Name=spoolsv HandleCount 200 400 +# ./check_nrpe -H -c get_raw_fraction -a Win32_PerfRawData_PerfDisk_LogicalDisk Name=C: PercentFreeSpace 40 60 + +# Note: The above counter plug-ins are also used further below for obtaining information about specific Windows applications. At present the +# plug-ins don't supprt thresholds as minimums. Refer to http://windowssdk.msdn.microsoft.com/en-us/library/ms758298.aspx +# for documentation on performance counter types. + +# ================================= +# Updated checks from V1 +# ================================= +get_swapping=cscript.exe //nologo //T:60 c:\nrpe_nt\plugins\v2\check_counter_counter.vbs -h "$ARG1$" -class "Win32_PerfRawData_PerfOS_Memory" -inst "*" -prop "PagesPerSec" -w "$ARG2$" -c "$ARG3$" +get_swapping_auth=cscript.exe //nologo //T:60 c:\nrpe_nt\plugins\v2\check_counter_counter.vbs -h "$ARG1$" -class "Win32_PerfRawData_PerfOS_Memory" -inst "*" -prop "PagesPerSec" -w "$ARG2$" -c "$ARG3$" -user "$ARG4$" -pass "$ARG5$" +get_disktransfers=cscript.exe //nologo //T:60 c:\nrpe_nt\plugins\v2\check_counter_counter.vbs -h "$ARG1$" -class "Win32_PerfRawData_PerfDisk_PhysicalDisk" -inst "$ARG2$" -prop "DiskTransfersPersec" -w "$ARG3$" -c "$ARG4$" +get_disktransfers_auth=cscript.exe //nologo //T:60 c:\nrpe_nt\plugins\v2\check_counter_counter.vbs -h "$ARG1$" -class "Win32_PerfRawData_PerfDisk_PhysicalDisk" -inst "$ARG2$" -prop "DiskTransfersPersec" -w "$ARG3$" -c "$ARG4$" -user "$ARG5$" -pass "$ARG6$" +get_printqueue=cscript.exe //nologo //T:60 c:\nrpe_nt\plugins\v2\check_counter_rawcount.vbs -h "$ARG1$" -class "Win32_PerfRawData_Spooler_PrintQueue" -inst "$ARG2$" -prop "Jobs" -w "$ARG3$" -c "$ARG4$" +get_printqueue_auth=cscript.exe //nologo //T:60 c:\nrpe_nt\plugins\v2\check_counter_rawcount.vbs -h "$ARG1$" -class "Win32_PerfRawData_Spooler_PrintQueue" -inst "$ARG2$" -prop "Jobs" -w "$ARG3$" -c "$ARG4$" -user "$ARG5$" -pass "$ARG6$" + +get_exchange_mbox_recvq=cscript.exe //nologo //T:60 c:\nrpe_nt\plugins\v2\check_counter_rawcount.vbs -h "$ARG1$" -class "Win32_PerfRawData_MSExchangeIS_MSExchangeISMailbox" -inst "Name=_Total" -prop "ReceiveQueueSize" -w "$ARG2$" -c "$ARG3$" +get_exchange_mbox_recvq_auth=cscript.exe //nologo //T:60 c:\nrpe_nt\plugins\v2\check_counter_rawcount.vbs -h "$ARG1$" -class "Win32_PerfRawData_MSExchangeIS_MSExchangeISMailbox" -inst "Name=_Total" -prop "ReceiveQueueSize" -w "$ARG2$" -c "$ARG3$" -user "$ARG4$" -pass "$ARG5$" +get_exchange_mbox_sendq=cscript.exe //nologo //T:60 c:\nrpe_nt\plugins\v2\check_counter_rawcount.vbs -h "$ARG1$" -class "Win32_PerfRawData_MSExchangeIS_MSExchangeISMailbox" -inst "Name=_Total" -prop "SendQueueSize" -w "$ARG2$" -c "$ARG3$" +get_exchange_mbox_sendq_auth=cscript.exe //nologo //T:60 c:\nrpe_nt\plugins\v2\check_counter_rawcount.vbs -h "$ARG1$" -class "Win32_PerfRawData_MSExchangeIS_MSExchangeISMailbox" -inst "Name=_Total" -prop "SendQueueSize" -w "$ARG2$" -c "$ARG3$" -user "$ARG4$" -pass "$ARG5$" +get_exchange_pub_recvq=cscript.exe //nologo //T:60 c:\nrpe_nt\plugins\v2\check_counter_rawcount.vbs -h "$ARG1$" -class "Win32_PerfRawData_MSExchangeIS_MSExchangeISPublic" -inst "Name=_Total" -prop "ReceiveQueueSize" -w "$ARG2$" -c "$ARG3$" +get_exchange_pub_recvq_auth=cscript.exe //nologo //T:60 c:\nrpe_nt\plugins\v2\check_counter_rawcount.vbs -h "$ARG1$" -class "Win32_PerfRawData_MSExchangeIS_MSExchangeISPublic" -inst "Name=_Total" -prop "ReceiveQueueSize" -w "$ARG2$" -c "$ARG3$" -user "$ARG4$" -pass "$ARG5$" +get_exchange_pub_sendq=cscript.exe //nologo //T:60 c:\nrpe_nt\plugins\v2\check_counter_rawcount.vbs -h "$ARG1$" -class "Win32_PerfRawData_MSExchangeIS_MSExchangeISPublic" -inst "Name=_Total" -prop "SendQueueSize" -w "$ARG2$" -c "$ARG3$" +get_exchange_pub_sendq_auth=cscript.exe //nologo //T:60 c:\nrpe_nt\plugins\v2\check_counter_rawcount.vbs -h "$ARG1$" -class "Win32_PerfRawData_MSExchangeIS_MSExchangeISPublic" -inst "Name=_Total" -prop "SendQueueSize" -w "$ARG2$" -c "$ARG3$" -user "$ARG4$" -pass "$ARG5$" +get_exchange_mta_workq=cscript.exe //nologo //T:60 c:\nrpe_nt\plugins\v2\check_counter_rawcount.vbs -h "$ARG1$" -class "Win32_PerfRawData_MSExchangeMTA_MSExchangeMTA" -inst "*" -prop "WorkQueueLength" -w "$ARG2$" -c "$ARG3$" +get_exchange_mta_workq_auth=cscript.exe //nologo //T:60 c:\nrpe_nt\plugins\v2\check_counter_rawcount.vbs -h "$ARG1$" -class "Win32_PerfRawData_MSExchangeMTA_MSExchangeMTA" -inst "*" -prop "WorkQueueLength" -w "$ARG2$" -c "$ARG3$" -user "$ARG4$" -pass "$ARG5$" + +get_iis_bytes_received=cscript.exe //nologo //T:60 c:\nrpe_nt\plugins\v2\check_counter_bulk_count.vbs -h "$ARG1$" -class "Win32_PerfRawData_W3SVC_WebService" -inst "$ARG2$" -prop "BytesReceivedPersec" -w "$ARG3$" -c "$ARG4$" +get_iis_bytes_received_auth=cscript.exe //nologo //T:60 c:\nrpe_nt\plugins\v2\check_counter_bulk_count.vbs -h "$ARG1$" -class "Win32_PerfRawData_W3SVC_WebService" -inst "$ARG2$" -prop "BytesReceivedPersec" -w "$ARG3$" -c "$ARG4$" -user "$ARG5$" -pass "$ARG6$" +get_iis_bytes_sent=cscript.exe //nologo //T:60 c:\nrpe_nt\plugins\v2\check_counter_bulk_count.vbs -h "$ARG1$" -class "Win32_PerfRawData_W3SVC_WebService" -inst "$ARG2$" -prop "BytesSentPersec" -w "$ARG3$" -c "$ARG4$" +get_iis_bytes_sent_auth=cscript.exe //nologo //T:60 c:\nrpe_nt\plugins\v2\check_counter_bulk_count.vbs -h "$ARG1$" -class "Win32_PerfRawData_W3SVC_WebService" -inst "$ARG2$" -prop "BytesSentPersec" -w "$ARG3$" -c "$ARG4$" -user "$ARG5$" -pass "$ARG6$" +get_iis_bytes_total=cscript.exe //nologo //T:60 c:\nrpe_nt\plugins\v2\check_counter_bulk_count.vbs -h "$ARG1$" -class "Win32_PerfRawData_W3SVC_WebService" -inst "$ARG2$" -prop "BytesTotalPersec" -w "$ARG3$" -c "$ARG4$" +get_iis_bytes_total_auth=cscript.exe //nologo //T:60 c:\nrpe_nt\plugins\v2\check_counter_bulk_count.vbs -h "$ARG1$" -class "Win32_PerfRawData_W3SVC_WebService" -inst "$ARG2$" -prop "BytesTotalPersec" -w "$ARG3$" -c "$ARG4$" -user "$ARG5$" -pass "$ARG6$" +get_iis_currentconnections=cscript.exe //nologo //T:60 c:\nrpe_nt\plugins\v2\check_counter_rawcount.vbs -h "$ARG1$" -class "Win32_PerfRawData_W3SVC_WebService" -inst "$ARG2$" -prop "CurrentConnections" -w "$ARG3$" -c "$ARG4$" +get_iis_currentconnections_auth=cscript.exe //nologo //T:60 c:\nrpe_nt\plugins\v2\check_counter_rawcount.vbs -h "$ARG1$" -class "Win32_PerfRawData_W3SVC_WebService" -inst "$ARG2$" -prop "CurrentConnections" -w "$ARG3$" -c "$ARG4$" -user "$ARG5$" -pass "$ARG6$" +get_iis_curnonanonusers=cscript.exe //nologo //T:60 c:\nrpe_nt\plugins\v2\check_counter_rawcount.vbs -h "$ARG1$" -class "Win32_PerfRawData_W3SVC_WebService" -inst "$ARG2$" -prop "CurrentNonAnonymousUsers" -w "$ARG3$" -c "$ARG4$" +get_iis_curnonanonusers_auth=cscript.exe //nologo //T:60 c:\nrpe_nt\plugins\v2\check_counter_rawcount.vbs -h "$ARG1$" -class "Win32_PerfRawData_W3SVC_WebService" -inst "$ARG2$" -prop "CurrentNonAnonymousUsers" -w "$ARG3$" -c "$ARG4$" -user "$ARG5$" -pass "$ARG6$" +get_iis_get_requests=cscript.exe //nologo //T:60 c:\nrpe_nt\plugins\v2\check_counter_counter.vbs -h "$ARG1$" -class "Win32_PerfRawData_W3SVC_WebService" -inst "$ARG2$" -prop "GetRequestsPersec" -w "$ARG3$" -c "$ARG4$" +get_iis_get_requests_auth=cscript.exe //nologo //T:60 c:\nrpe_nt\plugins\v2\check_counter_counter.vbs -h "$ARG1$" -class "Win32_PerfRawData_W3SVC_WebService" -inst "$ARG2$" -prop "GetRequestsPersec" -w "$ARG3$" -c "$ARG4$" -user "$ARG5$" -pass "$ARG6$" +get_iis_maximumconnections=cscript.exe //nologo //T:60 c:\nrpe_nt\plugins\v2\check_counter_rawcount.vbs -h "$ARG1$" -class "Win32_PerfRawData_W3SVC_WebService" -inst "$ARG2$" -prop "MaximumConnections" -w "$ARG3$" -c "$ARG4$" +get_iis_maximumconnections_auth=cscript.exe //nologo //T:60 c:\nrpe_nt\plugins\v2\check_counter_rawcount.vbs -h "$ARG1$" -class "Win32_PerfRawData_W3SVC_WebService" -inst "$ARG2$" -prop "MaximumConnections" -w "$ARG3$" -c "$ARG4$" -user "$ARG5$" -pass "$ARG6$" +get_iis_post_requests=cscript.exe //nologo //T:60 c:\nrpe_nt\plugins\v2\check_counter_counter.vbs -h "$ARG1$" -class "Win32_PerfRawData_W3SVC_WebService" -inst "$ARG2$" -prop "PostRequestsPersec" -w "$ARG3$" -c "$ARG4$" +get_iis_post_requests_auth=cscript.exe //nologo //T:60 c:\nrpe_nt\plugins\v2\check_counter_counter.vbs -h "$ARG1$" -class "Win32_PerfRawData_W3SVC_WebService" -inst "$ARG2$" -prop "PostRequestsPersec" -w "$ARG3$" -c "$ARG4$" -user "$ARG5$" -pass "$ARG6$" +get_iis_privatebytes=cscript.exe //nologo //T:60 c:\nrpe_nt\plugins\v2\check_counter_large_rawcount.vbs -h "$ARG1$" -class "Win32_PerfRawData_PerfProc_Process" -inst "Name=inetinfo" -prop "PrivateBytes" -w "$ARG2$" -c "$ARG3$" +get_iis_privatebytes_auth=cscript.exe //nologo //T:60 c:\nrpe_nt\plugins\v2\check_counter_large_rawcount.vbs -h "$ARG1$" -class "Win32_PerfRawData_PerfProc_Process" -inst "Name=inetinfo" -prop "PrivateBytes" -w "$ARG2$" -c "$ARG3$" -user "$ARG4$" -pass "$ARG5$" +get_iis_totalnotfounderrors=cscript.exe //nologo //T:60 c:\nrpe_nt\plugins\v2\check_counter_rawcount.vbs -h "$ARG1$" -class "Win32_PerfRawData_W3SVC_WebService" -inst "$ARG2$" -prop "TotalNotFoundErrors" -w "$ARG3$" -c "$ARG4$" +get_iis_totalnotfounderrors_auth=cscript.exe //nologo //T:60 c:\nrpe_nt\plugins\v2\check_counter_rawcount.vbs -h "$ARG1$" -class "Win32_PerfRawData_W3SVC_WebService" -inst "$ARG2$" -prop "TotalNotFoundErrors" -w "$ARG3$" -c "$ARG4$" -user "$ARG5$" -pass "$ARG6$" + +get_mssql_buf_cache_hit=cscript.exe //nologo //T:60 c:\nrpe_nt\plugins\v2\check_raw_fraction.vbs -h "$ARG1$" -class "Win32_PerfRawData_MSSQLSERVER_SQLServerBufferManager" -inst "*" -prop "Buffercachehitratio" -w "$ARG2$" -c "$ARG3$" +get_mssql_buf_cache_hit_auth=cscript.exe //nologo //T:60 c:\nrpe_nt\plugins\v2\check_raw_fraction.vbs -h "$ARG1$" -class "Win32_PerfRawData_MSSQLSERVER_SQLServerBufferManager" -inst "*" -prop "Buffercachehitratio" -w "$ARG2$" -c "$ARG3$" -user "$ARG4$" -pass "$ARG5$" +get_mssql_deadlocks=cscript.exe //nologo //T:60 c:\nrpe_nt\plugins\v2\check_counter_counter.vbs -h "$ARG1$" -class "Win32_PerfRawData_MSSQLSERVER_SQLServerLocks" -inst "$ARG2$" -prop "NumberofDeadlocksPersec" -w "$ARG3$" -c "$ARG4$" +get_mssql_deadlocks_auth=cscript.exe //nologo //T:60 c:\nrpe_nt\plugins\v2\check_counter_counter.vbs -h "$ARG1$" -class "Win32_PerfRawData_MSSQLSERVER_SQLServerLocks" -inst "$ARG2$" -prop "NumberofDeadlocksPersec" -w "$ARG3$" -c "$ARG4$" -user "$ARG5$" -pass "$ARG6$" +get_mssql_fullscans=cscript.exe //nologo //T:60 c:\nrpe_nt\plugins\v2\check_counter_counter.vbs -h "$ARG1$" -class "Win32_PerfRawData_MSSQLSERVER_SQLServerAccessMethods" -inst "*" -prop "FullScansPersec" -w "$ARG2$" -c "$ARG3$" +get_mssql_fullscans_auth=cscript.exe //nologo //T:60 c:\nrpe_nt\plugins\v2\check_counter_counter.vbs -h "$ARG1$" -class "Win32_PerfRawData_MSSQLSERVER_SQLServerAccessMethods" -inst "*" -prop "FullScansPersec" -w "$ARG2$" -c "$ARG3$" -user "$ARG4$" -pass "$ARG5$" + +get_mssql_latch_waits=cscript.exe //nologo //T:60 c:\nrpe_nt\plugins\v2\check_counter_counter.vbs -h "$ARG1$" -class "Win32_PerfRawData_MSSQLSERVER_SQLServerLatches" -inst "*" -prop "Latchwaitspersec" -w "$ARG2$" -c "$ARG3$" +get_mssql_latch_waits_auth=cscript.exe //nologo //T:60 c:\nrpe_nt\plugins\v2\check_counter_counter.vbs -h "$ARG1$" -class "Win32_PerfRawData_MSSQLSERVER_SQLServerLatches" -inst "*" -prop "Latchwaitspersec" -w "$ARG2$" -c "$ARG3$" -user "$ARG4$" -pass "$ARG5$" +get_mssql_lock_wait_time=cscript.exe //nologo //T:60 c:\nrpe_nt\plugins\v2\check_counter_counter.vbs -h "$ARG1$" -class "Win32_PerfRawData_MSSQLSERVER_SQLServerLocks" -inst "$ARG2$" -prop "LockWaitTimems" -w "$ARG3$" -c "$ARG4$" +get_mssql_lock_wait_time_auth=cscript.exe //nologo //T:60 c:\nrpe_nt\plugins\v2\check_counter_counter.vbs -h "$ARG1$" -class "Win32_PerfRawData_MSSQLSERVER_SQLServerLocks" -inst "$ARG2$" -prop "LockWaitTimems" -w "$ARG3$" -c "$ARG4$" -user "$ARG5$" -pass "$ARG6$" +get_mssql_lock_waits=cscript.exe //nologo //T:60 c:\nrpe_nt\plugins\v2\check_counter_counter.vbs -h "$ARG1$" -class "Win32_PerfRawData_MSSQLSERVER_SQLServerLocks" -inst "$ARG2$" -prop "LockWaitsPersec" -w "$ARG3$" -c "$ARG4$" +get_mssql_lock_waits_auth=cscript.exe //nologo //T:60 c:\nrpe_nt\plugins\v2\check_counter_counter.vbs -h "$ARG1$" -class "Win32_PerfRawData_MSSQLSERVER_SQLServerLocks" -inst "$ARG2$" -prop "LockWaitsPersec" -w "$ARG3$" -c "$ARG4$" -user "$ARG5$" -pass "$ARG6$" +get_mssql_log_growth=cscript.exe //nologo //T:60 c:\nrpe_nt\plugins\v2\check_counter_rawcount.vbs -h "$ARG1$" -class "Win32_PerfRawData_MSSQLSERVER_SQLServerDatabases" -inst "$ARG2$" -prop "LogGrowths" -w "$ARG3$" -c "$ARG4$" +get_mssql_log_growth_auth=cscript.exe //nologo //T:60 c:\nrpe_nt\plugins\v2\check_counter_rawcount.vbs -h "$ARG1$" -class "Win32_PerfRawData_MSSQLSERVER_SQLServerDatabases" -inst "$ARG2$" -prop "LogGrowths" -w "$ARG3$" -c "$ARG4$" -user "$ARG5$" -pass "$ARG6$" +get_mssql_log_used=cscript.exe //nologo //T:60 c:\nrpe_nt\plugins\v2\check_counter_rawcount.vbs -h "$ARG1$" -class "Win32_PerfRawData_MSSQLSERVER_SQLServerDatabases" -inst "$ARG2$" -prop "PercentLogUsed" -w "$ARG3$" -c "$ARG4$" +get_mssql_log_used_auth=cscript.exe //nologo //T:60 c:\nrpe_nt\plugins\v2\check_counter_rawcount.vbs -h "$ARG1$" -class "Win32_PerfRawData_MSSQLSERVER_SQLServerDatabases" -inst "$ARG2$" -prop "PercentLogUsed" -w "$ARG3$" -c "$ARG4$" -user "$ARG5$" -pass "$ARG6$" +get_mssql_memgrantspending=cscript.exe //nologo //T:60 c:\nrpe_nt\plugins\v2\check_counter_rawcount.vbs -h "$ARG1$" -class "Win32_PerfRawData_MSSQLSERVER_SQLServerMemoryManager" -inst "*" -prop "MemoryGrantsPending" -w "$ARG2$" -c "$ARG3$" +get_mssql_memgrantspending_auth=cscript.exe //nologo //T:60 c:\nrpe_nt\plugins\v2\check_counter_rawcount.vbs -h "$ARG1$" -class "Win32_PerfRawData_MSSQLSERVER_SQLServerMemoryManager" -inst "*" -prop "MemoryGrantsPending" -w "$ARG2$" -c "$ARG3$" -user "$ARG4$" -pass "$ARG5$" +get_mssql_transactions=cscript.exe //nologo //T:60 c:\nrpe_nt\plugins\v2\check_counter_counter.vbs -h "$ARG1$" -class "Win32_PerfRawData_MSSQLSERVER_SQLServerDatabases" -inst "$ARG2$" -prop "TransactionsPersec" -w "$ARG3$" -c "$ARG4$" +get_mssql_transactions_auth=cscript.exe //nologo //T:60 c:\nrpe_nt\plugins\v2\check_counter_counter.vbs -h "$ARG1$" -class "Win32_PerfRawData_MSSQLSERVER_SQLServerDatabases" -inst "$ARG2$" -prop "TransactionsPersec" -w "$ARG3$" -c "$ARG4$" -user "$ARG5$" -pass "$ARG6$" +get_mssql_users=cscript.exe //nologo //T:60 c:\nrpe_nt\plugins\v2\check_counter_rawcount.vbs -h "$ARG1$" -class "Win32_PerfRawData_MSSQLSERVER_SQLServerGeneralStatistics" -inst "*" -prop "UserConnections" -w "$ARG2$" -c "$ARG3$" +get_mssql_users_auth=cscript.exe //nologo //T:60 c:\nrpe_nt\plugins\v2\check_counter_rawcount.vbs -h "$ARG1$" -class "Win32_PerfRawData_MSSQLSERVER_SQLServerGeneralStatistics" -inst "*" -prop "UserConnections" -w "$ARG2$" -c "$ARG3$" -user "$ARG4$" -pass "$ARG5$"