Скрипт проверки свободного места на жестком диске
И так. Буду краток и постараюсь не рассусоливать, очередной скрипт, который может помочь любому системному администратору, не обладающему большим количеством средств мониторинга всего и вся.
Задача: Написать скрипт, который будет отправлять уведомления на электронную почту или при помощи СМС на мобильник, если на жестком диске заканчивается место. Скрипт должен быть универсальным и иметь возможность ведения логов, распространения при помощи групповых политик, без правок работать на серверах с поддержкой 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 } } |
Чтобы у Вас небыло проблем с кодировками, выкладываю оригинальный рабочий скрипт. Вам остается его только настроить:
[dm]2[/dm]