Skrypt, aby uzyskać wszystkie „zatrzymane” usługi z typem uruchamiania „automatycznym” - Windows

0

Jeśli więc usługa ma typ uruchamiania „Automatyczny” lub „Ręczny”, ale jest obecnie zatrzymana, chciałbym uruchomić polecenie, aby zobaczyć te problemy.

W powershell i CMD jestem w stanie zobaczyć jeden LUB drugi, ale nie ma łatwego sposobu na znalezienie danych do tego, czego potrzebuję.

Zasadniczo zamierzam stworzyć skrypt do usług rozwiązywania problemów. Będzie można określić, czy istnieją jakieś usługi, które powinny zostać uruchomione (na podstawie ich typu uruchamiania), ale nie są uruchomione (zatrzymane lub zawieszone).

Problem, z którym się spotykam, polega na tym, że PowerShell lub CMD nie pozwalają na dogłębny filtr ani potok wyników. Czy ktoś ma sposób, aby pomóc mi to zrozumieć?

Jak mogę rozwiązać ten problem?

John
źródło
Jako alternatywne podejście możesz użyć sc znaleźć informacje o usługach i kontrolować je za pomocą filtrowania tekstu.
AFH

Odpowiedzi:

1
(get-service|?{ $_.Status -eq "Stopped" -and $_.StartType -eq "Automatic"})|
select DisplayName, StartType, Status
SAm
źródło
Jaka jest idea tego nawiasu? Twój skrypt sprawdza tylko, czy jest zatrzymany, podczas gdy początkowe pytanie również chciało zatrzymać stan zawieszenia. Jeśli założymy, że mogą istnieć inne stany, filtrowanie dla `! = Running´ może być lepsze.
Seth
Dostaję pomyłkę podczas pipingu na 2 lub 3 poziom, więc przyzwyczaiłem się do nawiasów wszędzie tam, gdzie to możliwe. Ale w tym przypadku nie ma sensu. na stronie '! = Running', a może - „Running”?
SAm
1
Z != Running miałem na myśli -ne 'Running' chciałem tylko zapisać te dodatkowe postacie! Dziękuję, że wyjaśniłeś swoje rozumowanie w nawiasie. :)
Seth
1

Patrząc na to pytanie możesz wymyślić to dla starych wersji PowerShell:

Get-WmiObject -Class Win32_Service | Select-Object Name,State,StartMode | Where-Object {$_.State -ne "Running" -and $_.StartMode -eq "Auto"}

Z nowszymi wersjami (co najmniej 5 może 3/4) można również użyć (co sugerował JC2k8):

Get-Service | Select-Object -Property Name,Status,StartType | Where-Object {$_.Status -eq "Stopped" -and $_.StartType -eq "Automatic"}

W starszych wersjach PowerShell Get-Service cmdlet nie oferuje członka, który ma StartType.

PowerShell obsługuje wiele filtrów i instalacji. :)

Seth
źródło
Zgodnie z tym samym linkiem powinieneś prawdopodobnie użyć czegoś takiego jak poniższa instrukcja (jeśli używasz Powershell w wersji 5): Get-Service | Select-Object -Property Name,Status,StartType | where-object {$_.Status -eq "Stopped" -and $_.StartType -eq "Automatic"}
JC2k8
Masz rację, ale powyższa metoda działa również na starszych wersjach PowerShell. PowerShell 5.0 byłby domyślny w systemie Windows 10. Nie wiem jak Get-Service zachowuje się na PowerShell 3.0 / 4.0 przynajmniej na PowerShell 2.0 (Windows 7) Get-Service nie ma StartType jako członek.
Seth