#2 PowerShell – Get-Service

Print Friendly, PDF & Email

Get-Service w PowerShell, jakiś czas temu, przedstawiłem 10 najpopularniejszych poleceń PowerShell, w tym chciałbym przyjrzeć się dokładniej jednemu z nich, czyli Get-Service.

Usługi w systemie Windows są jedną z najważniejszych części systemu operacyjnego. Wcześniej, aby uzyskać stan usługi w systemie Windows, trzeba było użyć graficznej przystawki services.msc lub narzędzia wiersza polecenia sc.exe (na przykład zapytania sc.exe wuauserv). W tym artykule przyjrzymy się, jak sprawdzić status usługi w systemie Windows za pomocą PowerShell.

Możesz użyć polecenia cmdlet Get-Service PowerShell, aby uzyskać listę wszystkich usług zainstalowanych w systemach operacyjnych Windows, ich stan i typ uruchamiania. Ten i inne polecenia cmdlet, które służą do uzyskiwania statusu i zarządzania usługami Windows, po raz pierwszy pojawiły się w PowerShell 1.0. W tym artykule pokażę typowe przykłady użycia cmdletu Get-Service do uzyskania statusu usługi na komputerach lokalnych lub zdalnych (uruchomiona lub zatrzymana). Przedstawię również typ uruchamiania usług o zależności pomiędzy usługami.

Listę usług na komputerze lokalnym lub zdalnym można uzyskać za pomocą polecenia cmdlet Get-Service. Uruchomienie polecenia Get-Service bez parametrów zwraca listę wszystkich usług na komputerze lokalnym.

Aby uzyskać pełną składnię polecenia cmdlet Get-Service, uruchom polecenie:

Pomoc dla Get-Service

Użyj Get-Service, aby sprawdzić stan usługi Windows

To polecenie wyświetli listę wszystkich lokalnych usług Windows, ich status (uruchomiony, zatrzymany lub wstrzymany) i nazwę wyświetlaną:

Lista usług dostępnych w systemie

Polecenie cmdlet zwraca listę usług posortowanych według nazwy. Lista zawiera następujące właściwości usługi Windows:

Stan (State) — pokazuje, czy serwer jest uruchomiony, czy zatrzymany.
Nazwa (Name)— wyświetla skróconą nazwę usługi (używaną najczęściej).
Wyświetlana nazwa (DisplayName) — pełna nazwa usługi (bardziej opisowa i czytelna dla człowieka).

Aby zapisać listę usług w pliku tekstowym do późniejszego zbadania, użyj polecenia cmdlet Out-File:

Aby uzyskać dwa lub więcej stanów usługi, musisz podać ich nazwy rozdzielone przecinkami:

Wyświetlenie informacji o dwóch konkretnych usługach

Jeśli chcesz wyświetlić tylko uruchomione usługi, użyj tego polecenia:

Operator potoku (|) przekazuje wyniki do polecenia cmdlet Where-Object, które wybiera tylko te usługi, dla których parametr Status ma wartość „Running”. Jeśli chcesz wyświetlić tylko zatrzymane usługi, określ „Stopped”.

Pokaż usługi, które działają

Możesz uzyskać wszystkie właściwości obiektu usługi za pomocą metody Get-Member.

Jak widać, obiekty te mają nazwę typu — System.ServiceProcess.ServiceController. Zrzut ekranu pokazuje wszystkie dostępne właściwości i metody obiektów usług w systemie Windows (większość z nich nie jest używana podczas wyświetlania domyślnie).

Get-Member – pobranie członków, właściwości i metod obiektów

Możesz wyświetlić właściwości określonej usługi. Na przykład musimy wyświetlić nazwę wyświetlaną (DisplayName), status i funkcje usługi Windows Update (wuauserv):

Właściwości usługi

Możesz znaleźć wszystkie usługi, które można wstrzymać i wznowić bez ponownego uruchamiania systemu Windows:

Na przykład, aby uzyskać typ uruchamiania usług Windows, uruchom polecenie (działa w PowerShell 5.1, wprowadzonym w Windows 10/Windows Server 2016):

Jeśli chcesz uzyskać tylko typ uruchomienia usługi, uruchom:

Typ uruchomionej usługi

Istnieją 4 możliwe stany, w których mogą znajdować usługi:

