Скрипт проверки свободного места на жестком диске

И так. Буду краток и постараюсь не рассусоливать, очередной скрипт, который может помочь любому системному администратору, не обладающему большим количеством средств мониторинга всего и вся.

Задача: Написать скрипт, который будет отправлять уведомления на электронную почту или при помощи СМС на мобильник, если на жестком диске заканчивается место. Скрипт должен быть универсальным и иметь возможность ведения логов, распространения при помощи групповых политик, без правок работать на серверах с поддержкой Powershell.

И так. Что касается СМС уведомлений, то тут я могу посоветовать активировать у своего мобильного оператора услугу SMS to E-MAIL и не париться по поводу этого вопроса.

Ниже приведен листинг описанного скрипта. Для его употребления, нужно заполнить соответствующие данные в разделе ENVIROMERNTS, после этого, положить скрипт на жесткий диск или в сетевую папку и настроить соответствующее задание в планировщике. При достижении критических отметок скрипт вышлет Вам письмо на указанный e-mail.

Важно! Если вы хотите отправлять почту через внешний почтовый сервер, на маршрутизаторе откройте порт 25 для SMTP соединений.

После листинга скрипта прикреплен файл для скачивания.

 

#Enviroments
#Путь к файлам логов, например, c:\logs\
$logpath = 'ENTER_LOG_PATH'
#Имя Лог-файла
$lname = 'hdd-freespace.log'
#IP-адрес или доменное имя почтового сервера, например, mail.ionline.by
$IPMailServer="ENTER_IP_OR_NAME_MAIL_SERVER"
#Адрес отправителя. Внимание, он же является логином для авторизации.
$SenderEmail="ENTER_SENDER_E-MAIL"
#Адрес получателя
$RecipientEmail="ENTER_RECIPIENT_E-MAIL"
#Пароль на ящик
$pass = 'E-MAIL_PASSWORD'
#Уровень предупреждения о окончании места. Указывается в процентах, от 1 до 100
$WarnSpace = '20'
#Аварийный уровень. Указывается в процентах
$Alarm = '5'

#Functions
function Send-mail ($subj = "VM" ,$body = "Text", $AttachPath = "0")
{
$SMTPClient = new-object System.Net.Mail.SMTPClient
$Msg = new-object System.Net.Mail.MailMessage

if ($AttachPath -ne "0")
{
$Attach = new-object System.Net.Mail.Attachment($AttachPath)
$Msg.Attachments.add($Attach)
}    
$Msg.To.Add($RecipientEmail)
$Msg.from=$SenderEmail
$Msg.Subject = $subj 
$Msg.Body= $body
$SMTPClient.Host=$IPMailServer
$SMTPClient.Credentials=New-Object System.Net.NetworkCredential "$SenderEmail" , "$pass"
$SMTPClient.Send($Msg)
#$Attach.Dispose()
} 

