Windows-Dienste durchsuchen, jede Änderung vorab ansehen und sehen, was seit gestern abgedriftet ist
Better Windows Services ist services.msc, neu gebaut für alle, die Windows-Rechner administrieren - ein Fenster und eine Befehlszeile über einer gemeinsamen Engine. Stellen Sie dem Rechner eine Frage, statt achthundert Zeilen zu durchblättern. Sehen Sie, was eine Änderung bewirkt, bevor Sie irgendetwas bestätigen. Und das, was services.msc nie hatte: jeden Dienst in eine Datei einfrieren und eine Woche später fragen, was sich geändert hat.
- Kostenlos und quelloffen, GPL-3.0
- Eine Datei oder ein Installer
- Zum Ansehen keine Administratorrechte
- Kein Kontakt zum Internet
bws-Zeile, die genau dasselbe verlangt. Das Programm spricht Englisch - das Fenster liest eine Sprachdatei, die daneben liegt, sodass eine Übersetzung ohne Neubau möglich ist.So sieht es im Einsatz aus
Eine echte Sitzung auf einem auf Polnisch installierten Windows - die Anzeigenamen kommen von Windows, deshalb stehen sie in dessen Sprache. Das Fenster selbst spricht Englisch.
services.msc hat sich seit Windows 2000 kaum verändert
Administratoren verbringen damit pro Woche Stunden und stoßen immer wieder an dieselben Wände.
- Keine Suche. Navigiert wird nur durch den Sprung zum ersten Buchstaben eines Anzeigenamens.
- Kein Filtern. Es gibt keine Möglichkeit zu fragen: Zeige mir, was automatisch starten soll und nicht läuft.
- Eine Zeile nach der anderen. Zwölf Dienste neu zu starten heißt zwölf Rechtsklicks und zwölf Wartezeiten.
- "Wird beendet..." für immer, und der einzige Ausweg ist der Task-Manager samt Raten, welcher Prozess es ist.
- Kein Verlauf. Niemand weiß, wer diesen Starttyp auf Deaktiviert gesetzt hat und wann.
- Verborgene Daten. Prozess, Trigger, Privilegien, Sicherheitsdeskriptor, wer die Programmdatei signiert hat - für alles braucht man
sc.exeaus dem Kopf oder die Registrierung. - Keine Gleichwertigkeit auf der Befehlszeile.
sc.exehat eine Syntax aus den Neunzigern, und dasGet-Service, das mit Windows in Windows PowerShell 5.1 kommt, zeigt weder das Konto, unter dem ein Dienst läuft, noch gar seine Beschreibung. PowerShell 7 zeigt beides und wird separat installiert.
Die anderen Werkzeuge lösen jeweils nur einen Teil
Process Hacker und System Informer zeigen eine reichhaltige Liste und können einen Prozess hart beenden, haben aber weder Audit noch Befehlszeile. sc.exe und PsService können alles und sagen nichts. Die *-Service-Cmdlets von PowerShell sind skriptfähig und oberflächlich.
Niemand verbindet eine durchsuchbare Liste, eine Vorschau vor jeder Änderung und ein Protokoll dessen, was sich im Lauf der Zeit geändert hat - und das Protokoll ist der Grund, dieses Werkzeug nach dem ersten Nachmittag auf einem Rechner zu behalten.
Der vollständige VergleichEin Fenster und eine Befehlszeile über einer gemeinsamen Engine
Fragen, statt scrollen
start:auto !status:running heißt was laufen sollte und nicht läuft. Eine Sprache, im Suchfeld und in bws list --query, mit den Feldern als Vorschlag während der Eingabe.
Den Plan zeigen, bevor etwas passiert
Jedes Beenden, Starten, Neustarten und jede Änderung des Starttyps wird samt den Diensten, die dabei mit heruntergehen, vorab angezeigt, und die Vorschau ist das, was ausgeführt wird.
Sagen, was abgedriftet ist und wer es geändert hat
bws snapshot create friert den Rechner in eine Datei ein, und bws snapshot diff sagt, was sich seither geändert hat, die Konfiguration getrennt von dem, was nur gestartet oder beendet wurde. bws history sagt anhand des Systemprotokolls, wer einen Starttyp geändert und wer einen Dienst installiert hat. Das Fenster erledigt alle drei unter Audit....
Ein häufiges Problem mit einem Klick beheben
Der Reiter Tools und bws tool fix starten den Dienst hinter einem Drucker, der nicht druckt, einem verschwundenen Ton oder einer hängenden Suche samt allem, was davon abhängt, über denselben Plan wie alles andere neu.
Einen Dienst beenden, der sich nicht beenden lässt
Es fragt zuerst höflich und beendet den Prozess nur, wenn das fehlschlägt, und nennt dabei jeden anderen Dienst, der in ihm lebt.
Zeigen, was services.msc verbirgt
Wer die Programmdatei signiert hat und ob Windows ihr vertraut, Trigger, Privilegien, den Sicherheitsdeskriptor, den Prozess und seinen Speicher. Als Spalten und als Kriterien für die Suche.
Sagen, wenn es etwas nicht lesen konnte
Ein Feld, das es nicht lesen konnte, wird als nicht gelesen gemeldet und nie als leer angezeigt. Ein Snapshot ohne Administratorrechte sagt das in der Datei selbst.
In Skripte passen
--json bei jedem Befehl, ein Exit-Code für jedes Ende und 5, wenn ein Vergleich Drift findet.
Aus einer Datei laufen, offline
Entpacken und starten oder für den ganzen Rechner installieren. Kein .NET zu installieren, und es nimmt nie Kontakt zum Internet auf. Zum Lesen sind keine Administratorrechte nötig. GPL-3.0.
Was sich seit gestern geändert hat
Ein Snapshot ist der ganze Rechner in einem Augenblick - jeder Dienst und jeder Treiber mit Starttyp, Konto, Startpfad, Hash und Signierer seiner Datei, Abhängigkeiten, Triggern, Privilegien und Sicherheitsdeskriptor. Er ist JSON mit einem Feld pro Zeile, sodass er in ein Repository passt und git diff ihn lesen kann.
$ 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.
- Konfiguration und Laufzustand werden getrennt gemeldet. Zwei Snapshots im Abstand eines Tages unterscheiden sich darin, was gerade läuft, und fast nichts davon ist Drift - die Zeile mit dem geänderten Starttyp ist die, die man lesen muss.
- Was sich nicht vergleichen ließ, wird aufgelistet und nicht versteckt. Ein Feld, das ein Snapshot nie gelesen hat, erscheint als not compared, sodass ein Vergleich, der nichts hat sich geändert sagt, bedeutet: nichts hat sich in dem geändert, was beide Seiten sehen konnten.
--exit-codeendet mit5, wenn sich die Konfiguration unterscheidet, sodass eine geplante Aufgabe bei der Bereitstellung einen Snapshot machen und in der ersten Nacht, in der der Rechner abdriftet, jemanden alarmieren kann.- Zwei Rechner, zwei Dateien. Machen Sie einen Snapshot auf dem Staging- und einen auf dem Produktivsystem und vergleichen Sie sie irgendwo.
Die Vorschau ist die Ausführung
Jede schreibende Operation baut zuerst einen Plan, und derselbe Plan ist die Vorschau, die Kaskade der abhängigen Dienste, die Ablehnung, bevor Sie etwas bestätigen, die Befehlszeile, die dasselbe verlangt, und der Weg zurück danach.
$ 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.
- Führen Sie es ohne
--dry-runaus, und das sind die Schritte, in dieser Reihenfolge, mit denselben Gründen daneben. Es gibt keinen zweiten Codepfad für den Ernstfall. - Was mit heruntergeht, steht im Plan. Die Dienste, die ausfallen würden, sind eigene Schritte, und ein Plan, der etwas stilllegen würde, das der Rechner braucht, sagt das in seinen Warnungen.
- Eine Ablehnung kommt vor der Schaltfläche. Ein Treiber, ein Dienst, für den der Manager kein Beenden annimmt, ein Prozess, den das System schützt - abgelehnt, wenn der Plan gebaut wird, mit Begründung. Das Fenster graut die Schaltfläche aus und nennt daneben den Grund.
- Erzwungenes Beenden hat zwei Schritte, und der zweite ist bedingt.
bws killbittet den Dienst, sich zu beenden, und beendet seinen Prozess nur, wenn das nicht klappt, und nennt dabei jeden anderen Dienst, der in ihm lebt.
Von der Befehlszeile
Dieselbe Engine wie das Fenster, für Skripte, geplante Aufgaben und CI. Daten gehen auf die Standardausgabe und alles andere auf die Standardfehlerausgabe, sodass bws list --json | jq funktioniert und eine Warnung nie in Ihrem JSON landet.
bws list --query "start:auto !status:running" was laufen sollte und nicht läuft
bws list --query "file:missing" Dienste, deren Programmdatei fehlt
bws list --query "signed:no peruser:no" unsigniert, ohne die Kopien pro Sitzung
bws show Spooler alles, was über einen Eintrag bekannt ist
bws stop Winmgmt --dry-run --dependents was das Beenden mit herunterreißen würde
bws kill Spooler --dry-run was das Beenden seines Prozesses mitnehmen würde
bws start-type Spooler manual --dry-run was es bewirken würde, ihn von automatisch zu nehmen
bws snapshot create before.json den Rechner vor einer Änderung einfrieren
bws snapshot diff before.json --live --exit-code was sich seither geändert hat, 5 bei geänderter Konfiguration
bws history Spooler wer seinen Starttyp geändert hat und wann
bws tool fix printer --dry-run was die Schnellreparatur für einen hängenden Drucker täte
Jeder Befehl, jeder Schalter, jeder Exit-Code
Entpacken und starten oder installieren
Windows 10 1809 oder Windows Server 2019 und neuer, 64 Bit. Die Archive brauchen keinen Installer und schreiben nichts in die Registrierung, und zum Ansehen sind keine Administratorrechte nötig. Zum Ändern braucht es eine Sitzung mit erhöhten Rechten, und beide Hälften sagen das, statt still zu scheitern - das Fenster bietet Restart as admin an.
| Datei | Was es ist |
|---|---|
BetterWindowsServices-win-x64.zip | Das Fenster, eine eigenständige ausführbare Datei - kein .NET zu installieren |
bws-cli-win-x64.zip | Die Befehlszeile, eine eigenständige ausführbare Datei, für Skripte und CI |
BetterWindowsServices-win-x64.msi | Der Installer: beide Programme für jedes Konto auf dem Rechner, das Fenster im Startmenü und bws im PATH |
Die ausführbaren Dateien tragen eine Authenticode-Signatur, sodass Windows den Herausgeber nennt, statt vor einem unbekannten zu warnen.

