Usługi systemu Windows – opóźniony start – Powershell.

Natknąłem się na taki oto problem. W pewnym automatycznym procesie, zaistniała potrzeba utworzenia usługi, która  ma opóźniony start w systemie. Na pierwszy rzut oka, wydaje się to trywialne, ponieważ jak wiadomo usługę z ręki da się tak skonfigurować. Jest do tego odpowiedni przełącznik w panelu właściwości usługi:

1

Wszystko więc wskazuje na to, że jest to osobny tryb startu obok manual, disabled i Automatic. Niestety, okazuje się że MS wymyślił to trochę inaczej. Zacznijmy od tego, że próbując  wykonać poniższe polecenie z Powershell dostajemy tylko następujące tryby startu:

2

Czegoś tu brakuje czyż nie?

Okazuje się że tryb opóźniony nie jest trybem startu systemu tylko jest dodatkowym przełącznikiem dla trybu automatycznego. Niestety, nie znalazłem czystego sposobu w powershell aby włączyć tryb opóźniony. Gdzie możemy znaleźć ten przełącznik?

Dla przykładu skorzystam z usługi WSearch która będzie pełnić rolę pacjenta w tym ćwiczeniu:

wykonajmy poniższe polecenie:

Get-Item property -Path HKLM:\SYSTEM\CurrentControlSet\Services\WSearch

Wynik:

3

Zwróć uwagę, że tryb startu w tym przypadku to 4 (disabled). Mimo tego DelayedAutoStart jest ustawione na 1 (enabled). Zasada, jak się okazuje jest taka, że DelayedAutoStart ma zastosowanie dla trybu startu Automatic (Start: 2). W innym wypadku atrybut ten jest ignorowany.

W pierwszej kolejności aby włączyć Delayed Start w Powershell, próbowałem zmienić tylko wartość atrybutu DelayedAutoStart za pomocą:

Set-ItemProperty -Path HKLM:\SYSTEM\CurrentControlSet\Services\WSearch -Name DelayedAutostart -Value 1

O dziwo, w konsoli właściwości usługi zmiana powyższego atrybutu NIE dawała oczekiwanego rezultatu – nadal było widać tylko tryb Automatic. To bardzo dziwne, ale to pokazuje, że jest jeszcze gdzieś coś co musimy zmienić w rejestrze. Niestety, nie udało mi się znaleźć co. Dopiero użycie z sc.exe dało mi odpowiedni rezultat:

4

Wygląda więc na to, że aby ustawić ten tryb Delayed Start należy skorzystać z dedykowanego narzędzia. Jest to jedna z wielu niekonsekwencji Microsoft-u. Wiele razy słyszałem, że PowerShell jest narzędziem, którym da się zrobić w Windows wszystko. Jak widać – nie jest to prawda.