Informacje o usługach w PowerShell
Jakiś czas temu potrzebowałem pobrać z kilku serwerów listę usług z automatycznym startem, które nie są uruchomione. Wbudowany cmdlet Get-Service okazał się być mało przyjazny więc postanowiłem napisać własny skrypt.
Do pobierania stanu usług posłuży nam klasa WMI Win32_Service
Get-WmiObject Win32_Service -ComputerName Komputer | select PSComputerName, Name, DisplayName, State, StartMode, StartName
W linii powyżej wyświetlamy kilka wybranych – moim zdaniem ważniejszych – parametrów (które określamy po komendzie select) takich jak m.in. nazwa usługi, status oraz typ uruchamiania z klasy Win32_service dla komputera Komputer. Teraz musimy wyselekcjonować usługi które uruchamiają się automatycznie ale są nieuruchomione.
Where-Object { $_.StartMode -like „auto” -and $_.State -like „Stopped” }
A co w przypadku jeśli takie informacje musimy pobrać z 50 maszyn? Albo potrzebujemy wylistować usługi uruchomione? Do tego posłuży nam skrypt w załączniku. Funkcja Get-Services pozwoli na dużo łatwiejsze pozyskiwanie informacji o stanie usług. Aby wyświetlić wszystkie usługi na danym komputerze należy wpisać:
Get-Services HostName
Jeśli mamy kilka komputerów to kolejne dopisujemy po przecinku:
Get-Services HostName, HostName2
Możemy też pobrać informacje dla listy komputerów z pliku:
Get-Services –computers .\host.txt
A teraz zawęzimy parametry w celu wyszukania usług z automatycznym startem, które nie są uruchomione:
Get-Services -auto -stopped
A jeśli interesuje nas stan konkretnej usługi to wpisujemy:
Get-Services -name „a*be” –computername
Wykonanie dla kilku komputerów z nazwami wpisanymi jako parametr:
Get-Services –computername komp1, komp2
lub:
“komp1”, “komp2” | Get-Services -auto
Dostępnie przełączniki, które pozwolą sprecyzować wynik:
- auto – wyświetli usługi z automatycznym uruchomieniem
- manual – wyświetli usługi z ręcznym uruchomieniem
- disabled – wyświetli wyłączone usługi
- stopped – wyświetli zatrzymane usługi
- running – wyświetli działające usługi
Zapraszam do testowania oraz jeśli zauważycie jakiś błąd – zgłaszajcie 🙂
Notka od redakcji – to pierwszy tekst Michała – bądźcie mili w komentarzach.
Witamy nowego członka w drużynie „SPECÓW IT” 🙂
Czekamy na kolejne praktyczne wpisy.
witam,, mam pytanie – jak zresetować procesy danego użytkownika?
Możesz troszkę rozwinąć swoje pytanie?
tak jasne,
Posiadamy oprogramowanie w pracy w zależności od używania otwiera ono 'swoje’ usługi uruchomione jako procesy użytkownika zalogowanego, ilość owych procesów waha się w granicach od 10 do 15 – potrzebuje wykonać reset usług skryptem po użytkowniku
Cześć,
raz piszesz o usługach a raz o procesach 🙂
Usługi można restartować albo z PS: Restart-Service albo z cmd net stop i net start.
Proces można zatrzymać z PS: Stop-Process.
Taka komende można dodać do task schedulera żeby uruchamiała się co godzine czy dwie.
Pozostaje pytanie co z niezapisanymi danymi aplikacji, skoro zamkniesz ją na siłe ?
hm, jestem zielony praktykant, wiem że zadanie mam takowe:
Napisz skrypt, który będzie zczytywał listę serwisów według użytkowników i będzie można jedną komendą zrestartować
pomoże ktoś? 🙂
Wojtek, „Usług”, a nie serwisów 🙂 Pogłów sie sam zanim dostaniesz gotowca. Satysfakcja z własnego osiągnięcia gwarantowana.
Podpowiedź 1 (restart usług):
https://spece.it/powershell-kontrola-uslug-windows/
Podpowiedź 2: pętle w PS:
https://spece.it/szkola-skryptowania-lvl-4-skrypt-bazowy-nowa-wersja-powershell/
tak, widziałem dzięki, wiem jak zresetować DANĄ usługę – nie wiem natomiast jak wyłuskać usługi użytkownika, np znajdź usługi usera kajtek i zrób reset – czy jest to możliwe czy jednak trzeba to zrobić po nazwie usługi co oznaczało by że skrypt będzie musiał sprawdzić każdą i jeśli działa to wykonać reset – co byłoby mało poręczne