Automatyczne (Automatic) — automatyczne uruchamianie podczas uruchamiania systemu Windows.
(Automatyczny opóźniony start) Automatic Delayed Start — uruchamianie po starcie systemu.
Ręczny (Manual) — uruchamianie ręczne.
Wyłączona (Disabled)— usługa jest wyłączona.

Możesz filtrować listę usług według nazwy usługi, używając gwiazdki jako symbolu wieloznacznego:

Należy również zauważyć, że PowerShell nie rozróżnia wielkości liter. Oznacza to, że następujące polecenia zwrócą równe wyniki:

Aby wykluczyć niektóre usługi z wynikowej listy, możesz użyć opcji -Exclude:

Wykluczenie usługi

Możesz sortować usługi w porządku malejącym według wartości właściwości Status (usługi uruchomione są wyświetlane wcześniej niż zatrzymane):

Dość częstym zadaniem administratora podczas rozwiązywania problemów z systemem Windows jest sprawdzenie, które z usług systemu Windows, które powinny być uruchamiane automatycznie, są obecnie zatrzymane. Możesz użyć opcji FilterScript, aby wyszukać usługi, które mają typ automatycznego uruchamiania i nie są aktualnie uruchomione:

FilterScript uruchomienie zastopowanych usług

Należy również zauważyć, że PowerShell Core 7.x wprowadza dodatkowe właściwości Get-Service, które nie są dostępne w Windows PowerShell 5.1 (na przykład UserName, BinaryPathName, StartType). Wartość tych właściwości można uzyskać w konsoli pwsh.exe (PowerShell 7.x).

Dodatkowe właściwości Get-Service w PowerSehll 7.x

Jak sprawdzić, czy określona usługa istnieje za pomocą PowerShell?

Jeśli chcesz sprawdzić, czy dana usługa Windows aktualnie istnieje, możesz użyć następujących poleceń (zwykle to sprawdzenie jest używane w różnych skryptach):

Możesz sprawdzić, czy określona usługa Windows istnieje na liście zdalnych komputerów/serwerów. Aby wykonać to zadanie, musisz zapisać listę komputerów zdalnych w pliku tekstowym computers.txt w prostym formacie:

Teraz uruchom następujący skrypt PowerShell:

Użyj programu PowerShell, aby sprawdzić stan usługi na komputerze zdalnym

Możesz użyć polecenia cmdlet Get-Service, aby uzyskać status usług nie tylko na komputerach lokalnych, ale także na komputerach zdalnych. W tym celu użyj parametru –ComputerName. Jako nazwy komputera można użyć nazwy NetBIOS, nazwy FQDN lub adresu IP. Połączenie z komputerami zdalnymi jest nawiązywane nie przez PowerShell Remoting (WinRM), ale przez Service Manager (podobnie jak polecenie sc.exe).

W PowerShell v3 możesz uzyskać status usług na wielu zdalnych komputerach jednocześnie (ich nazwy muszą być oddzielone przecinkami).

Status usługi na zdalnych maszynach

W tym przykładzie użyj polecenia cmdlet format-table, aby uzyskać wygodniejszą tabelę z listą stanu usług.

Możesz także sprawdzić stan usługi na liście komputerów zdalnych. Jest przechowywany w zwykłym pliku tekstowym:

Lub możesz sprawdzić stan usługi na wszystkich komputerach w określonej jednostce organizacyjnej AD:

Aby ponownie uruchomić usługę na komputerze zdalnym, użyj następującego polecenia:

WAŻNE

Polecenie cmdlet Get-Service w PowerShell Core (PowerShell 6.x i 7.x), w przeciwieństwie do Windows PowerShell 5.1, nie ma parametru ComputerName, więc nie można go używać do sprawdzania stanu usług na komputerach zdalnych.

PowerShell różnice pomiędzy PS 5.1 oraz 6.x/7.x

Aby uzyskać dostęp do komputerów zdalnych z programu PowerShell Core, należy użyć usługi PowerShell Remoting za pośrednictwem usługi WinRM. Na przykład możesz sondować stan usług na wielu komputerach zdalnych za pomocą polecenia Invoke-Command. Na przykład:

Użycie cmdlet Invoke-Command

