Я пытаюсь настроить оповещения о нехватке места на диске на сервере (Windows Server 2008 R2 Enterprise, SP1). Для этого я хочу запускать электронное письмо через планировщик задач всякий раз, когда событие с идентификатором 2013 регистрируется в журнале системных событий.
Проблема в том, что событие с идентификатором 2013, похоже, не происходит. Ключи реестра LowDiskSpaceMinimum и DiskSpaceThreshold отсутствуют, что, как я понимаю, должно означать, что событие 2013 происходит, когда дисковое пространство любого раздела падает ниже 10 процентов.
Я попытался запустить это событие на трех серверах, на системных дисках (C :) или дисках данных (E :).
У меня есть три теории:
Если кто-нибудь может дать мне какие-либо предложения, я был бы признателен.
В конце концов у меня это заработало. Мне пришлось специально добавить ключи реестра LowDiskSpaceMinimum и DiskSpaceThreshold, и тогда он начал работать.
Я согласен с тем, что установка программного обеспечения для мониторинга серверов, вероятно, является лучшим способом во многих случаях, и если бы я был системным администратором, я бы сделал именно это и централизовал бы его для мониторинга всех наших серверов. Но меня беспокоит только одна система, поэтому этот подход работает достаточно хорошо для моих нужд (и означает, что мне не нужно ждать, пока системные администраторы действительно что-то сделают !!)
Если кто-то еще хочет настроить что-то подобное, то вот настройки реестра (DiskSpaceThreshold установлен на 10%):
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\LanmanServer\Parameters]
"DiskSpaceThreshold"=dword:0000000a
"LowDiskSpaceMinimum"=dword:00000000
А вот и задание планировщика заданий, которое можно сохранить как файл xml и импортировать. Просто измените [ServerName], [YourDomain], [YourUserName] и адреса электронной почты:
<?xml version="1.0" encoding="UTF-16"?>
<Task version="1.3" xmlns="http://schemas.microsoft.com/windows/2004/02/mit/task">
<RegistrationInfo>
<Date>2013-02-05T14:37:17.165247</Date>
<Author>[YourDomain]\[YourUserName]</Author>
<Description>Send an emailed warning when a low disk space event is recorded.</Description>
</RegistrationInfo>
<Triggers>
<EventTrigger>
<Enabled>true</Enabled>
<Subscription><QueryList><Query Id="0" Path="System"><Select Path="System">*[System[Provider[@Name='srv'] and EventID=2013]]</Select></Query></QueryList></Subscription>
</EventTrigger>
</Triggers>
<Principals>
<Principal id="Author">
<UserId>S-1-5-20</UserId>
<RunLevel>LeastPrivilege</RunLevel>
</Principal>
</Principals>
<Settings>
<MultipleInstancesPolicy>IgnoreNew</MultipleInstancesPolicy>
<DisallowStartIfOnBatteries>false</DisallowStartIfOnBatteries>
<StopIfGoingOnBatteries>false</StopIfGoingOnBatteries>
<AllowHardTerminate>true</AllowHardTerminate>
<StartWhenAvailable>true</StartWhenAvailable>
<RunOnlyIfNetworkAvailable>false</RunOnlyIfNetworkAvailable>
<IdleSettings>
<StopOnIdleEnd>true</StopOnIdleEnd>
<RestartOnIdle>false</RestartOnIdle>
</IdleSettings>
<AllowStartOnDemand>true</AllowStartOnDemand>
<Enabled>true</Enabled>
<Hidden>false</Hidden>
<RunOnlyIfIdle>false</RunOnlyIfIdle>
<DisallowStartOnRemoteAppSession>false</DisallowStartOnRemoteAppSession>
<UseUnifiedSchedulingEngine>false</UseUnifiedSchedulingEngine>
<WakeToRun>false</WakeToRun>
<ExecutionTimeLimit>PT1H</ExecutionTimeLimit>
<Priority>7</Priority>
</Settings>
<Actions Context="Author">
<SendEmail>
<Server>smtpServer.YourCompany.co.uk</Server>
<Subject>Low disk space warning on server: [ServerName]</Subject>
<To>Admin@YourCompany.co.uk</To>
<From>noreply@YourCompany.co.uk</From>
<Body>Disk space is running low on server: [ServerName] - please investigate.</Body>
<HeaderFields />
<Attachments />
</SendEmail>
</Actions>
</Task>
В прошлом я успешно использовал подход PaulH. Однако сегодня я столкнулся с проблемой на Windows 2016 Server: при сохранении задачи я получил сообщение об ошибке, в котором говорилось, что электронная почта является устаревшей функцией, и Windows не позволяет сохранить новую задачу.
Чтобы выполнить эту работу, я нашел другой подход к https://www.netwoven.com/2017/04/28/send-an-e-mail-windows-server-2012-task-scheduler-deprecated-feature-solved/ который использует Powershell, как показано ниже:
Создайте сценарий Powershell, как показано ниже, и сохраните его как smtpscript.ps1 в известной папке, например C:\Users\Public\Documents
$SmtpClient = new-object system.net.mail.smtpClient
$MailMessage = New-Object system.net.mail.mailmessage
$SmtpClient.Host = "mail.yourserver.com"
$SmtpClient.Port = 587
$SmtpClient.Credentials = New-Object System.Net.NetworkCredential( "user@yourserver.com", "pw" );
$mailmessage.from = ("dnr@yourserver.com")
$mailmessage.To.add("you@yourserver.com")
$mailmessage.Subject = “An appropriate subject”
$mailmessage.Body = “An appropriate message body.”
$smtpclient.Send($mailmessage)
Сохраните этот сценарий, затем создайте задачу, как указано выше, но на вкладке «Действие» используйте Start a program
и введите эти данные:
Программа / сценарий: powershell.exe
Добавить аргументы (необязательно): C:\Users\Public\Documents\smtpscript.ps1
Сохраните задачу, и у вас будет уведомление по электронной почте.