Leitfaden

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

FrageMit dem, was auf dem Rechner istHier
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.exe kann 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 create und sc delete. Hier nicht, mit Absicht.
  • Sie stecken schon tief in einer PowerShell-Pipeline. bws list --json kommt über ConvertFrom-Json als 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.