PowerShell-скрипты вместо ручных действий: автоматизация рутины на 30 компьютерах
Я директор ITfresh, мы обслуживаем офисы на 15-50 рабочих мест. За полтора десятка лет насмотрелся, как админы вручную обходят по кругу компьютеры и щёлкают одно и то же. Расскажу, какие задачи давно пора отдать PowerShell, и почему это не про «продвинутость», а про деньги и нервы.
Почему ручками — это дорого, даже если кажется бесплатным
Вот смотрите. У клиента 30 рабочих мест, нужно поставить обновление КриптоПро на все машины. Админ идёт ногами, RDP-ом, через AnyDesk — неважно. По 7-10 минут на машину, если повезёт и юзер не занят звонком. Итого три с половиной часа чистого времени. Умножьте на почасовую ставку — и вот уже не «ну это быстро», а конкретная сумма в акте.
А теперь смешное. Через два месяца прилетает новая версия — и всё заново. Руками. Потому что скрипт писать было «некогда».
У одного клиента, торговой компании на Ленинградке, я как-то посчитал: за год админ потратил примерно 60 часов на переустановку одного и того же принтера на новых сотрудниках. Шестьдесят часов на то, что скриптуется за один вечер и потом работает молча. Это не гипербола, я поднял тикеты и реально посчитал по времени в трекере.
Установка и обновление софта — первое, что надо автоматизировать
Начните с простого: массовая установка программ. Не через «зайти на сайт, скачать exe, next-next-готово» на каждой машине, а через Chocolatey или прямые msiexec с ключами тихой установки. Пишется один раз, гоняется через Invoke-Command по списку компьютеров из AD.
Пример из практики — юрфирма, 25 машин, надо было раскатать 7-Zip, Adobe Reader, КриптоПро CSP и клиент 1С одинаковой версии на все места. Руками — это день работы, если не больше, с учётом что часть юзеров то на обеде, то в переговорке. Скриптом с пакетом msiexec /qn — сорок минут, из которых тридцать пять ушло на то, чтобы попить кофе и посмотреть, как бежит прогресс по логу.
Отдельно скажу про обновления Windows. Ручной WSUS-подход «нажать проверить обновления» на 30 машинах — это же можно оформить одной командой Get-WindowsUpdate -Install -AcceptAll через модуль PSWindowsUpdate, с рассылкой отчёта себе на почту, кто обновился, а кто завис на рестарте третий день.
Учётки, пароли, права — рутина, которая любит ошибки
Создание нового сотрудника в AD руками — это классика жанра, где чаще всего косячат. Забыли добавить в группу «Бухгалтерия», не так назвали логин, не там создали домашнюю папку. У меня было дело: в производственной компании новому кладовщику по ошибке дали права уровня замгендира, потому что администратор скопировал профиль не того человека. Раскрылось через три недели.
New-ADUser с шаблоном, где сразу прописаны OU, группы, домашняя папка, квота на диске — и человеческий фактор исчезает. Один раз настроил параметры под роль «бухгалтер», «менеджер», «кладовщик» — и дальше хоть каждый день заводи новых людей, результат предсказуемый.
То же самое с увольнением. Ручное отключение учётки — это когда через месяц выясняется, что уволенный менеджер до сих пор может зайти на почту через телефон, потому что кто-то забыл отключить не только AD-аккаунт, а ещё Exchange и VPN. Скрипт деактивации разом гасит всё: AD, почтовый ящик, VPN-профиль, RDP-доступ, плюс перемещает учётку в OU «Уволенные» и снимает с групп рассылки.
Мониторинг дисков, служб и сертификатов без ручного обхода
Классика — забитый диск C: на терминальном сервере. Обычно узнаёшь об этом, когда 1С начинает падать и звонит директор в панике. А ведь можно раз в день гонять скрипт, который проверяет свободное место на всех 30 машинах и присылает список тех, где меньше 10%. Пять строк кода, Get-PSDrive плюс отправка через Send-MailMessage или, у нас в компании, через Telegram-бота — привычнее, чем почта, и админ видит алерт мгновенно.
Ещё сертификаты. Просроченный сертификат КриптоПро или сертификат для RDP — это всегда неожиданность в самый неподходящий момент, обычно перед сдачей отчётности в налоговую. Скрипт, который раз в неделю проверяет срок действия и шлёт напоминание за месяц — экономит ту самую нервную пятницу, когда бухгалтер не может отправить декларацию, а сдача через два часа.
Службы тоже стоит проверять автоматически. У одного клиента-медцентра служба 1С-сервера иногда падала по ночам без видимой причины — Windows Server 2016, старое железо, бывает. Написали скрипт, который каждые 15 минут проверяет статус и, если служба остановлена, поднимает её сам плюс шлёт уведомление. Раньше узнавали об этом только утром от возмущённого администратора клиники.
Резервное копирование и Veeam — тут автоматизация вообще не обсуждается
Мне до сих пор странно видеть, когда бэкапы проверяют руками — заходят в консоль Veeam, смотрят статусы задач глазами. На 30 машинах с несколькими job'ами это реально занимает время, и главное — человек забывает, отвлекается, пропускает.
PowerShell-модуль Veeam спокойно даёт вытащить статус всех job за сутки одной командой Get-VBRJob, отфильтровать неудачные и прислать сводку в Telegram или на почту каждое утро в 8:00. У нас в ITfresh именно так и настроено для клиентов на обслуживании — если бэкап не прошёл ночью, я узнаю об этом раньше, чем клиент вообще проснулся.
Здесь принцип простой: бэкап, который никто не проверяет, с вероятностью процентов сорок в какой-то момент окажется битым или вообще не выполнялся неделями. Проверено на печальном опыте, не будем показывать пальцем, но было такое у одного клиента до нас — три месяца бэкапы «шли», а по факту падали с ошибкой доступа, и никто не заметил.
RDP-фермы и терминальные серверы — где скрипты особенно окупаются
На терминальных серверах с 20-30 одновременными сессиями руки особенно устают. Закрыть зависшую сессию, посмотреть, кто сколько ресурсов жрёт, выгнать пользователя, который забыл выйти и держит лицензию — это можно делать через qwinsta и logoff в скрипте, без захода в диспетчер серверов через GUI.
У одного клиента — компании по обслуживанию оргтехники — было по пятницам стабильное явление: к вечеру RDS-сервер начинал тормозить, потому что накапливались зависшие сессии от людей, которые просто закрыли окно, не разлогинившись. Раньше админ вручную шёл смотреть, кого выгнать. Написали скрипт, который раз в час ищет сессии старше 8 часов в статусе Disc и завершает их автоматически, с логом кто и когда. Пятничные тормоза прошли.
Ещё удобная вещь — скрипт, который утром перед началом рабочего дня проверяет доступность RDP-порта на всех терминальных серверах клиентов и шлёт отчёт. Мы в ITfresh именно так следим за десятком клиентских стендов сразу — не нужно вручную коннектиться к каждому, чтобы убедиться, что всё живо.
С чего начать, если руки пока не доходили до скриптов
Не пытайтесь автоматизировать всё сразу — это верный способ забросить затею на второй неделе. Возьмите три самые нудные задачи, которые повторяются регулярно: установку софта, отчёт о свободном месте на дисках, проверку бэкапов. Их и закройте скриптами первыми.
PowerShell не требует диплома программиста. Базовые командлеты Get-ADUser, Get-Service, Get-PSDrive, Invoke-Command — это неделя вечернего изучения по документации Microsoft, дальше уже дело практики. У нас в компании младшие админы осваивают это за первый месяц работы, параллельно с основными обязанностями.
И да, скрипты иногда ломаются при обновлении Windows или изменении окружения — это нормально, не повод отказываться. Раз в квартал прогнать и подправить — всё равно быстрее, чем каждый день вручную бегать по кабинетам с флешкой и блокнотом.
Частые вопросы
С каких скриптов лучше начать новичку в PowerShell?
С отчётов на чтение — они безопасны, ничего не сломают. Скрипт, который собирает свободное место на дисках или список установленного софта по всем машинам через Invoke-Command, — хорошая первая практика. Только после этого переходите к скриптам, которые что-то меняют: ставят софт, отключают учётки.
Нужен ли для этого домен Active Directory или можно и без него?
AD сильно упрощает жизнь, потому что список компьютеров и права уже структурированы, но без домена тоже можно — через WinRM и заранее заведённый список IP-адресов или имён машин в текстовом файле. У нас есть клиенты без домена, где мы гоняем скрипты именно так.
Насколько это опасно — вдруг скрипт что-то сломает сразу на всех 30 машинах?
Опасность реальная, если тестировать сразу на всех. Правило простое: сначала прогон на одной-двух тестовых машинах, потом на группе из 5, и только потом на всём парке. И обязательно логирование — куда и что скрипт сделал, чтобы можно было откатить.
Стоит ли нанимать отдельного человека под автоматизацию или обучать текущего админа?
На 30 машинах отдельный человек не окупится — это задача на несколько вечеров для действующего админа с базовым уровнем PowerShell. Если своего специалиста с таким навыком нет, дешевле разово заказать написание нужных скриптов на аутсорсе и потом сопровождать их своими силами.
Напишите нам в ITfresh — за неделю разберём вашу рутину и покажем, что из неё закрывается скриптами уже в этом месяце.
Бесплатная консультация →
Подпишитесь на рассылку ITfresh
Раз в неделю — практические гайды для руководителя и сисадмина: безопасность, 1С, миграции, резервные копии, лайфхаки из реальных проектов.
