Ищите среди служб Windows, просматривайте каждое изменение заранее и смотрите, что ушло в дрейф со вчерашнего дня
Better Windows Services - это services.msc, перестроенный для тех, кто администрирует машины с Windows: окно и командная строка на одном движке. Задавайте машине вопрос вместо того, чтобы прокручивать восемьсот строк. Смотрите, что сделает изменение, прежде чем что-либо нажмёте. И то, чего в services.msc никогда не было: заморозьте каждую службу в файл и через неделю спросите, что изменилось.
- Свободный и бесплатный, GPL-3.0
- Один файл или установщик
- Для просмотра не нужны права администратора
- Никогда не обращается к интернету
bws, которая просит ровно то же самое. Программа говорит по-английски: окно читает лежащий рядом файл языка, так что перевод возможен без пересборки.Как это выглядит в работе
Настоящий сеанс на Windows, установленной на польском: отображаемые имена приходят из Windows, поэтому они на её языке. Само окно говорит по-английски.
services.msc почти не менялся со времён Windows 2000
Администраторы проводят в нём часы каждую неделю и упираются в одни и те же стены.
- Нет поиска. Единственная навигация - прыжок на первую букву отображаемого имени.
- Нет фильтрации. Нельзя спросить покажи, что настроено на автозапуск и не работает.
- По одной строке за раз. Перезапуск двенадцати служб - это двенадцать щелчков правой кнопкой и двенадцать ожиданий.
- «Stopping...» навсегда, без другого выхода, кроме Диспетчера задач и угадывания процесса.
- Нет истории. Никто не знает, кто поставил этот тип запуска в Disabled и когда.
- Скрытые данные. Процесс, триггеры, привилегии, дескриптор безопасности, кто подписал исполняемый файл - для всего этого нужен
sc.exeпо памяти или реестр. - Нет равноценной командной строки. У
sc.exeсинтаксис из девяностых, аGet-Service, поставляемый с Windows, в Windows PowerShell 5.1 не показывает, от какой учётной записи работает служба, не говоря уже об описании. PowerShell 7 показывает и то и другое, и ставится отдельно.
Другие инструменты закрывают каждый свою часть
Process Hacker и System Informer показывают богатый список и умеют принудительно завершать процессы, но в них нет аудита и командной строки. sc.exe и PsService умеют всё и ничего вам не говорят. Командлеты *-Service в PowerShell пригодны для скриптов и поверхностны.
Никто не соединяет список с поиском, предпросмотр перед каждым изменением и запись того, что менялось со временем, - а эта запись и есть причина оставить этот инструмент на машине после первого же дня.
Полное сравнениеОкно и командная строка на одном движке
Спрашивайте, а не прокручивайте
start:auto !status:running - это что должно работать и не работает. Один язык, в поле поиска и в bws list --query, с подсказкой полей по мере ввода.
Показывайте план до того, как что-то произойдёт
Каждая остановка, запуск, перезапуск и смена типа запуска просматривается заранее вместе со службами, которые она тянет за собой, и предпросмотр - это то, что выполняется.
Говорите, что ушло в дрейф и кто это изменил
bws snapshot create замораживает машину в файл, а bws snapshot diff говорит, что изменилось с тех пор, отделяя конфигурацию от того, что просто запустилось или остановилось. bws history по журналу System говорит, кто изменил тип запуска и кто установил службу. Окно делает всё три в разделе Audit....
Чините частую проблему одним нажатием
Вкладка Tools и bws tool fix перезапускают службу, стоящую за не печатающим принтером, пропавшим звуком или зависшим поиском, вместе с тем, что от неё зависит, по тому же плану, что и всё остальное.
Останавливайте службу, которая не хочет останавливаться
Сначала просит вежливо и завершает процесс, только если это не удалось, называя каждую другую службу, которая в нём живёт.
Показывайте то, что скрывает services.msc
Кто подписал исполняемый файл и доверяет ли ему Windows, триггеры, привилегии, дескриптор безопасности, процесс и его память. В виде столбцов и в виде того, по чему можно искать.
Говорите, когда что-то не удалось прочитать
Поле, которое не удалось прочитать, сообщается как непрочитанное и никогда не показывается пустым. Снимок, сделанный без прав администратора, сообщает об этом внутри файла.
Вписывайтесь в скрипты
--json у каждой команды, код завершения для каждого исхода и 5, когда сравнение находит дрейф.
Работайте из одного файла, автономно
Распакуйте и запустите или установите на всю машину. Ставить .NET не нужно, и он никогда не обращается к интернету. Для чтения права администратора не нужны. GPL-3.0.
Что изменилось со вчерашнего дня
Снимок - это вся машина в один момент: каждая служба и драйвер с типом запуска, учётной записью, путём запуска, хешем и подписантом файла, зависимостями, триггерами, привилегиями и дескриптором безопасности. Это JSON с одним полем на строку, поэтому он помещается в репозиторий, и git diff его читает.
$ bws snapshot diff before.json --live --exit-code
Changed (2):
Spooler Print Spooler
startType: Manual -> Automatic
status: Stopped -> Running (running state, not configuration)
wlidsvc Microsoft Account Sign-in Assistant
status: Stopped -> Running (running state, not configuration)
Added 0, removed 0, changed 2. Fields differing: 1 in configuration, 2 in running state.
- Конфигурация и состояние выполнения сообщаются раздельно. Два снимка с разницей в день различаются тем, что случайно работает, и почти ничто из этого не дрейф - строка, которую стоит читать, это изменившийся тип запуска.
- То, что нельзя было сравнить, перечислено, а не скрыто. Поле, которое один снимок никогда не читал, выходит как not compared, поэтому сравнение, говорящее ничего не изменилось, означает, что ничего не изменилось в том, что видели обе стороны.
--exit-codeзавершается кодом5, когда конфигурация отличается, так что запланированная задача может сделать снимок при развёртывании и позвать кого-нибудь в первую же ночь, когда машина ушла в дрейф.- Две машины, два файла. Сделайте снимок на тестовой среде и один на рабочей и сравните их где угодно.
Предпросмотр - это и есть выполнение
Каждая операция, которая записывает, сначала строит план, и этот же план - предпросмотр, каскад зависимых служб, отказ до того, как вы что-либо нажмёте, командная строка, которая просит то же самое, и дорога назад потом.
$ bws stop Winmgmt --dry-run --dependents
Plan: stop Winmgmt (2 steps)
1. stop vmms (would break otherwise)
2. stop Winmgmt (asked for)
Warnings:
- Stopping Winmgmt also stops one other entry: vmms
- Winmgmt starts automatically, so it will be back after the next restart.
- Запустите без
--dry-run, и это те самые шаги, в том же порядке, с теми же причинами рядом. Второго пути в коде для настоящего выполнения нет. - То, что падает вместе с ним, есть в плане. Службы, которые сломались бы, - отдельные шаги, а план, который обрушил бы то, что нужно машине, говорит об этом в предупреждениях.
- Отказ приходит раньше кнопки. Драйвер, служба, остановку которой диспетчер не принимает, процесс, который система защищает - отказ при построении плана, с причиной. Окно делает кнопку серой и рядом говорит почему.
- Принудительная остановка - это два шага, и второй условный.
bws killпросит службу остановиться и завершает её процесс, только если это не сработало, называя каждую другую службу, которая в нём живёт.
Из командной строки
Тот же движок, что и в окне, для скриптов, запланированных задач и CI. Данные идут в стандартный вывод, а всё остальное в стандартный поток ошибок, поэтому bws list --json | jq работает, а предупреждение никогда не попадёт в ваш JSON.
bws list --query "start:auto !status:running" что должно работать и не работает
bws list --query "file:missing" службы, чей исполняемый файл пропал
bws list --query "signed:no peruser:no" неподписанные, без копий для каждого сеанса
bws show Spooler всё, что известно об одной записи
bws stop Winmgmt --dry-run --dependents что потянет за собой остановка
bws kill Spooler --dry-run что унесёт с собой завершение его процесса
bws start-type Spooler manual --dry-run что даст снятие его с автозапуска
bws snapshot create before.json заморозить машину перед изменением
bws snapshot diff before.json --live --exit-code что изменилось с тех пор, 5, если изменилась конфигурация
bws history Spooler кто изменил его тип запуска и когда
bws tool fix printer --dry-run что сделало бы быстрое исправление зависшего принтера
Каждая команда, параметр и код завершения
Распакуйте и запустите или установите
Windows 10 1809 или Windows Server 2019 и новее, 64-разрядная. Архивам не нужен установщик, и они ничего не пишут в реестр, а для просмотра не нужны права администратора. Для любого изменения нужен сеанс с повышенными правами, и обе половины говорят об этом, а не молча отказывают - окно предлагает Restart as admin.
| Файл | Что это |
|---|---|
BetterWindowsServices-win-x64.zip | Окно, один автономный исполняемый файл - ставить .NET не нужно |
bws-cli-win-x64.zip | Командная строка, один автономный исполняемый файл, для скриптов и CI |
BetterWindowsServices-win-x64.msi | Установщик: обе программы для каждой учётной записи на машине, окно в меню «Пуск» и bws в PATH |
Исполняемые файлы несут подпись Authenticode, поэтому Windows называет издателя, а не предупреждает о неизвестном.

