Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # Для работы скрипта необходимо задать переменные:
- # $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
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement