PowerShell: Уведомите меня, если контроллер домена не работает
Существуют более чем достаточные программы для мониторинга. Большинство из них действительно полезны и прекрасно выполнены. Для тех, у кого нет такого программного обеспечения под рукой, есть только два варианта: обходиться без него или создать скрипт самостоятельно. Если вы хотите реализовать мониторинг с использованием ICMP Echo для проверки, например, ваших контроллеров домена, тогда эта статья для вас.
Цель
Цель состоит в том, чтобы уведомить администратора, если пинг к одному или нескольким контроллерам домена не удался. Это уведомление можно сделать по электронной почте, с записью в журнал событий или чем-то еще. В этой статье администратор будет уведомлен по электронной почте. Более конкретно, с этим:
Сценарий
Для тех из нас, кто быстро воспринимает информацию, полный текст распорядка сразу в начале. Мы детализируем его позже.
$dcs=(Get-ADDomainController -Filter *).Name
foreach ($item in $dcs) {
Try
{
Test-Connection $item -Count 1 -ErrorAction Stop | Out-Null
}
Catch
{
$Site=(Get-ADDomainController $item).Site
$IP= (Get-ADDomainController $item).IPv4Address
$date=Get-Date -Format F
Send-MailMessage -From Alert@domain.com -To p.gruenauer@domain.com -SmtpServer EX01 -Subject "Site: $Site | $item is down" -Body "$IP could not be reached at $date.`n`nIf you receive this message again in 15 minutes, $item is probably down."
}
}
Первое, что необходимо сделать, это получить все имена компьютеров контроллеров домена. Затем оператор Try - Catch выполняет пинг для всех контроллеров домена с количеством запросов 1 без какого-либо вывода. (что означает один пинг на каждый контроллер домена). Затем все потенциально неисправные контроллеры домена фиксируются, и будет сохранено их имя сайта и IP-адрес. Я сэкономлю себе объяснение переменной $date ;-). В конце концов, администратор будет уведомлен по электронной почте с подробной информацией о неисправном контроллере домена.
Обратите внимание, что ваш почтовый сервер должен быть настроен на разрешение электронной почты с компьютера, на котором вы запускаете скрипт.
Убедитесь, что на компьютере, на котором запускается скрипт, установлены инструменты удаленного администрирования серверов (RSAT). Они понадобятся вам для команды Get-ADDomainController. Вот команда для его установки:
Install-WindowsFeature RSAT-ADDS
Создайте запланированную задачу, которая будет выполняться каждые 15 минут.
Наша следующая задача - реализовать сценарий в Запланированной задаче, которая выполняется, например, каждые 15 минут. Таким образом, каждый контроллер домена будет проверяться в течение 15 минут.
Откройте Windows PowerShell или PowerShell ISE. Запустите следующий код, чтобы создать запланированную задачу (вам нужно изменить имя и расположение скрипта, имя запланированной задачи, временной интервал и учетную запись пользователя):
$Action=New-ScheduledTaskAction -Execute "powershell -Argument -Noprofile -WindowStyle Hidden -ExecutionPolicy Bypass -File C:\Temp\script.ps1"
$Trigger=New-ScheduledTaskTrigger -Once -At (Get-Date) -RepetitionInterval (New-TimeSpan -Minutes 15)
$Set=New-ScheduledTaskSettingsSet
$Principal=New-ScheduledTaskPrincipal -UserId active-directory\administrator
$Task=New-ScheduledTask -Action $Action -Trigger $Trigger -Settings $Set -Principal $Principal
Register-ScheduledTask -TaskName "Test DCs" -InputObject $Task -Force
Откройте taskschd.msc и проверьте свои настройки. Проведите тестовый запуск. Результат последнего запуска должен быть 0x0.
Рекомендуемая процедура
Для тестирования я бы рекомендовал отключить ICMP Echo на одном из ДЦ вместо выключения компьютера 😉
Тогда подождите 15 минут или выполните задачу немедленно.
Если вы не получили электронное письмо, я рекомендую изменить скрипт и заменить команду Send-MailMessage, чтобы исключить вероятность проблемы на почтовом сервере.
Вы можете просто заменить Send-Mailmessage, например, на Set-Content, чтобы сохранить ошибку в файл.
Это могло бы выглядеть так:
Set-Content C:\Temp\Log\log1.txt -Value "$item is down"
Счастливого мониторинга!




