Как то было скучно на работе, поэтому решил свой досуг потратить с пользой для общества, а в первую очередь для себя, да и к тому же давно хотел сделать такой инструмент, который вовремя меня оповестит о надвигающейся буре, а именно - мне всегда хотелось вовремя знать о том, что у меня на каком-либо серваке (это больше касается файловых и бэкапных серваков) нечаянным образом осталось мало места на дисках. Данный неприятный момент может случиться по нескольким причинам: пользователи решили выложить на сетевой диск и общий просмотр огромное количество информации (например, фотки и видео с отпусков), по каким-либо причинам не сработал скрипт автоматического избавления от старых резервных копий и по независящим от Вас причинам.
Итак о маленькой плюшке. Скрипт устроен так, что не будет беспокоить админа до тех пор, пока не увидит, что надвигается буря - места на каком-либо из дисков менее установленного лимита. Расчёт ведётся в процентах. Скрипт, как уже понятно из выше сказанного, сканирует все диски, имеющиеся в системе.
Итак, сам скрипт (в скрипте имеются необходимые коментарии):
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' Скрипт, который следит за свободным местом на всех дисках '
' Скрипт написал Анчуров Олег Владимирович в 2015 году. Версия 1. '
' Скрипт FreeSizeInAllDrive.vbs '
' Сайт http://ithelp.moy.su '
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Dim FSO, Drives, D
Set FSO = CreateObject("scripting.filesystemobject")
Dim WshShell, CmpName
Set WshShell = CreateObject("WScript.Shell")
CmpName = WshShell.ExpandEnvironmentStrings("%computername%")
Dim MSG
Dim Letter, VolumeName, TotalSize, FreeSpace, FileSystem
Dim Ratio, MinRatio, Limit, MsgLimit
MinRatio = 100
MsgLimit = False
Limit = 10 'Минимальное значение свободного места на диске
MSG = ""
Function ConvertSize(Size)
Prefix = "Байт"
If Size > 1024 Then
Size = Size / 1024
Prefix = "кБайт"
End If
If Size > 1024 Then
Size = Size / 1024
Prefix = "МБайт"
End If
If Size > 1024 Then
Size = Size / 1024
Prefix = "ГБайт"
End If
If Size > 1024 Then
Size = Size / 1024
Prefix = "ТБайт"
End If
ConvertSize = CStr(Round(Size, 2)) & Prefix
End Function
MSG = MSG + "ПРОТОКОЛ РАБОТЫ СКРИПТА, АВТОМАТИЧЕСКИ ПРОВЕРЯЮЩИЙ ОСТАВШЕЕСЯ МЕСТО НА ДИСКАХ:" & VbLf
MSG = MSG + "Имя сервера: " & CmpName & VbLf & VbLf
Set Drives = FSO.Drives
For Each D In Drives
Letter = D.DriveLetter
MSG = MSG + "Диск: " & Letter
If D.IsReady Then
VolumeName = D.VolumeName
If VolumeName <> "" Then
MSG = MSG + " (" & VolumeName & ")" & VbLf
Else
MSG = MSG & VbLf
End If
MSG = MSG + "Состояние диска: Доступен" & VbLf
TotalSize = D.TotalSize
FreeSpace = D.FreeSpace
Ratio = Int(FreeSpace / TotalSize * 100)
If Ratio < MinRatio Then MinRatio = Ratio
MSG = MSG + "Cвободное место на диске: " & ConvertSize(FreeSpace) & " из " & ConvertSize(TotalSize) & VbLf
FileSystem = D.FileSystem
MSG = MSG + "Файловая система: " & FileSystem & VbLf
If MinRatio < Limit Then
MsgLimit = True
MSG = MSG + "ВНИМАНИЕ! На данном диске свободного места менее " & CStr(Limit) & "%!"
End If
MSG = MSG & VbLf
Else
MSG = MSG & VbLf
MSG = MSG + "Состояние диска: Недоступен" & VbLf& VbLf
End If
Next
Set FSO = Nothing
If MsgLimit Then
Dim objEmail
MSG = MSG + "Время/дата отработки скрипта: " & CStr(Time) & "/" & CStr(Date) & vbCrLf
Const EmailFrom = "bot@superpuperfirma.ru" ' от кого будет отправляться e-mail
Const EmailPassword = "SuperPuperPassword" ' пароль от e-mail отправителя
Const strSmtpServer = "smtp.superpuperfirma.ru" ' smtp сервер
Const EmailTo = "admin@itwpenta.ru" ' Кому будет отправляться e-mail
Set objEmail = CreateObject("CDO.Message")
objEmail.From = EmailFrom
objEmail.To = EmailTo
objEmail.Subject = "Отчёт по работе скрипта FreeSizeInAllDrive на сервере " & CMPName ' Тема письма
objEmail.Textbody = MSG
objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1
objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendusername") = EmailFrom
objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendpassword") = EmailPassword
objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserver") = strSmtpServer
objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25
objEmail.Configuration.Fields.Update
objEmail.Send
Set objEmail = Nothing ' Чистим память.
End If
Данного скрипт необходимо запускать по заданию (например, раз в неделю).
Жизнь админа должна быть проще! |