Шукайте серед служб 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 називає видавця, а не попереджає про невідомого.

