Created
February 10, 2017 16:39
-
-
Save rsyuzyov/5143496139b7d7e3d1164c9709111ce3 to your computer and use it in GitHub Desktop.
Проверка и восстановление репликации виртуальных машин (для планировщика)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Для работы скрипта необходимо задать переменные: | |
# $clientname, $hvhosts | |
# | |
# В функции отправки почты в техподдержку задать переменные: | |
# $emailTo, $emailFrom, $password, $smtpServer | |
# | |
############################################################################## | |
#отправка почты в саппорт | |
function send-email-to-support ([string]$subject, [string]$body) | |
{ | |
$emailTo = 'email1@gmail.com', 'email2@mail.ru', "email3@outlook.com" # адреса получателей в кавычках через запятую | |
$emailFrom = 'email4@mail.ru' # адрес отправителя | |
$password = 'emailpassword' # пароль отправителя | |
$smtpServer = 'smtp.mail.ru' # smtp сервер отправителя | |
$secpwd = ConvertTo-SecureString $password -AsPlainText -Force | |
$credential = New-Object System.Management.Automation.PSCredential ($emailFrom, $secpwd) | |
Send-MailMessage -From $emailFrom -Subject $subject -Body $body -To $emailTo -Credential $credential -DeliveryNotificationOption None -Priority High -SmtpServer $smtpServer -UseSsl | |
} | |
############################################################################## | |
cls | |
$clientname = 'mydomain' #имя клиента для указания в теме письма | |
$hvhosts = 'host1', 'host2', 'host3' #серверы для проверки | |
$iserrors = 0 #флаг, индицирующий наличие ошибок | |
$iswarnings = 0 #флаг, индицирующий наличие предупреждений | |
$message = '' #переменная для описания ошибок, ничего указывать не надо | |
foreach ($hvhost in $hvhosts) #делаем обход хостов HV, указаных в массиве $hvhosts | |
{ | |
Write-Host "Опрос сервера $hvhost`n" | |
$vms = Get-VM -ComputerName $hvhost #выбираем все ВМ на хосте | |
foreach($vm in $vms) #делаем обход всех ВМ | |
{ | |
#Автозапускаемая ВМ не запущена: | |
If ($vm.ReplicationMode -eq 'Primary' -and $vm.AutomaticStartAction -eq 'Start' -and $vm.State -ne 'Running') #если ВМ не реплика и настроен старт при запуске и не запущена | |
{ | |
$iserrors = 1 | |
$message = $message + '' + $hvhost + '\' + $vm.Name + ": not started, starting`n" | |
Start-VM -VM $vm | |
} | |
#Критическое состояние репликации | |
If ($vm.ReplicationHealth -eq 'Critical') | |
{ | |
$iserrors = 1 | |
$message = $message + "$hvhost\" + $vm.Name + ": replication health is critical (state: " + $vm.ReplicationState + "), resuming`n" | |
if ($vm.ReplicationState -ne 'Replicating' -and $vm.ReplicationState -ne 'Resynchronizing') #если репликация не работает, попробуем ее возобновить | |
{ | |
if ($vm.ReplicationState -eq 'WaitingForStartResynchronize') | |
{ | |
Resume-VMReplication -VM $vm -Resynchronize | |
} | |
else | |
{ | |
Resume-VMReplication -VM $vm | |
} | |
} | |
} | |
#Предупреждения по состоянию репликации | |
If ($vm.ReplicationHealth -eq 'Warning') | |
{ | |
$iswarnings = 1 | |
$message = $message + '' + $hvhost + '\' + $vm.Name + ": replication health is warning (state: " + $vm.ReplicationState + "), reseting state info`n" | |
if ($vm.ReplicationState -ne 'Replicating' -and $vm.ReplicationState -ne 'Resynchronizing') #если репликация не работает, попробуем ее возобновить | |
{ | |
Resume-VMReplication -VM $vm | |
} | |
else #иначе сбросим статистику | |
{ | |
Reset-VMReplicationStatistics -VM $vm | |
} | |
} | |
} | |
} | |
if ($iserrors -eq 1) #если есть ошибки | |
{ | |
$subject = "$clientname : Hyper-V errors!" | |
Write-Host $message | |
send-email-to-support $subject $message | |
} | |
elseif ($iswarnings -eq 1) #если есть предупреждения | |
{ | |
$subject = "$clientname : Hyper-V warnings!" | |
Write-Host $message | |
send-email-to-support $subject $message | |
} | |
else #если все в порядке | |
{ | |
$subject = "$clientname : Hyper-V is ok" | |
$message = 'All ok' | |
Write-Host $subject | |
#send-email-to-support $subject $message | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment