Ghid

sc.exe, Get-Service și acesta

Ambele sunt deja pe mașină și ambele vor rămâne utile. Această pagină este despre locul în care se opresc - și spune pe față unde rămân răspunsul mai bun.

Unde se oprește fiecare

sc.exe

Poate ajunge la aproape tot ce știe managerul de control al serviciilor și nu vă spune nimic despre cum să întrebați. Sintaxa este din anii nouăzeci - sc config X start= auto, unde spațiul de după semnul egal este obligatoriu, iar absența lui este un eșec tăcut de a face ce ați vrut.

Răspunde despre o singură intrare pe rând. Nu există filtrare, nicio ieșire pe care un script s-o poată analiza fără a scrie un parser și nicio previzualizare: sc stop fie funcționează, fie întoarce un număr.

Get-Service și cmdleturile *-Service

Obiecte propriu-zise, un pipeline și o vedere superficială. În Windows PowerShell 5.1, cel care vine cu Windows, Get-Service nu arată contul sub care rulează un serviciu și nici descrierea lui. PowerShell 7 le arată pe amândouă, și calea de lansare, și se instalează separat.

Stop-Service -Force înseamnă "chiar dacă ceva depinde de el" - oprește serviciile dependente și vă spune asta după, nu înainte.

Aceleași întrebări, în trei feluri

ÎntrebareCu ce este pe mașinăAici
Ce ar trebui să ruleze și nu rulează Get-Service | Where-Object { $_.StartType -eq 'Automatic' -and $_.Status -ne 'Running' } bws list --query "start:auto !status:running"
Ce servicii au un executabil nesemnat Citiți fiecare cale de lansare, rezolvați-o, apelați Get-AuthenticodeSignature pe fiecare - un script, nu o comandă bws list --query "signed:no"
Ce ar trage după sine oprirea acestuia sc enumdepend X, apoi citiți lista și decideți singur bws stop X --dry-run --dependents, care este planul ce ar rula
Ce s-a schimbat de săptămâna trecută Nimic, decât dacă ați scris singur colectorul bws snapshot diff before.json --live
Cine a schimbat tipul de pornire și când Get-WinEvent -FilterHashtable @{ LogName = 'System'; Id = 7040 }, apoi citiți mesajul fiecărui eveniment bws history Spooler, a cărui primă linie spune cât de departe ajunge jurnalul
Ieșire care poate fi citită de mașină Obiecte din PowerShell, text din sc.exe --json la fiecare comandă, la ieșirea standard, cu avertismentele la eroarea standard

Acolo unde acest instrument nu este de acord cu sc.exe despre un serviciu, este o eroare aici. O parte din suita de teste le rulează pe amândouă pe mașina pe care se află și le compară intrare cu intrare, iar o diferență între cele două este cel mai util lucru pe care îl puteți pune într-o sesizare.

Când să continuați să folosiți ce aveți

  • Sunteți pe o mașină pe care o veți atinge o singură dată. Ambele sunt deja acolo și nimic nu trebuie trecut de o politică.
  • Trebuie să schimbați contul, calea de lansare sau acțiunile de recuperare. sc.exe le face pe toate trei. Acest instrument arată contul și calea de lansare și nu schimbă niciuna, iar acțiunile de recuperare le citește doar ca să avertizeze înainte să încheie un proces.
  • Trebuie să creați sau să ștergeți un serviciu. sc create și sc delete. Nu aici, intenționat.
  • Sunteți deja adânc într-un pipeline PowerShell. bws list --json se întoarce ca obiecte prin ConvertFrom-Json, deci se alătură pipeline-ului în loc să-l înlocuiască.

Împreună, nu în loc

Instrumentul care răspunde la ce este în neregulă cu această mașină și instrumentele care schimbă o setare nu sunt același instrument. Puneți întrebarea aici, citiți planul aici și folosiți ce doriți pentru a-l executa - planul tipărește linia de comandă care cere același lucru, iar acea linie este făcută pentru a fi copiată.