Поиск по сайту:

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"

Счастливого мониторинга!