nagios-plugins/nsclient/trunk/scripts/wmi/verify_wmi_status.vbs

329 lines
11 KiB
Plaintext

' 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