Автоматизация установки обновлений на клиентскую машину с отсевом ошибочных обновлений
Т.к. глюк обновлений вызывает аварийный режим, жрет неимоверное количество времени персонала на абсолютно бессмысленную фигню, и с целью преехода к умной инфраструктуре было решено попробовать автоматизировать этот процесс. Попутно был получен скрипт который может установить все обновления на свежеустановленую машину в автоматическом режиме.
Сразу оговорюсь — данный скрипт не умеет ремонтировать систему которая не загружается вообще, он умеет сам ставить обновления, в автоматическом режиме выкидывать обновы вызывающих циклическую перезагрузку, имеет возможность вручную добавить плохие обноления в список и сигнализировать админу о возникших неполадках с установкой.
Как это все запустить, быстрый старт
2. Выставье параметры оповещения о ошибках обновлений, для этого измените параметры $ReportMail1 = 'admin@test.local' на вашу почту $SMTPServer = 'mail.test.local' на ваш почтовый сервер.
3. скопировать скрипт сброса конфигурации на нужную машину и запустить его. Он создаст каталог с начальными настройками, если каталог есть сбросит их в начальное состояние.
4. в каталог с предыдущим скриптом скопировать скрипт обновлений (внимание, ниже большой скрипт, 85кб), чтобы не копипастить скачайте его отсюда
5. создать задание в планировщике с правами SYSTEM на запуск 1 раз в день. Известная проблема — установка обновлений может быть инициирована только под правами SYSTEM. (кстати можете этот способ применять для запуска активаторов и всего что должно работать с наивысшей привелегией)
хорошо себя показала задержка после старта 6 часов
Все, сценарий должен работать.
Первые 3 раза его можно запустить вручную для проверки. Запустите задание из планировщика и проверьте содержимое файла \BadUpdates\log.txt он должен содержать лог работы сценария. Если он пуст проверьте разрешена ли политика исполнения скриптов, доступен ли сервер обновлений, попробуйте вручную поискать обновления.
Если обновлений будет больше чем 45 (можете менять это значение) сценарий будет пытаться устанавливать обновления пачками. При этом первый раз он попытается поставить по 1\3 за раз, если ни одна из 3х пачек обновлений не установится, шаг будет изменен на 1/4, если ниодна из пачек не встанет то алгоритм перейдет на установку по 5. Данный алгоритм родился из жизни, когда встретилось на одной машине 6 неподходящих обновлений равномерно размазаных, при этом устанавливать по одному почти 90 обновлений не вариант (90 дней по одной обновке).
- на следующий день сбросит автомат быстрых обновлений, вычислено сколько обновлений ставить за раз, при первом проходе 1/3, при втором быстром проходе 1/4, при третьем по 5
- каждый день пока работает быстрая установка будет получатся список обновлений из него будут удалены обновления которые пробовали ставить ранее и обновления из списка точно плохих обновлений
- из оставшихся будут выбраны некоторое количество обновлений, они будут отправлены на установку
- обновления отправленные на установку будут записаны в файл BadUpdates\LastInstalledUpdates.txt и будут исключены из списка при следующем проходе
- После завершения быстрого прохода произойдет автоматический переход к установке по одному обновлению за раз
- сначала произойдет сброс переменных для установки по одному обновлению
- будет получен список обновлений без тех что пробовали и точно плохих, если обновлений не осталось то не установленные обновления будут добавлены в список точно плохих и потправлены оповещением на почту. Если еще есть то начнется установка
- установите параметр $RebootEnabled = $true, это разрешит сделать перезагрузку сразу же после работы скрипта
- установите триггер срабатывания на 10 минут после запуска системы
- сохраните сценарий и запустите его
- дальше он сам будет пытаться устанавливать обновления и будет сам перезагружать компьютер, создавать отдельного пользователя, или логинится специально для его работы не нужно.
- через определенное время контролируйте его заглядывая в лог файл
- когда он все поставит и перейдет в состояние 9 (ожидание обновлений) установите $RebootEnabled = $false
- отключите триггер если вам больше не нужно обновляться
WUErrorreporting
1. Установите Ваши переменные Наиболее значимым явлется переменная $DaysBefore — за сколько дней будет сканироваться журнал, по умолчанию 5 дней. Если произошла ошибка установки обновления то вы будете получать административное оповещение 5 дней подряд об одной и тойже ошибке. В принципе нормально, ставить 1 или 2 дня, не имеет смысла, можно пропустить репорт если ктото выходил работать на выходные.
Переменная $SaveLog отвечает за сохранение лога текущего прогона на диск. Полезно, вы можете придти или подключится к клиентской машине и во время работы заглянуть какое обновление не поставилось.
Последние 4 переменные регулируют кому отправлять отчет. Нужно оставить $SendReport = $true если нужно чтобы приходило оповещение на почту, указать email админа $ReportMail1 = 'admin@test.local' и на какой сервер слать $SMTPServer = 'mail.test.local'. Если нужна аутентификация то добавьте ее в 156 строке
2. Принцип работы очень прост
сгружаем только ошибки с ID20 из журнала System
Если ошибки есть то формируем объекты отчета
применяемый CSS стиль заточен под outlook, а он в качестве HTML движка использует Word, что ведет к неполной поддержке стандарта. Если ктонибудь подберет другой красивый стиль который работал бы в Outlook скиньте и мне.
Install-ClientUpdate.ps1
в скрипте реализованы 3 конечных автомата, для простого администратора сценарий будет достаточно сложным для понимания.
выставляем нужные перменные: $FastInstallLimit выше этого порога будет включатся быстрая установка, меньше этого порога будем ставить обновления по одному. $RebootEnabled разрешает перезагрузку после каждого прохода скрипта. Применяется если вам нужно обновить машину. Устанавливаете этот параметр в $true, выставляете время запуска 10 минут и оставляете до утра.
Чуть ниже идут настройки почты
Если вам нужно посмотреть есть ли обновления на удаленной или локальной машине используйте следующий код. Можно просто скопипастить в консоль
Общая рекомендация: при первом запуске лучше быть на связи с пользователем, т.к. он пугается долгой установки обновлений и последующего отката. Также, лучше ему объяснить чтобы он просто отключал компьютер, а не нажимал «обновить и завершить работу» иначе установятся вообще все обновления и логика работы будет нарушена.