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

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

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

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

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

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

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

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
#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
}
}

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

http://www.ionline.by/wp-content/plugins/downloads-manager/img/icons/powershell.gif Скачать: hdd-test.ps1 ()
Файл добавлен: 22/01/2013
Количество скачиваний: 1608
Описание: Скрипт для проверки свободного места на жестких дисках и информировании при помощи e-mail о окончании свободного места.

     

  1. kh.romeroo, 20 апреля, 2015

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

iOnLine - сайт о мире IT  | Мобильная версия


Полная версия сайта