Powershell – kontrola, tworzenie i kasowanie usług w Windows


 

powershell_icon_150Pisałem o tworzeniu i kasowaniu usług w CMD za pomoc programu SC, było o poleceniu NET – przyszła kolej na Powershella. Tym razem postanowiłem wszystkie zagadnienia (wyświetlanie usług, kontrolowanie stanu, tworzenie i kasowanie) zmieścić w jednym artykule – zachęcam więc do lektury :) Jestem pewien, że ten temat można rozbudować o jakieś ciekawe sposoby łączenia poleceń lub zaawansowane skrypty – zachęcam do dzielenia się nimi w komentarzach.

GET_SERVICE: Proste i zaawansowane wyświetlanie listy usług

Pierwszym podstawowym cmdletem służącym do wyświetlania usług w PS jest oczywiście:

get-service

W efekcie ujrzymy pełną listę usług wraz z nazwą systemową, nazwą wyświetlaną i stanem.
get-service
Możemy zawęzić wynik wyszukiwania np. po nazwie lub fragmencie nazwy. Należy podkreślić, że podajemy NAZWY SYSTEMOWE, a nie nazwy wyświetlane. Pisząc skrypt, warto wspomóc się tabelą usług, którą jakiś czas temu publikowałem na naszym Blogu.

get-service -Name *Listener*

lub

get-service wmi*

Możemy też wyświetlić listę usług z WYKLUCZENIEM jakiejś nazwy lub frazy:

get-service sp* -exclude Spooler

Wyświetlenie tylko zatrzymanych usług:

get-service | where-object {$_.Status -eq „Stopped”}

Wyświetlenie tylko włączonych usług:

get-service | where-object {$_.Status -eq „Running”}

Wyświetlenie usług na zdalnej maszynie:

get-service -computername nazwa_komputera

Zgodnie z wcześniejszym artykułem, wyniki komend w PS można elegancko formatować i zapisywać do pliku. Oto przykład:

Get-Service | ConvertTo-HTML -Property Name, Status > C:\services.htm

Wyświetlanie listy usług z WMI

Nieco wiecej informacji o usługach trzyma baza WMI. Podstawowym poleceniem w Powershellu będzie:

Get-wmiobject win32_service

W efekcie ujrzymy nieco więcej informacji, niż dawał nam cmdlet get-Service:
wmiobject win32_service
Oczywiście można sobie odfiltrować listę usług po nazwie:

Get-WmiObject win32_service -filter „name=’WinRM'”

Zatrzymywanie, startowania i wznawianie pojedyńczych usług w Powershellu

Wyłączanie usługi po nazwie wyświetlanej:

Stop-Service -displayname „Bluetooth service”

Wyłączanie usługi po nazwie systemowej:

Stop-Service btwdins

Uruchamianie usługi:

Start-Service -displayname „Bluetooth service”

Start-Service bthserv

Restartowanie usługi:

Restart-Service -displayname „Bluetooth service”

Restart-Service bthserv

Zatrzymywanie usługi:

Suspend-Service -displayname „Bluetooth service”

Suspend-Service bthserv

Wznawianie pracy zatrzymanej usługi”

Resume-Service -displayname „Bluetooth service”

Resume-Service bthserv

Masowe zatrzymywanie, startowania i wznawianie usług w Powershellu

W powershellu można łączyć ze sobą komendy. Zatem można użyć opisanego wyżej get-service, do znalezienia listy usług, i połączyć to z cmdletami do startowania, zatrzymywania itd..
Prosty przykład: Zatrzymanie wszystkich usług, których nazwa zawiera frazę „sp” (będą to zapewne Print Spooler, Sofware Protection)

get-service -displayname sp* | stop-service

Wznowienie działania wszystkich zatrzymanych usług:

get-service | where-object {$_.Status -eq „Paused”} | resume-service

Tworzenie usług w Powershellu

Do tworzenia usług służy cmdlet „New-Service” i jego ogólna składnia ma postać.

New-Service -name $serviceName -binaryPathName $binaryPath -displayName $serviceName -startupType Automatic

Najprostszy przykład:

new-service -name TestService -binaryPathName „C:\WINDOWS\System32\svchost.exe -k netsvcs”

To samo, co wyżej, tylko z dodatkowymi właściwościami (usługa zależna, dodanie nazwy wyświetlaniej, tryb uruchamiania (ręczny), opis ):

new-service -name TestService -binaryPathName „C:\WINDOWS\System32\svchost.exe -k netsvcs” -dependson NetLogon -displayName „Test Service” -StartupType Manual -Description „to jest usługa testowa.”

Kasowanie usług w Powershellu

Do kasowania usług w Powershellu, musimy uzyc bazy WMI. Skasowanie usługi „TestService” wykonamy poleceniem:

Get-WmiObject -Class Win32_Service -Filter „Name=’TestService'”

I tu mała uwaga: mam złe doświadczenia z kasowaniem usług w ten sposób. Znacznie lepiej sprawdza mi się stare polecenie SC, które kiedyś już opisywałem:

sc.exe delete TestService

W tym miejscu pozwolę sobie zakończyć, choć mam świadomość, ze jest wiele ciekawych rzeczy, które można dodać :) Zachęcam do poznania wielu innych przykładów zastosowania Powershella, które znajdziecie na naszym Blogu po TAGu lub w wyszukiwarce.


Podobne Tematy: