Приветствую Вас ГостьСреда, 18.09.2019, 16:32

В помощь админу


Каталог статей

Главная » Статьи » Windows » Резервное копирование

Автоматическая проверка оставшегося места на диске

Как то было скучно на работе, поэтому решил свой досуг потратить с пользой для общества, а в первую очередь для себя, да и к тому же давно хотел сделать такой инструмент, который вовремя меня оповестит о надвигающейся буре, а именно - мне всегда хотелось вовремя знать о том, что у меня на каком-либо серваке (это больше касается файловых и бэкапных серваков) нечаянным образом осталось мало места на дисках. Данный неприятный момент может случиться по нескольким причинам: пользователи решили выложить на сетевой диск и общий просмотр огромное количество информации (например, фотки и видео с отпусков), по каким-либо причинам не сработал скрипт автоматического избавления от старых резервных копий и по независящим от Вас причинам.

Итак о маленькой плюшке. Скрипт устроен так, что не будет беспокоить админа до тех пор, пока не увидит, что надвигается буря - места на каком-либо из дисков менее установленного лимита. Расчёт ведётся в процентах. Скрипт, как уже понятно из выше сказанного, сканирует все диски, имеющиеся в системе.

Итак, сам скрипт (в скрипте имеются необходимые коментарии):

'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'  Скрипт, который следит за свободным местом на всех дисках  '
'   Скрипт написал Анчуров Олег Владимирович в 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

Данного скрипт необходимо запускать по заданию (например, раз в неделю).

Жизнь админа должна быть проще!

Категория: Резервное копирование | Добавил: isz (06.10.2015)
Просмотров: 1526 | Теги: vbscript, vbs, свободное место, Скрипт | Рейтинг: 0.0/0
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Категории раздела
Active Directory [10]
DHCP [1]
Windows [12]
Wins [1]
Групповая политика [2]
Программы [2]
Резервное копирование [5]
Сеть [5]
Скрипты [25]
Терминальный сервер [6]
Почта [5]
Реестр [1]
Реестр Windows
Командная строка [6]
CMD: Командная строка Windows
Поиск
Форма входа
Наш опрос
Оцените мой сайт
Всего ответов: 108
Друзья сайта
  • Официальный блог
  • Сообщество uCoz
  • FAQ по системе
  • Инструкции для uCoz
  • Статистика