| Termin | Definicja |
|---|---|
| PowerShell – Get-Service | Get-Service sprawdza stan usług Windows, w tym silnika i agenta SQL Server. Podstawowe zastosowanie poleceniaGet-Service to jedno z pierwszych poleceń, po które sięga administrator, gdy trzeba szybko odpowiedzieć na pytanie, czy dana usługa Windows w ogóle działa. Uruchomione bez parametrów wypisuje wszystkie zarejestrowane usługi wraz z kolumnami Status, Name i DisplayName. W praktyce częściej filtruje się od razu, na przykład Get-Service -Name MSSQLSERVER dla domyślnej instancji silnika bazy danych albo Get-Service -Name SQLSERVERAGENT dla agenta odpowiedzialnego za zadania cykliczne. Instancje nazwane mają inny wzorzec: usługa silnika to MSSQL$NAZWAINSTANCJI, a agenta SQLAgent$NAZWAINSTANCJI, więc wygodnym skrótem jest Get-Service -Name *SQL* pokazujące od razu cały zestaw. Wynik jest obiektem, a nie tekstem, dlatego można go bezpośrednio przekazać dalej, na przykład Get-Service *SQL* | Where-Object Status -eq Stopped, żeby zobaczyć wyłącznie to, co jest wyłączone. Czego to polecenie nie pokażeGet-Service celowo ogranicza się do stanu i nazwy. Nie zwraca konta, na którym usługa się uruchamia, ścieżki do pliku wykonywalnego ani identyfikatora procesu, a to bywa najważniejsze przy diagnozowaniu problemów z uprawnieniami. Te dane daje dopiero Get-CimInstance -ClassName Win32_Service, gdzie dostępne są właściwości StartName, PathName i ProcessId. Istotna różnica dotyczy też pracy zdalnej: parametr -ComputerName działa w Windows PowerShell 5.1 wbudowanym w system, natomiast w PowerShell 7 został z tego polecenia usunięty i zdalne sprawdzenie trzeba wykonać przez Invoke-Command albo przez sesję CIM. Do zmiany stanu służą osobne polecenia: Start-Service, Stop-Service i Restart-Service, a do trybu uruchamiania Set-Service z parametrem -StartupType. Klasycznym odpowiednikiem tekstowym pozostaje sc query oraz konsola services.msc, ale żadne z nich nie zwraca obiektów, więc do skryptów nadają się gorzej. Typowe problemy w praktyce serwisowejNajczęstsza sytuacja: usługa SQL Server pokazuje status Stopped i nie chce wstać, a Start-Service kończy się komunikatem o odmowie dostępu. Powodów bywa kilka, od braku uprawnień administracyjnych w bieżącej sesji konsoli, przez zmienione hasło konta usługi po zmianie polityki domenowej, po zajęty port albo uszkodzone pliki bazy master. Sam PowerShell powie tylko, że usługa nie wstała; przyczyna zwykle czeka w dzienniku zdarzeń aplikacji i w pliku ERRORLOG katalogu LOG instancji. Drugi częsty przypadek to usługa w stanie StartPending albo StopPending utrzymującym się długimi minutami, co zazwyczaj oznacza, że proces czeka na operację dyskową lub na zamknięcie połączeń. Trzeci to mylenie usług: zatrzymanie agenta nie zatrzymuje silnika, ale zatrzymanie silnika zatrzymuje agenta zależnego od niego. Warto też pamiętać, że nazwa wyświetlana bywa zlokalizowana, więc filtrowanie po -DisplayName na polskiej wersji systemu może nie znaleźć tego, co znajduje filtr po -Name. Kiedy skrypt to za małoUsługa, która przestaje wstawać po restarcie serwera, rzadko jest problemem jednego polecenia. Za takim objawem stoi zwykle awaria dysku, przepełniony wolumin z plikami dziennika transakcji albo niepoprawnie zakończona aktualizacja. Wdrażamy i serwisujemy oprogramowanie handlowe oparte na bazach SQL Server, obsługujemy firmy z Warszawy przez całą dobę we wszystkie dni tygodnia, a na czas naprawy stacji roboczej udostępniamy laptop zastępczy, żeby praca w biurze nie stanęła. |