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
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:
lub skróconej wersji polecenia:
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
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
lub krótsza wersja tego samego polecenia:
Get-Service * |? { $_.Status -eq "Stopped" -and $_.StartType -eq "Automatic"}|ft Name, Status, StartType
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.