Рубрики: PowerShell

Рестарт IIS через PowerShell

PowerShellPowerShellРестарт IIS + PowerShell + Task Scheduler. Связка весьма замечательная, особенно, когда в случае неудачного запуска высылается письмо на почту. В этой статье мы с вами научимся перезапускать Internet Information Service.

Рестарт IIS через PowerShell

Вопрос главный, но не единственный: зачем ребутать iis? А затем, что иногда в веб-приложениях появляются ошибки, которые правятся только ребутом IIS-a. Конечно, еще некоторые изменения веб-конфигов могут потребовать перезапуска. Но в моей практике возникали именно ошибки, которые решались путем перезапуска. Я решил пойти простым способом, воспользовавшись командой iisreset, но далее я подумал: “А что если iis не запустится? Как я об этом узнаю?” сразу же я пришел к тому, что необходимо делать проверку.

Так как PowerShell не возвращает результат выполнения скрипта, то есть неизвестно с ошибками он выполнился или без, нужен был какой-то критерий, по которому можно отслеживать успешный результат. В итоге я решил ссылаться на одну единственную фразу, которая имеете в ряде строк при успешном перезапуске IIS – Internet services successfully restarted. Соответственно, мне необходимо реализовать проверку и в случае отрицательного результата, я решил воспользоваться способом оповещения через письмо, который описал в этой статье. Плюс ко всему, если понадобится скалировать скрипт на несколько серверов, я бы хотел знать, на котором возникла проблема. Приступим к реализации:

Первым делом получим имя сервера:
$server = hostname

Далее вобьем в переменную команду перезапуска IIS:
$iisr = iisreset

После чего, добавим переменную, которая будет в себе содержать искомое значение:
$equals = “Internet services successfully restarted”

Отлично, теперь необходимо добавить проверку. Мы знаем, что в одной из четырех строк, которые выводятся как результат выполнения команды имеется и наша строка из переменной $equals. Соответственно мы будем проверять текст, следующим образом:

$Final = echo $iisr.Contains($equals)

Проверка реализована, едем дальше. Так как у нас есть условие для отправки письма, будет логично заранее подумать о том, что у нас появится if. Но предварительно нам необходимо задать настройки для адреса, на который отправлять письмо и адреса, с которого отправлять письмо:
$EmailFrom = “e@mail.ru”
$EmailTo =”target@mail.ru”

Пришло время добавить условия отправки письма:

if ($Final -ne “True”)

Итог:

Соответственно в теле нужно выполнить отправку письма. В переменной $Final мы получим значение либо True, либо False, поэтому в условии мы указываем, что письмо необходимо отправлять в том случае, если в переменной Final значение равно False. ПыСы: условие еще можно написать так: if ($Final -eq “False”) – эквивалентно первому варианту.

В целом, весь скрипт выглядит так:

#Restart iis and searching contains#
$server=hostname
$iisr = iisreset
$equals = "Internet services successfully restarted"

$Final = echo $iisr.Contains($equals) ##$Final must be True

#SMTP Settings#
$EmailFrom="noreply@mail.ru"
$EmailTo="e@mail1.ru, e@mail2.ru"

if ($Final -ne "True")
 {
  $Subject="$server iisreset failed"
  $Body="One of IIS instanses is not restarted. Please login on $server and see the outlog."
  $SmtpServer="postserv.domain.ru"
  $smtp=New-Object net.mail.smtpclient($SmtpServer)
  $smtp.Send($EmailFrom, $EmailTo, $Subject, $Body)
 }

Кстати, если перезапуск IIS был успешен, то никаких отчетов не высылается. Подписывайтесь на нашу группу ВК и YouTube-канал!

0

Автор публикации

не в сети 1 час

Vapi

0
Комментарии: 19Публикации: 104Регистрация: 14-04-2017
Vapi

Новаястатья

SQL – получаем активные соединения

Добрый день. В этой статье мы с вами научимся писать запросы, которые выводят активные соединения…

2 недели назад

Готовые шаблоны/шапки YouTube PSD #5

Здравствуйте, уважаемые читатели! Было принято решение 12 числа каждого месяца специально для вас делать ежемесячный…

2 недели назад

HTML – IMG

Всем привет дорогие читатели. В этом посте мы с вами узнаем как вставить картинку в…

2 недели назад

CSS – Отступы

Сегодня мы поговорим про отступы в CSS. В предыдущих статьях неоднократно они использовались для примеров,…

2 недели назад

JavaScript – меняем CSS

Немного отойдем от изучения powershell и добавим JavaScript. Сегодня мы научимся менять CSS на странице…

2 недели назад

Powershell – Операторы сравнения

Уже неоднократно в наших статьях встречались операторы сравнения, например, когда мы разбирали Where-Object. В этой…

2 недели назад
Авторизация
*
*

Login form protected by Login LockDown.


Регистрация
*
*
*
Пароль не введен
Генерация пароля