Here we are going to discuss about Operating system, Networking and open source tools issues.
Thursday, April 17, 2014
Wednesday, April 16, 2014
Nagios : Add services into service group : Shell script
#!/bin/bash
#Author : Ranjith Kumar R
#Date : 16th April 2014
#Purpose : Add services into the nagios service group.
echo "Please enter service group name"
read svcgroup
while read server
do
servername=`echo $server | cut -d';' -f1`
OUTPUT=`find /usr/local/nagios -name "$servername"_DB.cfg | grep -i $servername`
RESULT=`echo $?`
if [ "$RESULT" -eq "0" ]; then
OUTPUT1=`cat $OUTPUT | grep -i "$svcgroup" | grep "service_description" | awk '{print $2}' > /tmp/svcgroup.txt`
RESULT1=`echo $?`
if [ "$RESULT1" -eq "0" ]; then
echo "success" > /dev/null
fi
fi
while read service
do
startlinenum=`grep -nr -A 2 -B 14 """$service""" "$OUTPUT" | grep "servicegroups" | cut -d'-' -f1 | head -1`
if [ "$startlinenum" == "" ]; then
continue
fi
format=`echo "$startlinenum"s/DBservices/DBservices,$svcgroup/`
sed "$format" $OUTPUT > "$OUTPUT".temp
mv "$OUTPUT".temp "$OUTPUT"
done < /tmp/svcgroup.txt
done < /usr/local/nagios/libexec/tools/devicelist
rm -rf /tmp/svcgroup.txt
#Author : Ranjith Kumar R
#Date : 16th April 2014
#Purpose : Add services into the nagios service group.
echo "Please enter service group name"
read svcgroup
while read server
do
servername=`echo $server | cut -d';' -f1`
OUTPUT=`find /usr/local/nagios -name "$servername"_DB.cfg | grep -i $servername`
RESULT=`echo $?`
if [ "$RESULT" -eq "0" ]; then
OUTPUT1=`cat $OUTPUT | grep -i "$svcgroup" | grep "service_description" | awk '{print $2}' > /tmp/svcgroup.txt`
RESULT1=`echo $?`
if [ "$RESULT1" -eq "0" ]; then
echo "success" > /dev/null
fi
fi
while read service
do
startlinenum=`grep -nr -A 2 -B 14 """$service""" "$OUTPUT" | grep "servicegroups" | cut -d'-' -f1 | head -1`
if [ "$startlinenum" == "" ]; then
continue
fi
format=`echo "$startlinenum"s/DBservices/DBservices,$svcgroup/`
sed "$format" $OUTPUT > "$OUTPUT".temp
mv "$OUTPUT".temp "$OUTPUT"
done < /tmp/svcgroup.txt
done < /usr/local/nagios/libexec/tools/devicelist
rm -rf /tmp/svcgroup.txt
Tuesday, April 15, 2014
To Send an e-mail for the active account in AD users to reset there Password every 14th, 7th and 1st day of password expiry or password age.
'Account used to run script needs read access to Domain.
'Any standard Domain User account should work.
'Set the following variables
MyDomain = "domain.com"
'MyDN = "OU=xyz Users,DC=domain,DC=com"
OutputFile = "C:\Passwordnotify\passAge.csv"
Set objRootDSE = GetObject("LDAP://RootDSE")
strDNSDomain = objRootDSE.Get("defaultNamingContext")
MyDN = strDNSDomain
'Wscript.Echo MyDN
'Do not modify below this line
Const SEC_IN_DAY = 86400
Const ADS_UF_DONT_EXPIRE_PASSWD = &h10000
Const ADS_SCOPE_SUBTREE = 2
Set objDomainNT = GetObject("WinNT://" & MyDomain)
intMaxPwdAge = objDomainNT.Get("MaxPasswordAge") / SEC_IN_DAY
'Wscript.Echo "Max password age:" & intMaxPwdAge
Set objConnection = CreateObject("ADODB.Connection")
Set objCommand = CreateObject("ADODB.Command")
objConnection.Provider = "ADsDSOObject"
objConnection.Open "Active Directory Provider"
Set objCOmmand.ActiveConnection = objConnection
objCommand.CommandText = _
"Select Name, distinguishedName from 'LDAP://" & MyDN & _
"' Where objectClass='user' AND objectClass <> 'computer'"
objCommand.Properties("Page Size") = 1000
objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE
Set objRecordSet = objCommand.Execute
objRecordSet.MoveFirst
On Error Resume Next
Set FSO = CreateObject("Scripting.FileSystemObject")
'Set oFile=fso.GetFile(OutputFile)
'If Err.Number = 0 Then
' Set AFileStream = FSO.OpenTextFile(OutputFile,2)
'Else
Set AFileStream = FSO.CreateTextFile(OutputFile,2)
'End If
AFileStream.WriteLine "Name" & VbTab & "Password Status" & VbTab & "Last Change" & _
VbTab & "Expiration Date"
Do Until objRecordSet.EOF
If (InStr(objRecordSet.Fields("Name").Value, "SystemMailbox") = 1) Then
objRecordSet.MoveNext
Else
ldapStr = "LDAP://" & objRecordSet.Fields("distinguishedName").Value
'Wscript.Echo "Ldap String:" & ldapStr
Set objUserLDAP = GetObject(ldapStr)
intCurrentValue = objUserLDAP.Get("userAccountControl")
If intCurrentValue and ADS_UF_DONT_EXPIRE_PASSWD Then
'Do nothing
Else
dtmValue = objUserLDAP.PasswordLastChanged
'Wscript.Echo "Last Password Cahange:" & dtmValue
intTimeInterval = int(now - dtmValue)
If intTimeInterval >= intMaxPwdAge Then
PassExpStatus = "Expired"
Else
PassExpStatus = "Active"
IntTimeIntervalDiff = intMaxPwdAge - intTimeInterval
'Set a message string to on how to reset the password.
'Send an e-mail to reset the password for 14,7 and 1 day respectively.
mailbody = "Password expiry Notification" & VbNewline _
& "This email was auto generated by a Domain.COM exchange organization to alert you on your password expiry. Please follow one of the below procedures to change your password on time." & vbNewLine _
& "=============================instructions=====================" & vbNewLine _
& "The steps to change are as follows." & VbNewline _
& "Method1:Computer" & VbNewLine _
& "Step1: Once logged into the computer, press Ctrl+Alt+Del simultaneously(Ensure no programs are opened after logged in to computer)." & vbnewline _
& "Step2:Click on Change a Password." & VbNewline _
& "Step3: Enter the old password and type new password and confirm it again." & VbNewline _
& "Step4 :Click OK and logoff and login to the computer with the new password" & VbNewline & vbNewLine _
& "OR Method2: Webmail Step1:Login to webmail https://mail.domain.com/owa" & VbNewline _
& "Step2:In Outlook Web App, click Options > See All Options" & VbNewline _
& "Step3:click on Change your password Enter old password, new password and confirm it again" & VbNewline _
& "Step4:Click on Save Step5:Logout and login with the new password to webmail" & vbNewLine _
& "==========================end of details==================" & vbNewLine
If IntTimeIntervalDiff = 14 then
Set objMessage = CreateObject("CDO.Message")
objMessage.From = "noreply.PwdNotification@domain.com"
objMessage.To = objUserLDAP.mail
objMessage.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
objMessage.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "mail.domain.com"
objMessage.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 8181
objMessage.Configuration.Fields.Update
objMessage.Subject = "your windows password will expire in "& intTimeInterval & "days."
objMessage.TextBody = mailbody
objMessage.Send
End If
If intTimeIntervalDiff = 7 then
Set objMessage = CreateObject("CDO.Message")
objMessage.From = "noreply.PwdNotification@domain.com"
objMessage.To = objUserLDAP.mail
objMessage.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
objMessage.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "mail.domain.com"
objMessage.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 8181
objMessage.Configuration.Fields.Update
objMessage.Subject = "your windows password will expire in "& intTimeInterval & "days."
mailbody = str
objMessage.Send
End If
If intTimeIntervalDiff = 99 then
Set objMessage = CreateObject("CDO.Message")
objMessage.From = "noreply.PwdNotification@domain.com"
objMessage.To = objUserLDAP.mail
objMessage.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
objMessage.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "mail.domain.com"
objMessage.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 8181
objMessage.Configuration.Fields.Update
objMessage.Subject = "your windows password will expire in "& intTimeInterval & "days."
objMessage.TextBody = mailbody
objMessage.Send
End If
End If
PassLastChangeDate = DateValue(dtmValue)
PassExpDate = DateValue(dtmValue + intMaxPwdAge)
AFileStream.WriteLine objRecordSet.Fields("Name").Value & VbTab & PassExpStatus & _
VbTab & PassLastChangeDate & VbTab & PassExpDate &VbTab & objUserLDAP.mail &VbTab & intTimeIntervalDiff
'Wscript.Echo objUserLDAP.mail
End If
objRecordSet.MoveNext
End If
Loop
AFileStream.Close
'Any standard Domain User account should work.
'Set the following variables
MyDomain = "domain.com"
'MyDN = "OU=xyz Users,DC=domain,DC=com"
OutputFile = "C:\Passwordnotify\passAge.csv"
Set objRootDSE = GetObject("LDAP://RootDSE")
strDNSDomain = objRootDSE.Get("defaultNamingContext")
MyDN = strDNSDomain
'Wscript.Echo MyDN
'Do not modify below this line
Const SEC_IN_DAY = 86400
Const ADS_UF_DONT_EXPIRE_PASSWD = &h10000
Const ADS_SCOPE_SUBTREE = 2
Set objDomainNT = GetObject("WinNT://" & MyDomain)
intMaxPwdAge = objDomainNT.Get("MaxPasswordAge") / SEC_IN_DAY
'Wscript.Echo "Max password age:" & intMaxPwdAge
Set objConnection = CreateObject("ADODB.Connection")
Set objCommand = CreateObject("ADODB.Command")
objConnection.Provider = "ADsDSOObject"
objConnection.Open "Active Directory Provider"
Set objCOmmand.ActiveConnection = objConnection
objCommand.CommandText = _
"Select Name, distinguishedName from 'LDAP://" & MyDN & _
"' Where objectClass='user' AND objectClass <> 'computer'"
objCommand.Properties("Page Size") = 1000
objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE
Set objRecordSet = objCommand.Execute
objRecordSet.MoveFirst
On Error Resume Next
Set FSO = CreateObject("Scripting.FileSystemObject")
'Set oFile=fso.GetFile(OutputFile)
'If Err.Number = 0 Then
' Set AFileStream = FSO.OpenTextFile(OutputFile,2)
'Else
Set AFileStream = FSO.CreateTextFile(OutputFile,2)
'End If
AFileStream.WriteLine "Name" & VbTab & "Password Status" & VbTab & "Last Change" & _
VbTab & "Expiration Date"
Do Until objRecordSet.EOF
If (InStr(objRecordSet.Fields("Name").Value, "SystemMailbox") = 1) Then
objRecordSet.MoveNext
Else
ldapStr = "LDAP://" & objRecordSet.Fields("distinguishedName").Value
'Wscript.Echo "Ldap String:" & ldapStr
Set objUserLDAP = GetObject(ldapStr)
intCurrentValue = objUserLDAP.Get("userAccountControl")
If intCurrentValue and ADS_UF_DONT_EXPIRE_PASSWD Then
'Do nothing
Else
dtmValue = objUserLDAP.PasswordLastChanged
'Wscript.Echo "Last Password Cahange:" & dtmValue
intTimeInterval = int(now - dtmValue)
If intTimeInterval >= intMaxPwdAge Then
PassExpStatus = "Expired"
Else
PassExpStatus = "Active"
IntTimeIntervalDiff = intMaxPwdAge - intTimeInterval
'Set a message string to on how to reset the password.
'Send an e-mail to reset the password for 14,7 and 1 day respectively.
mailbody = "Password expiry Notification" & VbNewline _
& "This email was auto generated by a Domain.COM exchange organization to alert you on your password expiry. Please follow one of the below procedures to change your password on time." & vbNewLine _
& "=============================instructions=====================" & vbNewLine _
& "The steps to change are as follows." & VbNewline _
& "Method1:Computer" & VbNewLine _
& "Step1: Once logged into the computer, press Ctrl+Alt+Del simultaneously(Ensure no programs are opened after logged in to computer)." & vbnewline _
& "Step2:Click on Change a Password." & VbNewline _
& "Step3: Enter the old password and type new password and confirm it again." & VbNewline _
& "Step4 :Click OK and logoff and login to the computer with the new password" & VbNewline & vbNewLine _
& "OR Method2: Webmail Step1:Login to webmail https://mail.domain.com/owa" & VbNewline _
& "Step2:In Outlook Web App, click Options > See All Options" & VbNewline _
& "Step3:click on Change your password Enter old password, new password and confirm it again" & VbNewline _
& "Step4:Click on Save Step5:Logout and login with the new password to webmail" & vbNewLine _
& "==========================end of details==================" & vbNewLine
If IntTimeIntervalDiff = 14 then
Set objMessage = CreateObject("CDO.Message")
objMessage.From = "noreply.PwdNotification@domain.com"
objMessage.To = objUserLDAP.mail
objMessage.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
objMessage.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "mail.domain.com"
objMessage.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 8181
objMessage.Configuration.Fields.Update
objMessage.Subject = "your windows password will expire in "& intTimeInterval & "days."
objMessage.TextBody = mailbody
objMessage.Send
End If
If intTimeIntervalDiff = 7 then
Set objMessage = CreateObject("CDO.Message")
objMessage.From = "noreply.PwdNotification@domain.com"
objMessage.To = objUserLDAP.mail
objMessage.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
objMessage.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "mail.domain.com"
objMessage.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 8181
objMessage.Configuration.Fields.Update
objMessage.Subject = "your windows password will expire in "& intTimeInterval & "days."
mailbody = str
objMessage.Send
End If
If intTimeIntervalDiff = 99 then
Set objMessage = CreateObject("CDO.Message")
objMessage.From = "noreply.PwdNotification@domain.com"
objMessage.To = objUserLDAP.mail
objMessage.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
objMessage.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "mail.domain.com"
objMessage.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 8181
objMessage.Configuration.Fields.Update
objMessage.Subject = "your windows password will expire in "& intTimeInterval & "days."
objMessage.TextBody = mailbody
objMessage.Send
End If
End If
PassLastChangeDate = DateValue(dtmValue)
PassExpDate = DateValue(dtmValue + intMaxPwdAge)
AFileStream.WriteLine objRecordSet.Fields("Name").Value & VbTab & PassExpStatus & _
VbTab & PassLastChangeDate & VbTab & PassExpDate &VbTab & objUserLDAP.mail &VbTab & intTimeIntervalDiff
'Wscript.Echo objUserLDAP.mail
End If
objRecordSet.MoveNext
End If
Loop
AFileStream.Close
Friday, January 31, 2014
To restart a windows service from Linux server
To restart a windows service from Linux server follow the below reference link(s):
http://lifehacker.com/5575671/restart-windows-services-from-your-linux-pc
http://www.lylebackenroth.com/blog/2010/06/29/manage-windows-remotely-from-a-linux-command-line-interface/
http://monitoringtt.blogspot.in/2013/02/restarting-windows-services-from-linux.html
example as below:
[root@sserver-nag-cent-d1 ~]# net rpc service stop bits -I sserver-tst-slp1.server.com -U server/username%password
..
bits service is stopped.
[root@xxxxxxx ~]# wmic -U DomainName/Username%Password //ServerName.com "select name,state from Win32_Service where Name='bits'"
CLASS: Win32_Service
Name|State
BITS|Stopped
[root@xxxxxxx ~]# net rpc service start bits -I ServerName.com -U DomainName/Username%Password
.
Successfully started service: bits
[root@xxxxxxx ~]# wmic -U DomainName/Username%Password //ServerName.com "select name,state from Win32_Service where Name='bits'"
CLASS: Win32_Service
Name|State
BITS|Running
http://lifehacker.com/5575671/restart-windows-services-from-your-linux-pc
http://www.lylebackenroth.com/blog/2010/06/29/manage-windows-remotely-from-a-linux-command-line-interface/
http://monitoringtt.blogspot.in/2013/02/restarting-windows-services-from-linux.html
example as below:
[root@sserver-nag-cent-d1 ~]# net rpc service stop bits -I sserver-tst-slp1.server.com -U server/username%password
..
bits service is stopped.
[root@xxxxxxx ~]# wmic -U DomainName/Username%Password //ServerName.com "select name,state from Win32_Service where Name='bits'"
CLASS: Win32_Service
Name|State
BITS|Stopped
[root@xxxxxxx ~]# net rpc service start bits -I ServerName.com -U DomainName/Username%Password
.
Successfully started service: bits
[root@xxxxxxx ~]# wmic -U DomainName/Username%Password //ServerName.com "select name,state from Win32_Service where Name='bits'"
CLASS: Win32_Service
Name|State
BITS|Running
Tuesday, September 24, 2013
Restart a service checking a pattern in the event log
Restart a service checking a pattern in the event log and sending an e-mail to the xxxx@xxxx.com.
' ----- ExeScript Options Begin -----
' ScriptType: window,activescript,administrator
' DestDirectory: current
' CommandLine: -c 112 -p "3 / 10" -l Application -e "1 / 10"
' Icon: default
' 32Bit: yes
' Author: Babu Dhinakaran S
' ----- ExeScript Options End -----
'On Error Resume Next
Dim subStr
Dim Return1,Return2
Const CONVERT_TO_LOCAL_TIME = True
Dim strServiceName
Dim eCode
Dim patternMatch
Dim logFile
Dim aeCode, apatternMatch, alogFile
Dim dtmStartDate
Dim Flag
aeCode = Wscript.Arguments.Item(0)
eCode = CInt(Wscript.Arguments.Item(1))
apatternMatch = Wscript.Arguments.Item(2)
patternMatch = Wscript.Arguments.Item(3)
alogFile = Wscript.Arguments.Item(4)
logFile = Wscript.Arguments.Item(5)
aerrorPattern = Wscript.Arguments.Item(6)
errorPattern = Wscript.Arguments.Item(7)
'Wscript.Echo "aeCode"&aeCode
'Wscript.Echo "eCode"&eCode
'Wscript.Echo "apatternMatch"&apatternMatch
'Wscript.Echo "alogFile"&alogFile
'Wscript.Echo "logFile"&logFile
'Wscript.Echo "aerrorPattern"&aerrorPattern
'Wscript.Echo "errorPattern"&errorPattern
If aeCode = "-c" and apatternMatch = "-p" and alogFile = "-l" and aerrorPattern = "-e" Then
Set objFSO = CreateObject("Scripting.FileSystemObject")
fileName = "C:\Program Files\NSClient++\scripts\" & logFile & "_ "& ecode & ".txt"
fileName2 = "C:\Program Files\NSClient++\scripts\" & logFile & "_ "& ecode & "_flag"&".txt"
'Wscript.Echo "FileName:" & fileName
'The Below File or fileName variable holds the TimeStamp of the EventLog
If objFSO.FileExists(fileName) Then
'Wscript.Echo "File Exists"
Set objTextFile = objFSO.OpenTextFile(fileName, 1)
Do Until objTextFile.AtEndOfStream
dtmStartDate = objTextFile.Readline
'Wscript.Echo " DtmStartDate:" & dtmStartDate
Loop
Else
Set objTextFile = objFSO.CreateTextFile(fileName, true)
Set dtmStartDate = CreateObject("WbemScripting.SWbemDateTime")
dtmStartDate.SetVarDate (CDate (now))
'Wscript.Echo "File Doesn't exists create one"
objTextFile.WriteLine(dtmStartDate)
'Wscript.Echo " DtmStartDate:" & dtmStartDate
'objTextFile.Close()
End If
'The below file holds the Flag value and initially the flag is set to 0 stating there were no error found
If objFSO.FileExists(fileName2) Then
'Wscript.Echo "File Exists"
Set objTextFile1 = objFSO.OpenTextFile(fileName2, 1)
Do Until objTextFile1.AtEndOfStream
flag = CInt(objTextFile1.Readline)
'Wscript.Echo "File Exists:" & flag
Loop
Else
Set objTextFile1 = objFSO.CreateTextFile(fileName2, true)
'Wscript.Echo "File Doesn't exists create one and set falg to 0"
objTextFile1.WriteLine("0")
'objTextFile1.Close()
End If
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate,(Security)}!\\" _
& strComputer & "\root\cimv2")
'Set the event code in the below WMI Query such as 112 or 113
Set colEvents = objWMIService.ExecQuery _
("Select * from Win32_NTLogEvent Where Logfile = '" & logFile & "' and " & " TimeWritten > ' " & dtmStartDate & " ' and EventCode=" & eCode & "")
'Wscript.Echo logFile
'Wscript.Echo eCode
'Wscript.Echo dtmStartDate
If Err.Number <> 0 Then
'WScript.Echo "Error: " & Err.Number
'WScript.Echo "Error (Hex): " & Hex(Err.Number)
'WScript.Echo "Source: " & Err.Source
'WScript.Echo "Description: " & Err.Description
Err.Clear
Wscript.Echo "Unable to Access the remote Server"
Wscript.Quit(3)
Else
If flag = 0 Then
For each objEvent in colEvents
'Wscript.Echo "Category: " & objEvent.Category
'Wscript.Echo "Computer Name: " & objEvent.ComputerName
'Wscript.Echo "Event Code: " & objEvent.EventCode
'Wscript.Echo "Message: " & objEvent.Message
subStr = objEvent.Message
'Wscript.Echo "Message:" & subStr
'Wscript.Echo "Record Number: " & objEvent.RecordNumber
'Wscript.Echo "Source Name: " & objEvent.SourceName
'Wscript.Echo "Time Written: " & objEvent.TimeWritten
'Wscript.Echo "Event Type: " & objEvent.Type
'Wscript.Echo "User: " & objEvent.User
'Wscript.Echo objEvent.LogFile
'Prepare a regular expression object
strServiceName = objEvent.SourceName
dateWritten = objEvent.TimeWritten
'Wscript.Echo "Date Written:" & dateWritten
Set myRegExp = New RegExp
myRegExp.IgnoreCase = True
myRegExp.Global = True
myRegExp.Pattern = errorPattern
'Wscript.Echo "errorPattern:" & errorPattern
' Echo for each match
Set myMatches = myRegExp.Execute(subStr)
If myMatches.count > 0 Then
'Wscript.Echo "Service will be restarted:" &strServiceName
'Set the New Time Stamp
Set objTextFile = objFSO.CreateTextFile(fileName, true)
'Set dtmStartDate = CreateObject("WbemScripting.SWbemDateTime")
'dtmStartDate.SetVarDate (dateWritten)
'Wscript.Echo "ErrorPattern Date:" & dateWritten
objTextFile.WriteLine(dateWritten)
'objTextFile.Close()
'Set the New Flag 1 if a match is found for errorPattern
Set objTextFile1 = objFSO.CreateTextFile(fileName2, true)
'Wscript.Echo "File Doesn't exists create one"
objTextFile1.WriteLine("1")
'objTextFile1.Close()
Wscript.Echo "System has entered in CRITICAL State of /10"
'For Each myMatch in myMatches
' Wscript.Echo myMatch.Value, "Found Match"
' Wscript.Echo "---------------------------------------------------------------"
' Next
Wscript.Quit(2)
Else
'don't do anything let it to loop till the match
End If
Next
Wscript.Echo "System has not entered in CRITICAL State of /10"
Wscript.Quit(0)
End If
If flag = 1 Then
For each objEvent in colEvents
'Wscript.Echo "Category: " & objEvent.Category
'Wscript.Echo "Computer Name: " & objEvent.ComputerName
'Wscript.Echo "Event Code: " & objEvent.EventCode
'Wscript.Echo "Message: " & objEvent.Message
subStr = objEvent.Message
'Wscript.Echo "Message:" & subStr
'Wscript.Echo "Record Number: " & objEvent.RecordNumber
'Wscript.Echo "Source Name: " & objEvent.SourceName
'Wscript.Echo "Time Written: " & objEvent.TimeWritten
'Wscript.Echo "Event Type: " & objEvent.Type
'Wscript.Echo "User: " & objEvent.User
'Wscript.Echo objEvent.LogFile
'Prepare a regular expression object
strServiceName = objEvent.SourceName
dateWritten = objEvent.TimeWritten
'Wscript.Echo "Date Written:" & dateWritten
Set myRegExp = New RegExp
myRegExp.IgnoreCase = True
myRegExp.Global = True
myRegExp.Pattern = patternMatch
'Wscript.Echo "Pattern Match:" & patternMatch
' Echo for each match
Set myMatches = myRegExp.Execute(subStr)
If myMatches.count > 0 Then
'Set the New Time Stamp
Set objTextFile = objFSO.CreateTextFile(fileName, true)
'Set dtmStartDate = CreateObject("WbemScripting.SWbemDateTime")
'dtmStartDate.SetVarDate (dateWritten)
'Wscript.Echo "Pattern Date:" & dateWritten
objTextFile.WriteLine(dateWritten)
'objTextFile.Close()
'Set the New Flag 0 if a match is found for patternMatch
Set objTextFile1 = objFSO.CreateTextFile(fileName2, true)
objTextFile1.WriteLine("0")
'objTextFile1.Close()
'For Each myMatch in myMatches
'Wscript.Echo myMatch.Value, "Found Match"
'Wscript.Echo "---------------------------------------------------------------"
'Next
'Restart the Service and Send an successful or unsccessful message accordingly
Set objMessage = CreateObject("CDO.Message")
objMessage.From = "no-reply@cmcmarkets.com"
objMessage.To = "b.dhinakaran@cmcmarkets.com"
objMessage.Cc = "t.welsh@cmcmarkets.com"
objMessage.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
objMessage.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "smtp.cmc.local"
objMessage.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25
objMessage.Configuration.Fields.Update
Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")
Set colListOfServices = objWMIService.ExecQuery("Select * from Win32_Service Where Name ='" & strServiceName & "'")
If Err.Number <> 0 Then
'WScript.Echo "Error: " & Err.Number
'WScript.Echo "Error (Hex): " & Hex(Err.Number)
'WScript.Echo "Source: " & Err.Source
'WScript.Echo "Description: " & Err.Description
Err.Clear
objMessage.Subject = "Unable to invoke object to restart the service:" & strServiceName
mailbody = "Please check to why this was not restarted automatically or manually restart the Service"
objMessage.TextBody = mailbody
objMessage.Send
Wscript.Quit(3)
Else
'Stop Service
For Each objService in colListOfServices
Return1 = objService.StopService()
If Return1 <> 0 Then
'Wscript.Echo "Failed to Stop the Service and the Error code = " & Return1
objMessage.Subject = "Service didn't respond for Stop Signal:" & strServiceName
mailbody = "Please check to why this was not restarted automatically or manually restart the Service"
objMessage.TextBody = mailbody
objMessage.Send
Wscript.Quit(2)
End If
Next
Wscript.Sleep(20000) 'Sleep for 20 seconds before starting a service.
'Start Service
For Each objService in colListOfServices
Return2 = objService.StartService()
If Return2 <> 0 Then
Wscript.Echo "Failed to Start the Service and the Error code = " & Return2
objMessage.Subject = "Service didn't respond for Start Signal after the Stop:" & strServiceName
mailbody = "Please check to why this was not restarted automatically or manually restart the Service"
objMessage.TextBody = mailbody
objMessage.Send
Wscript.Quit(2)
Else
WScript.Echo "Successful Restart of Service:" & strServiceName
objMessage.Subject = "Successful Restart of Service:" & strServiceName
mailbody = "Successful Restart of Service"
objMessage.TextBody = mailbody
objMessage.Send
Wscript.Quit(0)
End If
Next
End If
Else
'Wscript.Echo "System has entered in CRITICAL State of /10"
'Wscript.Quit(2)
End If
Next
Wscript.Echo "System has entered in CRITICAL State of /10"
Wscript.Quit(2)
End If
End If
Else
Wscript.Echo "Follow the Syntax: example: eventlog -c EventCode -p Pattern_to_Match_in_the_message_to_service_restart -l logfile_Application_System -e errorPattern_to_Match _in_then_message_to_trigger_an_alarm"
End If
Tuesday, July 30, 2013
Microsoft Exchange Queue monitoring Plugin for Nagios
# Test Queue Health
# Developed by Babu Dhinakaran S
# To execute from within NSClient++
#
#NSClient 0.4.1.90
#[/settings/external scripts/scripts]
#ps2 = cmd /c echo scripts\\test.ps1 | PowerShell.exe -command -
# On the check_nrpe command include the -t 30, since it takes some time to load the Exchange cmdlet's.
#Add-PSSnapin Microsoft.Exchange.Management.PowerShell.E2010
#Add-PSSnapin -Name Microsoft.Exchange.Management.PowerShell.E2010
[int[]]$NagiosStatus = "3"
$NagiosDescription = ""
$key = New-Object System.Collections.ArrayList
$value = New-Object System.Collections.ArrayList
$getpos = New-Object System.Collections.ArrayList
$i=0
[String[]]$scontent = ""
[String[]]$shcontent = ""
[String[]]$otcontent = ""
#$Queue = Get-Queue -server test.test.COM
ForEach ($Queue in Get-Queue -Server test.test.COM)
{
# ForEach Queue Handle the Identity and Message Count
$kv=$Queue.Identity
$vv=$Queue.MessageCount
$r_key = $key.Add("$kv")
$r_value = $value.Add("$vv")
}
#Write-Host "Before Any Operation:"
#Write-Host $key
#Write-Host $value
ForEach ($scontent in $key)
{
if ($scontent.contains("Submission"))
{
# Write-Host "removed Submission"
# Write-Host "$i th Position:" $i
break
}
$i++
}
#Process the submission queue and remove it from the ArrayList
[int[]]$sub_val = $value[$i]
if ($sub_val -gt "10")
{
# Format the output for Nagios
if ($NagiosDescription -ne "")
{
$NagiosDescription = $NagiosDescription + ", "
}
$NagiosDescription = $NagiosDescription + $key[$i] + " queue has " + $value[$i] + " messages"
# Set the status to failed.
$NagiosStatus = "2"
}
elseif ($sub_val -gt "6")
{
if ($NagiosDescription -ne "")
{
$NagiosDescription = $NagiosDescription + ", "
}
$NagiosDescription = $NagiosDescription + $key[$i] + " queue has " + $value[$i] + " messages"
# Don't lower the status level if we already have a critical event
if ($NagiosStatus -ne "2")
{
$NagiosStatus = "1"
}
}
$key.RemoveRange($i,1)
$value.RemoveRange($i,1)
#Write-Host "After Submission Operation:"
#Write-Host $key
#Write-Host $value
$i=0
ForEach ($shcontent in $key)
{
if ($shcontent.contains("Shadow"))
{
#Write-Host "Removed Shadow"
#Process the Shadow queue and remove it from the ArrayList
#Write-Host "Value of value:" $value[$i]
[int[]]$shadow_value = $value[$i]
if ( $shadow_value -gt "3" )
{
# Format the output for Nagios
if ($NagiosDescription -ne "")
{
$NagiosDescription = $NagiosDescription + ", "
}
$NagiosDescription = $NagiosDescription + $key[$i] + " queue has " + $value[$i] + " messages"
# Set the status to failed.
$NagiosStatus = "2"
}
elseif ($shadow_value -gt "2")
{
if ($NagiosDescription -ne "")
{
$NagiosDescription = $NagiosDescription + ", "
}
$NagiosDescription = $NagiosDescription + $key[$i] + " queue has " + $value[$i] + " messages"
# Don't lower the status level if we already have a critical event
if ($NagiosStatus -ne "2")
{
$NagiosStatus = "1"
}
}
$r_getops = $getpos.Add("$i")
#$key.RemoveRange($i,1)
#$value.RemoveRange($i,1)
}
$i = $i + 1
}
#key length calculation
# write a subroutine to calculate string lenght
Function flength ([String[]]$skey)
{
ForEach ( $content in $skey )
{
$len = $len + 1
}
return $len - 1
}
ForEach ( $pos in $getpos )
{
# if the range is not null, call subroutine to calculate the length of key and get the position to delete it.
$kl = flength $key
if ( $pos -gt $kl )
{
$key.RemoveRange($kl,1)
$value.RemoveRange($kl,1)
break
}
else
{
$key.RemoveRange($pos,1)
$value.RemoveRange($pos,1)
}
}
#Write-Host "After Shadow Operation:"
#Write-Host $key
#Write-Host $value
$i=0
ForEach ($otcontent in $key)
{
#Process the Other queue
[int[]]$ot_value = $value[$i]
if ($ot_value -gt "10")
{
# Format the output for Nagios
if ($NagiosDescription -ne "")
{
$NagiosDescription = $NagiosDescription + ", "
}
$NagiosDescription = $NagiosDescription + $key[$i] + " queue has " + $value[$i] + " messages"
# Set the status to failed.
$NagiosStatus = "2"
}
elseif ($ot_value -gt "5")
{
if ($NagiosDescription -ne "")
{
$NagiosDescription = $NagiosDescription + ", "
}
$NagiosDescription = $NagiosDescription + $key[$i] + " queue has " + $value[$i] + " messages"
# Don't lower the status level if we already have a critical event
if ($NagiosStatus -ne "2")
{
$NagiosStatus = "1"
}
}
$i = $i + 1
}
# Output, what level should we tell our caller?
if ($NagiosStatus -eq "2") {
Write-Host "CRITICAL: " $NagiosDescription
exit 2
} elseif ($NagiosStatus -eq "1") {
Write-Host "WARNING: " $NagiosDescription
exit 1
} else {
Write-Host "OK: All mail queues within limits."
exit 0
}
#Write-Host $key and $value
#Write-Host "After all Operation:"
#Write-Host $key
#Write-Host $value
# Developed by Babu Dhinakaran S
# To execute from within NSClient++
#
#NSClient 0.4.1.90
#[/settings/external scripts/scripts]
#ps2 = cmd /c echo scripts\\test.ps1 | PowerShell.exe -command -
# On the check_nrpe command include the -t 30, since it takes some time to load the Exchange cmdlet's.
#Add-PSSnapin Microsoft.Exchange.Management.PowerShell.E2010
#Add-PSSnapin -Name Microsoft.Exchange.Management.PowerShell.E2010
[int[]]$NagiosStatus = "3"
$NagiosDescription = ""
$key = New-Object System.Collections.ArrayList
$value = New-Object System.Collections.ArrayList
$getpos = New-Object System.Collections.ArrayList
$i=0
[String[]]$scontent = ""
[String[]]$shcontent = ""
[String[]]$otcontent = ""
#$Queue = Get-Queue -server test.test.COM
ForEach ($Queue in Get-Queue -Server test.test.COM)
{
# ForEach Queue Handle the Identity and Message Count
$kv=$Queue.Identity
$vv=$Queue.MessageCount
$r_key = $key.Add("$kv")
$r_value = $value.Add("$vv")
}
#Write-Host "Before Any Operation:"
#Write-Host $key
#Write-Host $value
ForEach ($scontent in $key)
{
if ($scontent.contains("Submission"))
{
# Write-Host "removed Submission"
# Write-Host "$i th Position:" $i
break
}
$i++
}
#Process the submission queue and remove it from the ArrayList
[int[]]$sub_val = $value[$i]
if ($sub_val -gt "10")
{
# Format the output for Nagios
if ($NagiosDescription -ne "")
{
$NagiosDescription = $NagiosDescription + ", "
}
$NagiosDescription = $NagiosDescription + $key[$i] + " queue has " + $value[$i] + " messages"
# Set the status to failed.
$NagiosStatus = "2"
}
elseif ($sub_val -gt "6")
{
if ($NagiosDescription -ne "")
{
$NagiosDescription = $NagiosDescription + ", "
}
$NagiosDescription = $NagiosDescription + $key[$i] + " queue has " + $value[$i] + " messages"
# Don't lower the status level if we already have a critical event
if ($NagiosStatus -ne "2")
{
$NagiosStatus = "1"
}
}
$key.RemoveRange($i,1)
$value.RemoveRange($i,1)
#Write-Host "After Submission Operation:"
#Write-Host $key
#Write-Host $value
$i=0
ForEach ($shcontent in $key)
{
if ($shcontent.contains("Shadow"))
{
#Write-Host "Removed Shadow"
#Process the Shadow queue and remove it from the ArrayList
#Write-Host "Value of value:" $value[$i]
[int[]]$shadow_value = $value[$i]
if ( $shadow_value -gt "3" )
{
# Format the output for Nagios
if ($NagiosDescription -ne "")
{
$NagiosDescription = $NagiosDescription + ", "
}
$NagiosDescription = $NagiosDescription + $key[$i] + " queue has " + $value[$i] + " messages"
# Set the status to failed.
$NagiosStatus = "2"
}
elseif ($shadow_value -gt "2")
{
if ($NagiosDescription -ne "")
{
$NagiosDescription = $NagiosDescription + ", "
}
$NagiosDescription = $NagiosDescription + $key[$i] + " queue has " + $value[$i] + " messages"
# Don't lower the status level if we already have a critical event
if ($NagiosStatus -ne "2")
{
$NagiosStatus = "1"
}
}
$r_getops = $getpos.Add("$i")
#$key.RemoveRange($i,1)
#$value.RemoveRange($i,1)
}
$i = $i + 1
}
#key length calculation
# write a subroutine to calculate string lenght
Function flength ([String[]]$skey)
{
ForEach ( $content in $skey )
{
$len = $len + 1
}
return $len - 1
}
ForEach ( $pos in $getpos )
{
# if the range is not null, call subroutine to calculate the length of key and get the position to delete it.
$kl = flength $key
if ( $pos -gt $kl )
{
$key.RemoveRange($kl,1)
$value.RemoveRange($kl,1)
break
}
else
{
$key.RemoveRange($pos,1)
$value.RemoveRange($pos,1)
}
}
#Write-Host "After Shadow Operation:"
#Write-Host $key
#Write-Host $value
$i=0
ForEach ($otcontent in $key)
{
#Process the Other queue
[int[]]$ot_value = $value[$i]
if ($ot_value -gt "10")
{
# Format the output for Nagios
if ($NagiosDescription -ne "")
{
$NagiosDescription = $NagiosDescription + ", "
}
$NagiosDescription = $NagiosDescription + $key[$i] + " queue has " + $value[$i] + " messages"
# Set the status to failed.
$NagiosStatus = "2"
}
elseif ($ot_value -gt "5")
{
if ($NagiosDescription -ne "")
{
$NagiosDescription = $NagiosDescription + ", "
}
$NagiosDescription = $NagiosDescription + $key[$i] + " queue has " + $value[$i] + " messages"
# Don't lower the status level if we already have a critical event
if ($NagiosStatus -ne "2")
{
$NagiosStatus = "1"
}
}
$i = $i + 1
}
# Output, what level should we tell our caller?
if ($NagiosStatus -eq "2") {
Write-Host "CRITICAL: " $NagiosDescription
exit 2
} elseif ($NagiosStatus -eq "1") {
Write-Host "WARNING: " $NagiosDescription
exit 1
} else {
Write-Host "OK: All mail queues within limits."
exit 0
}
#Write-Host $key and $value
#Write-Host "After all Operation:"
#Write-Host $key
#Write-Host $value
Subscribe to:
Posts (Atom)