#Code
$time = Get-Date
$servname = $env:computername
"$time" >> $logpath\$lname
"Начало проверки количества свободного места на логисеских дисках сервера $servname" >> $logpath\$lname
gwmi win32_logicaldisk -filter "drivetype = 3" | foreach {
$did = $_.DeviceID
$vname = $_.VolumeName
$allspace = $([Math]::Round($_.Size / 1GB))
$fsp = $([Math]::Round($_.FreeSpace / 1GB))
$freeprc = ( $fsp / $allspace )*100
$freeprc = $([Math]::Round($freeprc))
if ( $freeprc -ile $WarnSpace ) {
if ( $freeprc -ile $Alarm ) {
"$time" >> $logpath\$lname
$uspace = $allspace - $fsp
$uprc = 100 - $freeprc
"КРИТИЧЕСКАЯ ОШИБКА!!! на $servname на диске $did метка $vname осталось $freeprc % свободного места ($fsp Гб). Требуется принять меры!" >> $logpath\$lname
"Допоннительная инфрмация о данном разделе:" >> $logpath\$lname
"Идентификатор:............................$did" >> $logpath\$lname
"Метка тома:...............................$vname" >> $logpath\$lname
"Полный объем диска:.......................$allspace" >> $logpath\$lname
"Свободное пространство на диске в ГБ:.....$fsp" >> $logpath\$lname
"Свсободное пространство на диске в %:.....$freeprc" >> $logpath\$lname
"Использовано на диске ГБ:.................$uspace" >> $logpath\$lname
"Использовано на дисе в %:.................$uprc" >> $logpath\$lname
$date =  Get-Date -UFormat %T
Send-mail -subj "КРИТИЧЕСНАЯ ОШИБКА! $date -  $servname" -body "$time !!!КРИТИЧЕСНАЯ ОШИБКА!!!
На $servname на диске $did метка $vname осталось $freeprc % свободного места ($fsp Гб). 
Требуется принять меры!
Допоннительная инфрмация о аварийном разделе:
Идентификатор:............................$did
Метка тома:...............................$vname
Полный объем диска:.......................$allspace
Свободное пространство на диске в ГБ:.....$fsp
Свсободное пространство на диске в %:.....$freeprc
Использовано на диске ГБ:.................$uspace
Использовано на дисе в %:.................$uprc
"
}
else {
"$time" >> $logpath\$lname
$uspace = $allspace - $fsp
$uprc = 100 - $freeprc
"Внимание на $servname на диске $did метка $vname осталось $freeprc % свободного места ($fsp Гб). Требуется принять меры!" >> $logpath\$lname
"Допоннительная инфрмация о данном разделе:" >> $logpath\$lname
"Идентификатор:............................$did" >> $logpath\$lname
"Метка тома:...............................$vname" >> $logpath\$lname
"Полный объем диска:.......................$allspace" >> $logpath\$lname
"Свободное пространство на диске в ГБ:.....$fsp" >> $logpath\$lname
"Свсободное пространство на диске в %:.....$freeprc" >> $logpath\$lname
"Использовано на диске ГБ:.................$uspace" >> $logpath\$lname
"Использовано на дисе в %:.................$uprc" >> $logpath\$lname
$date =  Get-Date -UFormat %T
Send-mail -subj "$date - $servname Предупреждение" -body "$time Внимание на $servname на диске $did метка $vname осталось $freeprc % свободного места ($fsp Гб). 
Требуется принять меры!
Допоннительная инфрмация о аварийном разделе:
Идентификатор:............................$did
Метка тома:...............................$vname
Полный объем диска:.......................$allspace
Свободное пространство на диске в ГБ:.....$fsp
Свсободное пространство на диске в %:.....$freeprc
Использовано на диске ГБ:.................$uspace
Использовано на дисе в %:.................$uprc
"
}
}
else {
"$time" >> $logpath\$lname
$uspace = $allspace - $fsp
$uprc = 100 - $freeprc
"Результат проверки локального диска $did :" >> $logpath\$lname
"Идентификатор:............................$did" >> $logpath\$lname
"Метка тома:...............................$vname" >> $logpath\$lname
"Полный объем диска:.......................$allspace" >> $logpath\$lname
"Свободное пространство на диске в ГБ:.....$fsp" >> $logpath\$lname
"Свсободное пространство на диске в %:.....$freeprc" >> $logpath\$lname
"Использовано на диске ГБ:.................$uspace" >> $logpath\$lname
"Использовано на дисе в %:.................$uprc" >> $logpath\$lname
}
}

Чтобы у Вас небыло проблем с кодировками, выкладываю оригинальный рабочий скрипт. Вам остается его только настроить:

[dm]2[/dm]

2 комментария к записи “Скрипт проверки свободного места на жестком диске”

  • kh.romeroo:

    Спасибо большое, Скрипт красиво отрабатывает!

  • noobsaper:

    Прошу прощения) Разобрался) Все работает отлично! Спасибо большое.Это именно то что я искал.

Оставить комментарий

 
Поделись с друзьями!
Открыть с мобильного телефона
qr code
Считайте QR-код при помощи камеры мобильного телефона или планшета и откройте страницу на своем устройстве
Мои проекты на GITHUB


Мои проекты на GitHub

iOnline в социальных сетях
Мы в Twitter