Użyj Get-Service, aby wyświetlić zależności usług

Polecenie cmdlet Get-Service ma dwa inne przydatne parametry, których można użyć podczas zarządzania usługami systemu Windows. Parametr DependentServices zwraca usługi zależne od tej usługi. Parametr RequiredServices zwraca usługi, od których zależy ta usługa.

Następujące polecenie odbiera usługi, które należało uruchomić przed uruchomieniem usługi LanmanWorkstation:

Zależności między usługami

Następne polecenie zwraca usługi zależne, które wymagają usługi LanmanWorkstation:

Jeśli ręcznie zatrzymasz wszystkie usługi zależne, nie będziesz mógł uruchomić swojej usługi. Aby automatycznie uruchamiać wszystkie usługi zależności, użyj następującego jednolinijkowego programu PowerShell:

Zarządzanie usługami Windows za pomocą PowerShell

W module PowerShell dostępne są inne przydatne polecenia cmdlet do zarządzania usługami. Aby wyświetlić listę wszystkich dostępnych poleceń PowerShell używanych do zarządzania usługami Windows, uruchom:

Lista wszystkich poleceń PowerShell

Za pomocą tych poleceń cmdlet można uruchamiać, zatrzymywać, ponownie uruchamiać lub zmieniać typ uruchamiania usługi.

Aby zarządzać usługami, uruchom program powershell.exe jako administrator. Musisz uruchomić, zatrzymać, ponownie uruchomić lub zmienić typ uruchamiania usługi.

Zatrzymaj usługę:

Gdy zatrzymasz niektóre usługi, może pojawić się błąd:

Stop-Service: Cannot stop service ‘SQL Server (MSSQLSERVER) (MSSQLSERVER)’ because it has dependent services. It can only be stopped if the Force flag is set.

Aby wymusić zatrzymanie tej i usługi zależnej, użyj parametru -Force:

Uruchom usługę:

Uruchom ponownie usługę:

Jeśli chcesz zmienić typ uruchamiania usługi (na przykład z automatycznego na wyłączony), uruchom:

Niektóre usługi systemu Windows można zawiesić za pomocą polecenia Suspend-Service:

Jeśli spróbujesz zawiesić usługę, która nie obsługuje tej metody, pojawi się błąd:

Suspend-Service : Service ‘Windows Update (wuauserv)’ cannot be suspended because the service does not support being suspended or resumed.
Błąd przy zawieszeniu działania usługi, która go nie obsługuje

Aby znaleźć usługi systemu Windows, które możesz wstrzymać, uruchom polecenie:

Polecenie Resume-Service służy do uruchamiania zawieszonej usługi:

Aby utworzyć nową usługę za pomocą komendy New-Service, należy podać jej nazwę i ścieżkę do pliku binarnego:

Aby usunąć usługę:

WAŻNE

Polecenie cmdlet Remove-Service jest dostępne w programie PowerShell Core 6.x +.

Podsumowanie

Get-Service pozwala na zaawansowane zarządzanie usługami systemu Windows. Zarządzanie dotyczy zarówno usług, które działają lokalnie, jak i tych działających na innych maszynach (zdalnie).

Z jego pomocą możliwe jest zatrzymywanie usług, wznawianie a także tworzenie własnych usług.

Myślę, że Get-Service warto znać, aby pomagał w codziennej pracy w usługami.

Print Friendly, PDF & Email

Dziękuję Ci, za poświęcony czas na przeczytanie tego artykułu. Jeśli był on dla Ciebie przydatny, to gorąco zachęcam Cię do zapisania się na mój newsletter, jeżeli jeszcze Cię tam nie ma. Proszę Cię także o “polubienie” mojego bloga na Facebooku oraz kanału na YouTube – pomoże mi to dotrzeć do nowych odbiorców. Raz w tygodniu (niedziela punkt 17.00) otrzymasz powiadomienia o nowych artykułach / projektach zanim staną się publiczne. Możesz również pozostawić całkowicie anonimowy pomysł na wpis/nagranie.

Link do formularza tutaj: https://beitadmin.pl/pomysly

Pozostaw również komentarz lub napisz do mnie wiadomość odpisuję na każdą, jeżeli Masz jakieś pytania:).

Dodaj komentarz

beitadmin.pl - Droga Administratora IT