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 🙂

Get-Services.ps1 (ziped)

Notka od redakcji – to pierwszy tekst Michała – bądźcie mili w komentarzach.

Przeczytaj także...

8 komentarzy

  1. Łukasz Skalikow napisał(a):

    Witamy nowego członka w drużynie „SPECÓW IT” 🙂
    Czekamy na kolejne praktyczne wpisy.

  2. wojtek napisał(a):

    witam,, mam pytanie – jak zresetować procesy danego użytkownika?

  3. wojtek napisał(a):

    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

    • Michał Wróbel napisał(a):

      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 ?

  4. wojtek napisał(a):

    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ś? 🙂

  5. wojtek napisał(a):

    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

Dodaj komentarz