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
| Întrebare | Cu 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.exele 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șisc delete. Nu aici, intenționat. - Sunteți deja adânc într-un pipeline PowerShell.
bws list --jsonse întoarce ca obiecte prinConvertFrom-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ă.