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
| Vraag | Met wat op de machine staat | Hier |
|---|---|---|
| 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.exedoet 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 createensc delete. Niet hier, met opzet. - U zit al diep in een PowerShell-pijplijn.
bws list --jsonkomt als objecten terug viaConvertFrom-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.