Przeszukuj usługi Windows, oglądaj plan każdej zmiany i zobacz, co się rozjechało od wczoraj

Better Windows Services to services.msc zbudowany od nowa dla ludzi, którzy administrują maszynami z Windowsem - okno i wiersz poleceń nad jednym silnikiem. Zadaj maszynie pytanie, zamiast przewijać osiemset wierszy. Zobacz, co zrobi zmiana, zanim cokolwiek naciśniesz. I to, czego services.msc nie miał nigdy: zamroź wszystkie usługi w pliku, a tydzień później zapytaj, co się zmieniło.

  • Darmowe i otwarte, GPL-3.0
  • Jeden plik, bez instalatora
  • Do czytania bez praw administratora
  • Nigdy nie łączy się z siecią
Zapytanie w polu wyszukiwania, plan pokazany zanim cokolwiek się stanie, i linia bws, która prosi dokładnie o to samo. Program mówi po angielsku - okno czyta plik językowy położony obok, więc tłumaczenie jest możliwe bez przebudowy.
Po co to powstało

services.msc prawie nie zmienił się od Windows 2000

Administratorzy spędzają w nim godziny tygodniowo, uderzając w te same ściany.

  • Brak wyszukiwania. Jedyna nawigacja to skok do pierwszej litery nazwy wyświetlanej.
  • Brak filtrowania. Nie da się zapytać pokaż to, co ma startować automatycznie i nie działa.
  • Jeden wiersz naraz. Restart dwunastu usług to dwanaście kliknięć prawym i dwanaście czekań.
  • „Zatrzymywanie..." bez końca, bez wyjścia innego niż Menedżer zadań i zgadywanie procesu.
  • Brak historii. Nikt nie wie, kto ustawił ten typ uruchomienia na Wyłączony ani kiedy.
  • Ukryte dane. Proces, wyzwalacze, przywileje, deskryptor bezpieczeństwa, podpis pliku - po wszystko trzeba iść do sc.exe z pamięci albo do rejestru.
  • Brak równorzędnego wiersza poleceń. sc.exe ma składnię z lat dziewięćdziesiątych, a Get-Service nie pokazuje konta, na którym działa usługa, nie mówiąc o opisie.

Inne narzędzia naprawiają po kawałku

Process Hacker i System Informer pokazują bogatą listę i potrafią ubić proces, i nie mają audytu ani wiersza poleceń. sc.exe i PsService potrafią wszystko i nie mówią nic. Polecenia *-Service w PowerShellu są skryptowalne i płytkie.

Nikt nie łączy przeszukiwalnej listy, podglądu przed każdą zmianą i zapisu tego, co zmieniło się w czasie - a to ten zapis jest powodem, żeby zostawić ten program na maszynie po pierwszym popołudniu.

Pełne porównanie
Co robi

Okno i wiersz poleceń nad jednym silnikiem

Pytaj, zamiast przewijać

start:auto !status:running to co powinno chodzić i nie chodzi. Jeden język, w polu wyszukiwania i w bws list --query, z polami podpowiadanymi w trakcie pisania.

Plan, zanim cokolwiek się stanie

Każde zatrzymanie, uruchomienie, restart i zmiana typu uruchomienia ma podgląd razem z usługami, które pociągnie za sobą - a podgląd jest tym, co się wykona.

Powie, co się rozjechało

bws snapshot create zamraża maszynę w pliku, a bws snapshot diff mówi, co się od tego czasu zmieniło - konfiguracja osobno od tego, co się po prostu uruchomiło albo zatrzymało.

Zatrzyma usługę, która nie chce się zatrzymać

Najpierw prosi uprzejmie, a proces kończy dopiero wtedy, gdy to nie zadziała - wymieniając po nazwie każdą inną usługę, która w nim mieszka.

Pokaże to, co services.msc ukrywa

Kto podpisał plik i czy Windows temu ufa, wyzwalacze, przywileje, deskryptor bezpieczeństwa, proces i jego pamięć. Jako kolumny i jako rzeczy, po których można szukać.

Powie, czego nie zdołał odczytać

Pole, którego nie dało się odczytać, jest zgłoszone jako nieodczytane, nigdy jako puste. Snapshot zrobiony bez praw administratora mówi to w środku pliku.

Wejdzie do skryptu

--json przy każdej komendzie, kod wyjścia dla każdego zakończenia i 5, gdy porównanie znajdzie różnice.

Jeden plik, bez sieci

Bez instalatora, bez instalowania .NET-a i bez łączenia się z internetem. Do czytania nie trzeba praw administratora. GPL-3.0.

Czego services.msc nie robił nigdy

Co zmieniło się od wczoraj

