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?


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

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. :)


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.