Poradnik

sc.exe, Get-Service i to

Oba są już na maszynie i oba zostaną użyteczne. Ta strona jest o tym, gdzie się kończą - i mówi wprost, gdzie nadal są lepszą odpowiedzią.

Gdzie kończy się każdy z nich

sc.exe

Sięga prawie do wszystkiego, co wie menedżer usług, i nie mówi nic o tym, jak go o to zapytać. Składnia jest z lat dziewięćdziesiątych - sc config X start= auto, gdzie spacja po znaku równości jest obowiązkowa, a jej brak jest cichą porażką w robieniu tego, o co chodziło.

Odpowiada o jednym wpisie naraz. Nie ma filtrowania, nie ma wyjścia, które skrypt sparsuje bez pisania własnego parsera, i nie ma podglądu: sc stop albo działa, albo zwraca liczbę.

Get-Service i polecenia *-Service

Porządne obiekty, potok i płytki widok. W Windows PowerShell 5.1, tym dostarczanym z Windowsem, Get-Service nie pokazuje konta, na którym działa usługa, ani jej opisu. PowerShell 7 pokazuje jedno i drugie, a do tego ścieżkę uruchomienia, ale instaluje się go osobno.

Stop-Service -Force znaczy „nawet jeśli coś od tego zależy" - zatrzymuje zależne i mówi o tym po fakcie, a nie przed.

Te same pytania, trzema drogami

PytanieTym, co jest na maszynieTutaj
Co powinno działać i nie działa Get-Service | Where-Object { $_.StartType -eq 'Automatic' -and $_.Status -ne 'Running' } bws list --query "start:auto !status:running"
Które usługi mają niepodpisany plik Przeczytać każdą ścieżkę, rozwiązać ją, wywołać Get-AuthenticodeSignature na każdej - to skrypt, nie komenda bws list --query "signed:no"
Co zdjęłoby zatrzymanie tej usługi sc enumdepend X, a potem przeczytać listę i zdecydować samemu bws stop X --dry-run --dependents, czyli plan, który by się wykonał
Co zmieniło się od zeszłego tygodnia Nic, chyba że sam napisałeś zbieranie danych bws snapshot diff before.json --live
Kto i kiedy zmienił typ uruchomienia Get-WinEvent -FilterHashtable @{ LogName = 'System'; Id = 7040 }, a potem czytanie treści każdego zdarzenia bws history Spooler, którego pierwsza linia mówi, jak daleko wstecz sięga dziennik
Wyjście czytelne dla maszyny Obiekty z PowerShella, tekst z sc.exe --json przy każdej komendzie, na wyjściu standardowym, a ostrzeżenia na wyjściu błędów

Tam, gdzie ten program nie zgadza się z sc.exe co do usługi, błąd jest tutaj. Część zestawu testów uruchamia oba na maszynie, na której biegnie, i porównuje je wpis po wpisie - a różnica między nimi jest najbardziej użyteczną rzeczą, jaką można umieścić w zgłoszeniu.

Kiedy zostać przy tym, co masz

  • Jesteś na maszynie, której dotkniesz raz. Oba są już tam i nic nie musi przechodzić przez politykę.
  • Musisz zmienić konto, ścieżkę uruchomienia albo akcje odzyskiwania. sc.exe robi wszystkie trzy. Ten program pokazuje konto i ścieżkę uruchomienia, a nie zmienia żadnego z nich, a akcje odzyskiwania czyta tylko po to, żeby ostrzec, zanim zakończy proces.
  • Musisz utworzyć albo usunąć usługę. sc create i sc delete. Tutaj tego nie ma, świadomie.
  • Jesteś już w środku potoku PowerShella. bws list --json wraca jako obiekty przez ConvertFrom-Json, więc dołącza do potoku, zamiast go zastępować.

Razem, a nie zamiast

Narzędzie odpowiadające na co jest nie tak z tą maszyną i narzędzia zmieniające jedno ustawienie to nie to samo narzędzie. Zadaj pytanie tutaj, przeczytaj plan tutaj, a wykonaj czym chcesz - plan drukuje linię wiersza poleceń proszącą o to samo, i ta linia jest po to, żeby ją skopiować.