Snapshot to cała maszyna w jednej chwili - każda usługa i sterownik, z typem uruchomienia, kontem, ścieżką uruchomienia, skrótem i podpisem pliku, zależnościami, wyzwalaczami, przywilejami i deskryptorem bezpieczeństwa. To JSON z jednym polem na linię, więc wchodzi do repozytorium i czyta go 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.
  • Konfiguracja i stan są zgłaszane osobno. Dwa snapshoty z odstępem doby różnią się tym, co akurat działa, i prawie nic z tego nie jest dryfem - linią do przeczytania jest zmieniony typ uruchomienia.
  • To, czego nie dało się porównać, jest wypisane, a nie ukryte. Pole, którego jeden ze snapshotów nigdy nie odczytał, wychodzi jako nieporównane - więc różnica mówiąca nic się nie zmieniło znaczy, że nic się nie zmieniło w tym, co obie strony widziały.
  • --exit-code kończy kodem 5, gdy cokolwiek się różni - więc zadanie harmonogramu może zrobić snapshot przy wdrożeniu i wezwać kogoś pierwszej nocy, w której maszyna się rozjedzie.
  • Dwie maszyny, dwa pliki. Zrób snapshot na testowej i na produkcyjnej, a potem porównaj je gdziekolwiek.
Jak działają snapshoty i dryf
Nic nie dzieje się bez planu

Podgląd JEST wykonaniem

Każda operacja zapisu buduje najpierw plan, a ten sam plan jest podglądem, kaskadą usług zależnych, odmową zanim cokolwiek naciśniesz, linią wiersza poleceń proszącą o to samo i drogą powrotną.

$ 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.
  • Uruchom bez --dry-run i to są te kroki, w tej kolejności, z tymi samymi powodami obok. Nie ma drugiej ścieżki kodu dla wersji prawdziwej.
  • To, co spadnie razem z usługą, jest w planie. Usługi, które przestaną działać, są osobnymi krokami, a plan zdejmujący coś, bez czego maszyna nie działa, mówi to w ostrzeżeniach.
  • Odmowa przychodzi przed przyciskiem. Sterownik, usługa, dla której menedżer nie przyjmie zatrzymania, proces chroniony przez system - odmówione przy budowaniu planu, z podanym powodem. Okno wygasza przycisk i pisze dlaczego obok.
  • Wymuszone zatrzymanie to dwa kroki, a drugi jest warunkowy. bws kill prosi usługę o zatrzymanie, a proces kończy tylko wtedy, gdy to nie zadziała - wymieniając każdą inną usługę żyjącą w tym procesie.
Gdy usługa nie chce się zatrzymać
Dwie minuty z programem

Z wiersza poleceń

Ten sam silnik co okno, do skryptów, zadań harmonogramu i CI. Dane idą na wyjście standardowe, a cała reszta na wyjście błędów - więc bws list --json | jq działa, a ostrzeżenie nigdy nie ląduje w Twoim JSON-ie.

bws list --query "start:auto !status:running"     co powinno chodzić i nie chodzi
bws list --query "file:missing"                   usługi, których plik zniknął
bws list --query "signed:no peruser:no"           niepodpisane, bez kopii per sesja
bws show Spooler                                  wszystko, co wiadomo o jednym wpisie
bws stop Winmgmt --dry-run --dependents           co zdjęłoby zatrzymanie
bws kill Spooler --dry-run                        co zabrałoby zakończenie procesu
bws start-type Spooler manual --dry-run           co da zdjęcie z automatu
bws snapshot create before.json                   zamroź maszynę przed zmianą
bws snapshot diff before.json --live --exit-code  co się zmieniło, 5 jeśli cokolwiek
Każda komenda, przełącznik i kod wyjścia
Uczciwe ograniczenia

Czego jeszcze nie ma

Narzędzie, które po cichu czegoś nie obsługuje, jest gorsze od takiego, które mówi, czego nie potrafi. To wczesne wydanie - obie połowy robią wszystko, co jest na tej stronie, a zestaw testów biegnie przy każdym commicie. Druga połowa historii o audycie dopiero powstaje.

Snapshoty tylko w wierszu poleceń

Okno pokazuje, szuka i zmienia, a snapshotów nie robi ani nie porównuje. Do tego jest bws snapshot obok.

Brak wzorca czystego Windowsa

Ekran startowy ma miejsce na ile z nich nie pochodzi z czystej instalacji i mówi, że tego jeszcze nie liczy, zamiast pokazywać liczbę, za którą nie może ręczyć.

Brak dziennika zmian i przywracania

Kto zmienił typ uruchomienia i kiedy - tego jeszcze nie czytamy z dziennika zdarzeń. Różnica mówi, co się rozjechało, a przywrócenie robi się ręcznie albo skryptem z komend, które ta różnica pokazuje.

Tylko maszyna lokalna

Zarządzania zdalnego w tej wersji nie ma. Żeby porównać dwie maszyny, zrób snapshot na każdej i porównaj pliki. Tylko Windows, tylko 64 bity.

Reszta ograniczeń i pytania, które ludzie zadają
Pobierz

Rozpakuj gdziekolwiek i uruchom

Windows 10 1809 albo Windows Server 2019 i nowsze, 64 bity. Bez instalatora, bez pisania do rejestru i bez praw administratora do samego patrzenia. Zmiana czegokolwiek wymaga sesji z podniesionymi uprawnieniami, i obie połowy mówią to wprost, zamiast po cichu zawieść - okno proponuje Restart as admin.

PlikCo to jest
BetterWindowsServices-win-x64.zipOkno, jeden samodzielny plik wykonywalny - bez instalowania .NET-a
bws-cli-win-x64.zipWiersz poleceń, jeden samodzielny plik wykonywalny, do skryptów i CI

Pliki wykonywalne noszą podpis Authenticode, więc Windows podaje wydawcę zamiast ostrzegać przed nieznanym.