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 albo instalator
  • Do czytania bez praw administratora
  • Nigdy nie łączy się z siecią
Okno z pięcioma zaznaczonymi wpisami i planem ich uruchomienia nad listą: pięć kroków, uwaga, że dwa z nich już są w tym stanie, linia bws start dla każdego wpisu i przycisk Start 5 entries.
Zaznaczone wpisy, 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.
Pół minuty z programem

Jak to wygląda w użyciu

Prawdziwa sesja na Windowsie zainstalowanym po polsku - nazwy wyświetlane daje Windows, więc są w jego języku. Samo okno mówi po angielsku.

Cztery zaznaczone wpisy i plan ich uruchomienia, wymuszony restart Menedżera sesji lokalnej, którego plan ostrzega, że maszyna bez niego nie działa, i prosi o wpisanie nazwy, zanim przycisk zadziała, pytania na start pod pustym polem wyszukiwania oraz bufor wydruku znaleziony przez wpisanie części nazwy i uruchomiony.
Cztery zaznaczone wpisy i plan ich uruchomienia, wymuszony restart, który prosi o nazwę usługi potrzebnej maszynie, pytania pod pustym polem wyszukiwania oraz bufor wydruku znaleziony przez wpisanie nazwy i uruchomiony.
Ekran startowy: trzy karty z liczbami o tej maszynie - usługi działające, usługi ustawione na start automatyczny, które nie wstały, oraz usługi ustawione na start automatyczny, których pliku nie ma - i przycisk Show the list.
Okno otwiera się na kilku liczbach o tej maszynie. Każda jest pytaniem - kliknij ją, a pytanie trafi do pola wyszukiwania.
Lista usług z trzema listami nad polem wyszukiwania, pustym polem wyszukiwania, rozwiniętymi przyciskami filtrów w rzędach dla stanu, typu uruchomienia, podpisu, niezgodności i wyzwalaczy oraz listą poniżej.
Przyciski filtrów piszą do pola wyszukiwania, więc to, co kliknąłeś, jest zapytaniem, które da się przeczytać i poprawić.
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 dostarczany z Windowsem, w Windows PowerShell 5.1, nie pokazuje konta, na którym działa usługa, nie mówiąc o opisie. PowerShell 7 pokazuje jedno i drugie, ale instaluje się go osobno.

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 i kto to zmienił

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. bws history mówi z dziennika System, kto zmienił typ uruchomienia i kto zainstalował usługę. Okno robi wszystkie trzy rzeczy pod Audit....

Naprawi typowy problem jednym kliknięciem

Zakładka Tools i bws tool fix restartują usługę stojącą za drukarką, która nie drukuje, dźwiękiem, który zniknął, albo wyszukiwaniem, które stanęło - razem z tym, co od niej zależy, przez ten sam plan co wszystko inne.

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

Rozpakuj i uruchom albo zainstaluj na całą maszynę. 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 różni się konfiguracja - 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 konfiguracja
bws history Spooler                               kto i kiedy zmienił typ uruchomienia
bws tool fix printer --dry-run                    co zrobiłaby szybka naprawa zablokowanej drukarki
Każda komenda, przełącznik i kod wyjścia
Pobierz

Rozpakuj i uruchom albo zainstaluj

Windows 10 1809 albo Windows Server 2019 i nowsze, 64 bity. Archiwa nie potrzebują instalatora i nie piszą do rejestru, a do samego patrzenia nie trzeba praw administratora. 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
BetterWindowsServices-win-x64.msiInstalator: oba programy dla wszystkich kont na maszynie, okno w menu Start i bws na ścieżce PATH

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