Gids

sc.exe, Get-Service en dit

Beide staan al op de machine, en beide blijven nuttig. Deze pagina gaat over waar ze ophouden - en zegt eerlijk waar ze nog het betere antwoord zijn.

Waar elk ophoudt

sc.exe

Het kan bijna alles bereiken wat de servicebeheerder weet, en het vertelt u niets over hoe u moet vragen. De syntaxis komt uit de jaren negentig - sc config X start= auto, waar de spatie na het gelijkteken verplicht is en het ontbreken ervan een stille mislukking is om te doen wat u bedoelde.

Het antwoordt over één item tegelijk. Er is geen filter, geen uitvoer die een script kan parsen zonder een parser te schrijven, en geen voorvertoning: sc stop werkt of geeft een getal terug.

Get-Service en de *-Service-cmdlets

Echte objecten, een pijplijn, en een oppervlakkig beeld. In Windows PowerShell 5.1, die met Windows meekomt, toont Get-Service niet onder welk account een service draait en ook de beschrijving niet. PowerShell 7 toont beide, en het opstartpad ook, en wordt apart geïnstalleerd.

Stop-Service -Force betekent "ook als er iets van afhangt" - het stopt de afhankelijke services, en het zegt u dat achteraf in plaats van vooraf.

Dezelfde vragen, op drie manieren

VraagMet wat op de machine staatHier
Wat zou moeten draaien en niet draait Get-Service | Where-Object { $_.StartType -eq 'Automatic' -and $_.Status -ne 'Running' } bws list --query "start:auto !status:running"
Welke services een niet-ondertekend uitvoerbaar bestand hebben Elk opstartpad lezen, omzetten, op elk Get-AuthenticodeSignature aanroepen - een script, geen opdracht bws list --query "signed:no"
Wat het stoppen hiervan zou meenemen sc enumdepend X, dan de lijst lezen en zelf beslissen bws stop X --dry-run --dependents, dat is het plan dat zou draaien
Wat er sinds vorige week is veranderd Niets, tenzij u zelf de verzamelaar hebt geschreven bws snapshot diff before.json --live
Wie het opstarttype heeft gewijzigd, en wanneer Get-WinEvent -FilterHashtable @{ LogName = 'System'; Id = 7040 }, dan het bericht van elke gebeurtenis lezen bws history Spooler, waarvan de eerste regel zegt hoe ver het logboek teruggaat
Machineleesbare uitvoer Objecten van PowerShell, tekst van sc.exe --json bij elke opdracht, op de standaarduitvoer, met waarschuwingen op de standaardfout

Waar dit hulpmiddel het oneens is met sc.exe over een service, is dat hier een bug. Een deel van de testsuite draait beide op de machine waarop het staat en vergelijkt ze item voor item, en een verschil tussen de twee is het nuttigste wat u in een issue kunt zetten.

Wanneer u moet blijven gebruiken wat u hebt

  • U zit op een machine die u één keer aanraakt. Beide staan er al en niets hoeft langs een beleid.
  • U moet het account, het opstartpad of herstelacties wijzigen. sc.exe doet alle drie. Dit hulpmiddel toont het account en het opstartpad en wijzigt geen van beide, en leest herstelacties alleen om te waarschuwen voordat het een proces beëindigt.
  • U moet een service aanmaken of verwijderen. sc create en sc delete. Niet hier, met opzet.
  • U zit al diep in een PowerShell-pijplijn. bws list --json komt als objecten terug via ConvertFrom-Json, dus het voegt zich in de pijplijn in plaats van haar te vervangen.

Samen, in plaats van in de plaats

Het hulpmiddel dat antwoordt op wat is er mis met deze machine en de hulpmiddelen die één instelling wijzigen zijn niet hetzelfde hulpmiddel. Stel de vraag hier, lees het plan hier, en gebruik wat u wilt om het uit te voeren - het plan drukt de opdrachtregel af die om hetzelfde vraagt, en die regel is bedoeld om te worden gekopieerd.