Jump to content

Reports from OpenFiles within a (file)server,(also monitoring the most used extensions)


DavidLago
 Share

Recommended Posts

Hello, fellows.

I recently gave fingerbirth to a script that reports out the current files, and users opening those files currently. Also provides a filter for strings/extensions.

Suggestions and improvements are welcome.

#cs  ---------------------------Script Start-------------------------------------
| Author:         DavidLago (Hellfrost)
| Script Function: Reports out a logfile containing openfiles within a (file)server, configured under an ini file
#ce  ----------------------------------------------------------------------------
;---------------------------------------------------------------INCLUDES--------------------------------------------------------------------------------
#include <Process.au3>
#include <GuiConstantsEx.au3>
#include <WindowsConstants.au3>
#include <array.au3>
#include <Date.au3>
;------------------------------------------------------------EXPORT-FOLDER--------------------------------------------------------------------------------
If Not FileExists(@ScriptDir & "\Export") Then
DirCreate(@ScriptDir & "\Export")
EndIf
;------------------------------------------------------------ WHILE LOOP --------------------------------------------------------------------------------
Global $iNow = _NowCalc()
Global $TimeOut = False
While $TimeOut = False
;---------------------------------------------------------VARIABLES-----------------------------------------------------------------------------------
Global $Date = @MON & "-" & @MDAY & "-" & @YEAR
Global $Hour = @HOUR & "'" & @MIN & "''"
Global $FullDate = $Date & "_" & $Hour
Global $ReportDir = @ScriptDir & "\Export\"
;----------------------------------------------------------INI_READ-----------------------------------------------------------------------------------
Global $MailFrom = IniRead("Config.ini", "Mail", "MailFrom", "Script_OpenFiles@AutoITScripting.net")
Global $Mailto = IniRead("Config.ini", "Mail", "Mailto", "")
Global $MailSubj = IniRead("Config.ini", "Mail", "MailSubj", "")
Global $MailBody = IniRead("Config.ini", "Mail", "MailBody", "")
Global $TimeFreq = IniRead("Config.ini", "Time", "Frequency", "60")
Global $TimeDur = IniRead("Config.ini", "Time", "Duration", "24")
Global $ReportOut = $FullDate & "_" & IniRead("Config.ini", "ReportOut", "ReportOut", "Report")
Global $FilterExt = IniRead("Config.ini", "FilterExt", "FilterExt", "N")
Global $FileExt = '"' & IniRead("Config.ini", "FileExt", "FileExt", "exe") & '"'
Global $FormatOut = IniRead("Config.ini", "FormatOut", "FormatOut", "Table")
;-------------------------------------------------------MATH VARIABLES----------------------------------------------------------------------------------
Global $CommandCombo, $CommandFinal, $iDiff, $FreqDurMath
$iTimeFreq = $TimeFreq * 60000 ; Turn to miliseconds
$iTimeDur = $TimeDur ; Turn to minutes
$FreqDurMath = ($TimeDur * 60) / $TimeFreq
;-------------------------------------------------------ERROR-TREATMENT---------------------------------------------------------------------------------
If $iTimeFreq < 900000 Then
MsgBox(4112, "Error", 'The parameter "FREQUENCY" at the config.ini file is set to a number below 15. 15 minutes is the minumum threshold', 5)
$MailBody = 'The Script "' & @ScriptName & '" is reporting the following error: The parameter "FREQUENCY" at the config.ini file is set to a number below 15. ' & @CRLF & '15 minutes is the minumum threshold'
SendMail($MailBody)
Exit
EndIf
If $FreqDurMath < 1 Then
$MailBody = 'The Script "' & @ScriptName & '" The parameters "FREQUENCY" and "DURATION" at the config.ini file is set to a number which prevents it to loop more than once. Do you want to continue?'
SendMail($MailBody)
If MsgBox(4116, "Error", 'The parameters "FREQUENCY" and "DURATION" at the config.ini file is set to a number which prevents it to loop more than once. Do you want to continue?', 10) = 7 Then Exit
EndIf
;----------------------------------------------------------COMMAND BREED I-------------------------------------------------------------------------------
Global $QueryCommand = "/query " & "/FO " & $FormatOut & " /V " & "/nh "
Global $FindCommand = "| find /I " & $FileExt
Global $ExportCommand = " > " & '"' & $ReportDir & $ReportOut & ".log" & '"'
If $FilterExt = "Y" Then
$CommandCombo = $QueryCommand & $FindCommand & $ExportCommand
Else
$CommandCombo = $QueryCommand & $ExportCommand
EndIf
$CommandFinal = "openfiles " & $CommandCombo
;-------------------------------------------------------------OPTIONS-----------------------------------------------------------------------------------
If $FilterExt = "Y" Then
If $FileExt <> "" Then
TrayTip("Message from the " & @ScriptName & " Script: ", 'The command "' & $CommandFinal & '" is running in this server. Options enabled are the following:' & @CRLF & @CRLF & "Filter: " & '"' & $FilterExt & '"' & @CRLF & "Ext/String: " & $FileExt & @CRLF, 1, 1)
Else
TrayTip("Message from the " & @ScriptName & " Script: ", 'The command "' & $CommandFinal & '" is running in this server.', 1, 1)
EndIf
EndIf
;--------MAIN COMMAND-----------------------------------##################
_RunDOS($CommandFinal)
;--------MAIN COMMAND-----------------------------------##################
$iDiff = _DateDiff('h', $iNow, _NowCalc())
Sleep($iTimeFreq) ; <-Frequency
If $iDiff > $iTimeDur Then ; <-- Is time through?
$TimeOut = True
$MailBody = 'The script "' & @ScriptName & '", which was running at the server "' & @ComputerName & '", generated the requested logs successfully. Please, contact your Domain administrator to claim them'
SendMail($MailBody)
EndIf
WEnd ;==> While from line 18
 
;------------------------Function to send e-mail--------------------------------------------------------------------------------------------------------------
Func SendMail($MailBody)
$objEmail = ObjCreate("CDO.Message")
$objEmail.From = $MailFrom
$objEmail.To = $Mailto
$objEmail.Subject = $MailSubj
$objEmail.Textbody = $MailBody
$objEmail.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
$objEmail.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/smtpserver") = _
"mail.domain.net" ;                          <----------------------------------------- Insert your mailserver here
$objEmail.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25
$objEmail.Configuration.Fields.Update
$objEmail.Send
EndFunc   ;==>SendMail

Contents of the config.ini file:

#--------------------------------------------------------------------#
#                           Config. ini                                          #
#--------------------------------------------------------------------#
#--------------------------------------------------------------------#
#   OPENFILES REPORT:             
#   Reports out a logfile containing openfiles within a server
#--------------------------------------------------------------------#
 
[Time]
 
# What frequency? (Minutes [minimum: 15 min) / How long? (Hours [Minimum: 1H)
Frequency = 15
Duration = 1
 
 
 
[FilterExt]
 
# GREP Extension/String? ( Y, N)
FilterExt = Y
 
 
 
[FileExt]
 
# What's the extension or string combo to be matched? (.exe; .doc; .csv; Solidworks; Report, etc. (default: line commented by #)
FileExt = doc
 
 
 
[ReportOut]
 
# LogFile Sufix
ReportOut = Report
 
 
 
[FormatOut]
 
# LogFile Format: CSV or Table. (default: table)
FormatOut = CSV
 
 
 
[Mail]
 
MailFrom = Script_OpenFiles@AutoITScripts.com
Mailto = hellfrost@hellfrost.info
MailSubj = OpenFiles Alert Example
MailBody = This message is an alert.

It might be useful for a Domain admin someday.

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...