url image

Оповещение об исчерпании дискового пространства Windows

Статья давно не обновлялась, поэтому информация могла устареть.

Для оповещения об исчерпании свободного места используем Powershell-скрипт с расширением ps1, представленный ниже Скачать скрипт Для работы скрипта необходим почтовый ящик, локальный/удаленный не имеет значения. Необходимо скачать скрипт и заполнить поля в разделе Enviroments. В скрипте можно задать аварийный и критический уровень исчерпания места. После создания скрипта требуется добавить его исполнение в планировщик.

#http://www.ionline.by
#Enviroments
#Путь к файлам логов, например, c:\logs\
$logpath = 'ENTER_LOG_PATH'
#Имя Лог-файла
$lname = 'hdd-freespace.log'
#IP-адрес или доменное имя почтового сервера, например, mail.example.com
$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
}
}

Этот материал был полезен?