Массовый запуск скрипта отличается от одиночного одним свойством: ошибка тиражируется мгновенно и на все машины сразу. Поэтому вопрос не в том, как запустить на группе, а в том, каким процессом обставить запуск — пилот, волны, подтверждение, откат.
До запуска
- Прочитайте скрипт целиком, включая то, что скопировали из интернета. Отдельно найдите все операции удаления и перезаписи.
- Проверьте, что скрипт идемпотентен: повторный запуск не должен ломать уже настроенное. На массовой раскатке повторный запуск случается всегда — из-за таймаутов, потери связи, ручного перезапуска.
- Задайте $ErrorActionPreference так, чтобы ошибка останавливала выполнение, а не оставляла машину в половинчатом состоянии.
- Если в скрипте есть операции изменения, прогоните его с -WhatIf там, где командлеты это поддерживают, и прочитайте, что он собирается сделать.
- Выясните, от чьего имени скрипт выполняется. Скрипт, работающий от системной учётной записи, не видит пользовательский профиль и переменные окружения пользователя — типичная причина «на моей машине работает».
- Проверьте политику выполнения скриптов и подписи: то, что запускается на вашей машине, может быть заблокировано на пользовательских.
Разворачивайте волнами
Никогда не на весь парк сразу, даже если скрипт кажется безобидным.
- Первая волна — одна машина, повторяющая типовую конфигурацию. Проверьте результат руками, а не по коду возврата.
- Вторая — три-пять машин разных конфигураций. Здесь ловятся различия версий и прав.
- Дальше — группами с паузой, достаточной чтобы заметить проблему. Пауза важнее размера группы.
- Машины ответственных сотрудников и всё, что связано с деньгами и отгрузкой, — в последнюю волну.
- Не запускайте в пятницу вечером и перед отпуском. Это не суеверие: некому будет разбираться.
Часть действий в кабинете требует подтверждения перед выполнением — не отключайте это для массовых операций, даже когда одиночные уже разрешены. Состав раздела удалённых задач — на странице управления парком.
После выполнения
Проверяйте результат, а не факт запуска. Код возврата 0 означает, что скрипт завершился, а не что он сделал то, что задумано.
- Сверьте выборочно несколько машин руками: изменение действительно применилось.
- Разберите все машины, где скрипт не выполнился, — они не «отвалятся сами», а останутся в неопределённом состоянии.
- Зафиксируйте в журнале: что запускали, когда, на каких машинах, с каким результатом.
- Сохраните версию скрипта, которая была запущена. Через месяц «тот же скрипт» будет уже другим.
Как проектировать сам скрипт, чтобы он был пригоден к массовому запуску — коды возврата, логи, параметры вместо жёстко зашитых значений — разобрано в статье об удалённых задачах на Bash и Python.
Что делать, если скрипт отработал не на всех машинах?
Не запускать повторно на всём парке, а разобраться с теми, где он не прошёл. Машины, которые были выключены, догонят при следующем включении, а вот те, где скрипт упал с ошибкой, требуют отдельного разбора — повторный массовый запуск просто повторит ошибку.
Как проверить скрипт, если тестовой среды нет?
Сделать первую волну из одной своей машины и работать с ней как с настоящей: посмотреть результат, перезагрузить, проверить на следующий день. Это не заменяет тестовую среду, но ловит большую часть ошибок до того, как они разойдутся по парку.