Cherchez vos services Windows, voyez chaque changement avant son exécution et découvrez ce qui a dérivé depuis hier
Better Windows Services est services.msc reconstruit pour celles et ceux qui administrent des machines Windows - une fenêtre et une ligne de commande sur un seul moteur. Posez une question à la machine au lieu de faire défiler huit cents lignes. Voyez ce qu'un changement va faire avant de valider quoi que ce soit. Et ce que services.msc n'a jamais eu : figer chaque service dans un fichier, et demander une semaine plus tard ce qui a changé.
- Libre et gratuit, GPL-3.0
- Un seul fichier, ou un installeur
- Aucun droit d'administrateur pour consulter
- Ne contacte jamais Internet
bws qui demande exactement la même chose. Le programme parle anglais - la fenêtre lit un fichier de langue placé à côté d'elle, une traduction est donc possible sans recompilation.À quoi ça ressemble à l'usage
Une vraie session, sur un Windows installé en polonais - les noms affichés viennent de Windows, ils sont donc dans sa langue. La fenêtre elle-même parle anglais.
services.msc a à peine changé depuis Windows 2000
Les administrateurs y passent des heures chaque semaine à se heurter aux mêmes murs.
- Pas de recherche. Le seul moyen de naviguer est de sauter à la première lettre d'un nom affiché.
- Pas de filtrage. Impossible de demander montre-moi ce qui est réglé pour démarrer automatiquement et ne tourne pas.
- Une ligne à la fois. Redémarrer douze services, c'est douze clics droits et douze attentes.
- « Arrêt en cours... » pour toujours, sans autre issue que le Gestionnaire des tâches et une devinette sur le processus.
- Pas d'historique. Personne ne sait qui a réglé ce type de démarrage sur Désactivé, ni quand.
- Des données cachées. Le processus, les déclencheurs, les privilèges, le descripteur de sécurité, qui a signé l'exécutable - tout cela demande
sc.exede mémoire, ou le Registre. - Pas d'équivalent en ligne de commande.
sc.exea une syntaxe des années quatre-vingt-dix, et leGet-Servicefourni avec Windows, dans Windows PowerShell 5.1, n'affiche pas le compte sous lequel un service s'exécute, encore moins sa description. PowerShell 7 affiche les deux et s'installe séparément.
Les autres outils n'en règlent chacun qu'une partie
Process Hacker et System Informer affichent une liste riche et peuvent tuer un processus de force, mais n'ont ni audit ni ligne de commande. sc.exe et PsService peuvent tout faire et ne vous disent rien. Les cmdlets *-Service de PowerShell sont scriptables et superficielles.
Personne ne combine une liste où l'on peut chercher, un aperçu avant chaque changement et une trace de ce qui a changé au fil du temps - et cette trace est la raison de garder cet outil sur une machine après le premier après-midi.
La comparaison complèteUne fenêtre et une ligne de commande sur un seul moteur
Demander, au lieu de faire défiler
start:auto !status:running veut dire ce qui devrait tourner et ne tourne pas. Un seul langage, dans le champ de recherche et dans bws list --query, avec les champs proposés pendant la saisie.
Montrer le plan avant que quoi que ce soit n'arrive
Chaque arrêt, démarrage, redémarrage et changement de type de démarrage est prévisualisé avec les services qu'il entraîne dans sa chute, et l'aperçu est ce qui s'exécute.
Dire ce qui a dérivé, et qui l'a changé
bws snapshot create fige la machine dans un fichier, et bws snapshot diff dit ce qui a changé depuis, la configuration à part de ce qui a simplement démarré ou s'est arrêté. bws history dit, d'après le journal Système, qui a changé un type de démarrage et qui a installé un service. La fenêtre fait les trois sous Audit....
Réparer un problème courant en un clic
L'onglet Tools et bws tool fix redémarrent le service derrière une imprimante qui n'imprime pas, un son disparu ou une recherche bloquée, avec ce qui en dépend, par le même plan que tout le reste.
Arrêter un service qui ne s'arrête pas
Il demande poliment d'abord et ne termine le processus que si cela échoue, en nommant chaque autre service qui y vit.
Montrer ce que services.msc cache
Qui a signé l'exécutable et si Windows lui fait confiance, les déclencheurs, les privilèges, le descripteur de sécurité, le processus et sa mémoire. En colonnes, et comme critères de recherche.
Dire quand il n'a pas pu lire quelque chose
Un champ qu'il n'a pas pu lire est signalé comme non lu, jamais affiché comme vide. Un instantané pris sans droits d'administrateur le dit dans le fichier lui-même.
S'intégrer aux scripts
--json sur chaque commande, un code de sortie pour chaque fin, et 5 quand une comparaison trouve une dérive.
Tourner depuis un seul fichier, hors ligne
Décompressez et lancez, ou installez-le pour toute la machine. Aucun .NET à installer, et il ne contacte jamais Internet. Consulter ne demande aucun droit d'administrateur. GPL-3.0.
Ce qui a changé depuis hier
Un instantané est la machine entière à un moment donné - chaque service et chaque pilote, avec son type de démarrage, son compte, son chemin de lancement, le hachage et le signataire de son fichier, ses dépendances, ses déclencheurs, ses privilèges et son descripteur de sécurité. C'est du JSON avec un champ par ligne, il entre donc dans un dépôt et git diff le lit.
$ 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.
- La configuration et l'état d'exécution sont signalés séparément. Deux instantanés pris à un jour d'intervalle diffèrent par ce qui se trouve tourner, et presque rien de cela n'est une dérive - le type de démarrage qui a changé est la ligne à lire.
- Ce qui n'a pas pu être comparé est listé, pas caché. Un champ qu'un instantané n'a jamais lu ressort comme not compared, de sorte qu'une comparaison qui dit rien n'a changé signifie que rien n'a changé dans ce que les deux côtés pouvaient voir.
--exit-codese termine par5quand la configuration diffère, de sorte qu'une tâche planifiée peut prendre un instantané au déploiement et alerter quelqu'un la première nuit où la machine dérive.- Deux machines, deux fichiers. Prenez un instantané en préproduction et un en production, et comparez-les n'importe où.
L'aperçu est l'exécution
Toute opération qui écrit construit d'abord un plan, et ce même plan est l'aperçu, la cascade des services dépendants, le refus avant que vous validiez quoi que ce soit, la ligne de commande qui demande la même chose, et le chemin du retour ensuite.
$ 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.
- Lancez-le sans
--dry-runet ce sont ces étapes, dans cet ordre, avec les mêmes raisons à côté. Il n'y a pas de second chemin de code pour la vraie exécution. - Ce qui tombe avec lui est dans le plan. Les services qui cesseraient de fonctionner sont des étapes à part entière, et un plan qui arrêterait quelque chose dont la machine a besoin le dit dans ses avertissements.
- Un refus vient avant le bouton. Un pilote, un service pour lequel le gestionnaire n'accepte pas d'arrêt, un processus que le système protège - refusés à la construction du plan, avec la raison. La fenêtre grise le bouton et dit pourquoi à côté.
- L'arrêt forcé se fait en deux étapes, et la seconde est conditionnelle.
bws killdemande au service de s'arrêter et ne termine son processus que si cela ne marche pas, en nommant chaque autre service qui y vit.
Depuis la ligne de commande
Le même moteur que la fenêtre, pour les scripts, les tâches planifiées et la CI. Les données vont sur la sortie standard et tout le reste sur l'erreur standard, de sorte que bws list --json | jq fonctionne et qu'un avertissement n'atterrit jamais dans votre JSON.
bws list --query "start:auto !status:running" ce qui devrait tourner et ne tourne pas
bws list --query "file:missing" les services dont l'exécutable a disparu
bws list --query "signed:no peruser:no" non signés, sans les copies par session
bws show Spooler tout ce qu'on sait d'une entrée
bws stop Winmgmt --dry-run --dependents ce que son arrêt entraînerait
bws kill Spooler --dry-run ce que la fin de son processus emporterait
bws start-type Spooler manual --dry-run ce que ferait le retrait du démarrage automatique
bws snapshot create before.json figer la machine avant un changement
bws snapshot diff before.json --live --exit-code ce qui a changé depuis, 5 si la configuration a changé
bws history Spooler qui a changé son type de démarrage, et quand
bws tool fix printer --dry-run ce que ferait la réparation rapide d'une imprimante bloquée
Chaque commande, option et code de sortie
Décompresser et lancer, ou installer
Windows 10 1809 ou Windows Server 2019 et ultérieurs, 64 bits. Les archives n'ont pas besoin d'installeur et n'écrivent rien dans le Registre, et consulter ne demande aucun droit d'administrateur. Modifier quoi que ce soit demande une session avec élévation, et les deux moitiés le disent au lieu d'échouer en silence - la fenêtre propose Restart as admin.
| Fichier | Ce que c'est |
|---|---|
BetterWindowsServices-win-x64.zip | La fenêtre, un exécutable autonome - aucun .NET à installer |
bws-cli-win-x64.zip | La ligne de commande, un exécutable autonome, pour les scripts et la CI |
BetterWindowsServices-win-x64.msi | L'installeur : les deux programmes pour chaque compte de la machine, la fenêtre dans le menu Démarrer et bws dans le PATH |
Les exécutables portent une signature Authenticode, de sorte que Windows nomme l'éditeur au lieu d'avertir d'un éditeur inconnu.

