sc.exe, Get-Service und dieses Werkzeug
Beide sind schon auf dem Rechner, und beide bleiben nützlich. Diese Seite handelt davon, wo sie aufhören - und sie sagt klar, wo sie noch die bessere Antwort sind.
Wo jedes aufhört
sc.exe
Es erreicht fast alles, was der Dienststeuerungs-Manager weiß, und sagt Ihnen nichts darüber, wie man fragt. Die Syntax stammt aus den Neunzigern - sc config X start= auto, wobei das Leerzeichen nach dem Gleichheitszeichen Pflicht ist und sein Fehlen ein stilles Scheitern bedeutet, das zu tun, was Sie meinten.
Es antwortet jeweils zu einem Eintrag. Es gibt kein Filtern, keine Ausgabe, die ein Skript ohne einen eigenen Parser lesen kann, und keine Vorschau: sc stop klappt entweder oder gibt eine Zahl zurück.
Get-Service und die *-Service-Cmdlets
Richtige Objekte, eine Pipeline und eine oberflächliche Sicht. In Windows PowerShell 5.1, der, die mit Windows kommt, zeigt Get-Service weder das Konto, unter dem ein Dienst läuft, noch seine Beschreibung. PowerShell 7 zeigt beides und auch den Startpfad und wird separat installiert.
Stop-Service -Force bedeutet "auch wenn etwas davon abhängt" - es beendet die abhängigen Dienste und sagt es Ihnen hinterher und nicht vorher.
Dieselben Fragen, auf drei Arten
| Frage | Mit dem, was auf dem Rechner ist | Hier |
|---|---|---|
| Was laufen sollte und nicht läuft | Get-Service | Where-Object { $_.StartType -eq 'Automatic' -and $_.Status -ne 'Running' } |
bws list --query "start:auto !status:running" |
| Welche Dienste eine unsignierte Programmdatei haben | Jeden Startpfad lesen, auflösen, Get-AuthenticodeSignature für jeden aufrufen - ein Skript, kein Befehl |
bws list --query "signed:no" |
| Was das Beenden hiervon mit herunterreißen würde | sc enumdepend X, dann die Liste lesen und selbst entscheiden |
bws stop X --dry-run --dependents, das ist der Plan, der laufen würde |
| Was sich seit letzter Woche geändert hat | Nichts, außer Sie haben den Sammler selbst geschrieben | bws snapshot diff before.json --live |
| Wer den Starttyp wann geändert hat | Get-WinEvent -FilterHashtable @{ LogName = 'System'; Id = 7040 }, dann die Meldung jedes Ereignisses lesen |
bws history Spooler, dessen erste Zeile sagt, wie weit das Protokoll zurückreicht |
| Maschinenlesbare Ausgabe | Objekte von PowerShell, Text von sc.exe |
--json bei jedem Befehl, auf der Standardausgabe, mit Warnungen auf der Standardfehlerausgabe |
Wo dieses Werkzeug bei einem Dienst von sc.exe abweicht, ist das hier ein Fehler. Ein Teil der Testsuite führt beide gegen den Rechner aus, auf dem er läuft, und vergleicht sie Eintrag für Eintrag, und ein Unterschied zwischen beiden ist das Nützlichste, was Sie in ein Issue schreiben können.
Wann Sie bei dem bleiben, was Sie haben
- Sie sind auf einem Rechner, den Sie nur einmal anfassen. Beide sind schon da, und nichts muss an einer Richtlinie vorbei.
- Sie müssen das Konto, den Startpfad oder die Wiederherstellungsaktionen ändern.
sc.exekann alle drei. Dieses Werkzeug zeigt das Konto und den Startpfad und ändert keines von beiden und liest Wiederherstellungsaktionen nur, um zu warnen, bevor es einen Prozess beendet. - Sie müssen einen Dienst anlegen oder löschen.
sc createundsc delete. Hier nicht, mit Absicht. - Sie stecken schon tief in einer PowerShell-Pipeline.
bws list --jsonkommt überConvertFrom-Jsonals Objekte zurück, sodass es sich in die Pipeline einfügt, statt sie zu ersetzen.
Zusammen statt anstelle
Das Werkzeug, das was stimmt mit diesem Rechner nicht beantwortet, und die Werkzeuge, die eine Einstellung ändern, sind nicht dasselbe Werkzeug. Stellen Sie die Frage hier, lesen Sie den Plan hier und nehmen Sie zum Ausführen, was Sie mögen - der Plan gibt die Befehlszeile aus, die dasselbe verlangt, und diese Zeile ist zum Kopieren gedacht.