Wyszukiwanie i filtrowanie usług – Windows PowerShell

PowerShell daje nam olbrzymie możliwości wyszukiwania usług (services) w systemie Windows. Ponieważ można grupowo wyszukać usługi możemy również sprawnie nimi zarządzać. Dzięki sprawnemu wyszukiwaniu usług można uruchomić, zatrzymać diagnozować, lub zmienić konfigurację wielu usług jednocześnie.

Get-Service – po prostu znajdź usługę

Aby zarządzać usługami najpierw musimy potrafić je wyszukać. W tym celu wykorzystamy komandlet (commandlet) Get-Service oraz jego właściwości (Property). Właściwości dostępne dla polecenia możemy sprawdzić przekierowując wynik polecenia do komandletu Get-Member (to działa dla wszystkich komandletów PowerShell).

PS C:\> Get-Service *|Get-Member -MemberType Properties                                                                  

   TypeName: System.ServiceProcess.ServiceController

Name                MemberType    Definition
----                ----------    ----------
Name                AliasProperty Name = ServiceName
RequiredServices    AliasProperty RequiredServices = ServicesDependedOn
CanPauseAndContinue Property      bool CanPauseAndContinue {get;}
CanShutdown         Property      bool CanShutdown {get;}
CanStop             Property      bool CanStop {get;}
Container           Property      System.ComponentModel.IContainer Container {get;}
DependentServices   Property      System.ServiceProcess.ServiceController[] DependentServices {get;}
DisplayName         Property      string DisplayName {get;set;}
MachineName         Property      string MachineName {get;set;}
ServiceHandle       Property      System.Runtime.InteropServices.SafeHandle ServiceHandle {get;}
ServiceName         Property      string ServiceName {get;set;}
ServicesDependedOn  Property      System.ServiceProcess.ServiceController[] ServicesDependedOn {get;}
ServiceType         Property      System.ServiceProcess.ServiceType ServiceType {get;}
Site                Property      System.ComponentModel.ISite Site {get;set;}
StartType           Property      System.ServiceProcess.ServiceStartMode StartType {get;}
Status              Property      System.ServiceProcess.ServiceControllerStatus Status {get;}

W mojej praktyce najczęściej korzystam z właściwości:

  • ServeiceName – to nazwa usługi
  • DisplayName – to nazwa wyświetlana usługi
  • StartType – określa czy usługa startuje automatycznie, ręcznie czy jest wyłaczona
  • Status – określa czy aktualnie jest włączona czy zatrzymana

Proste wyszukowania

Możemy szybko wyszukać usługi jakie nas interesują i sprawdzić ich stan bez klikania po interfejsie graficznym

Wyszukanie pojedynczej usługi gdy znamy jej nazwę
Wyszukanie pojedynczej usługi gdy znamy jej nazwę
Wyszukanie wielu usług jednocześnie po początku nazwy
Wyszukanie wielu usług jednocześnie po początku nazwy

Można też pominąć parametr -Name ponieważ to właściwość po której Get-Service szuka domyślnie. Jeśli chcemy zwrócić wszystkie usługi w systemie można wydać samo polecenie Get-Service bez żadnych parametrów.

Wyszukiwanie usług – formatowanie wyniku

W powyższym przykładzie otrzymaliśmy widok domyślny. Zwracane usługi mają oczywiście więcej właściwości, możemy je wyświetlić formatując wynik na przykład za pomocą listy:

Wyświetlenie wszystkich właściwości zwróconych usług
Wyświetlenie wszystkich właściwości zwróconych usług

lub skróconej wersji polecenia:

Skrócona wersja zapytania o wszystkie właściwości usługi
Skrócona wersja zapytania o wszystkie właściwości usługi

Możemy też wyświetlić widok tabelaryczny za pomocą komandletu Format-Table (lub krócej ft) z wybranymi właściwościami:

Get-Service -Name Win* |Format-Table Name, StartType, StartType
Formatowanie wyniku za pomocą Format-Table
Formatowanie wyniku za pomocą Format-Table

Wyszukiwanie zatrzymanych usług, które powinny startować automatycznie

Oczywiście możemy również pokombinować z różnymi parametrami. Bardzo przydatnym wyszukaniem jest wyszukanie wszystkich usług, które mają rodzaj startu StartType ustawiony na Automatic, a Status na Stopped. Takie usługi zawsze wymagają uwagi – może to świadczyć o jakiejś nieprawidłowości.

Get-Service -Name * |Where-Object { $_.Status -eq "Stopped" -and $_.StartType -eq "Automatic"}|Format-Table Name, Status, StartType
Wyszukiwanie usług po rodzaju startu i statusie
Wyszukiwanie usług po rodzaju startu i statusie

lub krótsza wersja tego samego polecenia:

Get-Service * |? { $_.Status -eq "Stopped" -and $_.StartType -eq "Automatic"}|ft Name, Status, StartType
Wyszukiwanie usług za pomocą PowerShell po rodzaju startu i statusie - wersja krótsza
Wyszukiwanie usług po rodzaju startu i statusie – wersja krótsza

Grupowe operacje na usługach

Wystarczy teraz skierować wynik konkretnego filtra do komandletu Start-Service, Stop-Service lub Restart-Service aby wykonać operacje wyfiltrowanych na usługach. Należy pamiętać o usunięciu formatowania aby prawidłowo przekazać wynik do komendantów operujących na usługach.

Get-Service -Name * |Where-Object { $_.Status -eq "Stopped" -and $_.StartType -eq "Automatic"}|Start-Service

Lub wyszukane ustawić w tryb Manual lub Disabled za pomocą komandletu Set-Service:

Get-Service -Name * |Where-Object { $_.Status -eq "Stopped" -and $_.StartType -eq "Automatic"}|Set-Service -StartupType Manual

Więcej o komandlecie Get-Service można znaleźć na stronach firmy Microsoft:
https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.management/get-service?view=powershell-7

Jeśli chcesz coś dodać od siebie lub masz pokrewny do opisywanego problem, to zachęcam do zostawienia komentarza poniżej.

Dodaj komentarz

Witryna wykorzystuje Akismet, aby ograniczyć spam. Dowiedz się więcej jak przetwarzane są dane komentarzy.