PowerShell — управление сервисами или процессами от части уже описано в этой статье. Тем не менее сегодня мы разберем более тривиальные сценарии, без создания механизма перезапуска. Поймем как правильно работать с командлетами. А так же освоим командлеты, которые предназначены для работы с сервисами.
Powershell — управление сервисами.
В рамках какой-либо автоматизации рано или поздно появляется необходимость останавливать сервис, запускать какие-то сценарии и снова запускать сервис. Для решения этих задач в powershell были внесены командлеты Start-Service и Stop-Service. Каждый из них выполняет соответствующее действие. Для начала с помощью ps можно получить статус, имя и отображаемое имя всех сервисов с помощью команды Get-Service. Для удобства можно оставить только name и status столбцы: Get-Service | Select name,status.
В этом списке можно увидеть какие сервисы у вас не запущены. Соответственно для запуска используется Start-Service:
1 |
Start-Service service_name |
Так же для остановки сервиса используется соответствующий командлет:
1 2 |
Stop-Service AdobeUpdateService #остановка Start-Service AdobeUpdateService #запуск |
Ничего сложного.
Так как консоль после остановки и запуска сервисов ничего не выдает, рекомендую вам сразу добавлять конструкцию Get-Service service_name. Таким образом вы сможете моментально получить информацию о статусе сервиса:
1 2 3 4 5 |
stop-service AdobeUpdateService ; get-service AdobeUpdateService Status Name DisplayName ------ ---- ----------- Stopped AdobeUpdateService AdobeUpdateService |
1 2 3 4 5 |
Start-service AdobeUpdateService ; get-service AdobeUpdateService Status Name DisplayName ------ ---- ----------- Running AdobeUpdateService AdobeUpdateService |
Для того, чтобы получать информацию только о статусе запускаемого сервера, можно сделать так:
1 2 3 4 5 |
Start-service AdobeUpdateService ; get-service AdobeUpdateService | Select status Status ------ Running |
На самом деле можно сделать еще проще. Чтобы получить только статус в виде строки Running используем такую конструкцию:
1 2 |
Start-service AdobeUpdateService ; (get-service AdobeUpdateService).status Running |
Теперь давайте разберемся, что можно делать с этим статусом.
Предлагаю собрать строку, где сначала сервис будет останавливаться, потом стартовать и в конце выдавать сообщение, что все запущено успешно. Создадим переменную с именем сервиса, напишем сценарий его запуска и остановки, с поэтапным выводом в консоль, используя минимальное количество статического текста. Вся информация будет сформирована в строку путем вывода системных данных:
1 2 3 4 5 6 |
$servicename = "AdobeUpdateService" Stop-Service $servicename; $status = (get-service $servicename).status; Write-Host "$servicename now is $status"; AdobeUpdateService now is Stopped |
Теперь поменяем Stop-Service на Start-Service:
1 2 3 4 5 |
Start-Service $servicename; $status = (get-service $servicename).status; Write-Host "$servicename now is $status"; AdobeUpdateService now is Running |
Как видите наша строка стала динамичной и меняется она основываясь на данных, которые получаются в результате вывода команды Get-Service. Таким образом можно формировать свой собственный лог для отладки каких-либо задач.
Итог:
Возвращаясь к автоматизации. Мои Powershell скрипты гоняются на сервере TeamCity. Соответственно я заинтересован в максимально подробном логе и часто прибегаю к такой методике. На этом пожалуй все. Подписывайтесь на наш канал на ютубе, на группу в ВК и другие ресурсы. Надеюсь статья была для вас полезной, а если остались вопросы — пишите их в комментариях. Спасибо за внимание!