Можете ли вы написать службы Windows в Powershell - PullRequest
2 голосов
/ 25 мая 2011

Я написал программу в PowerShell, которая зацикливает и проверяет вещи. Я хотел бы преобразовать это в службу Windows. Я создал службу Windows (в Admin-> Services), но не могу ее запустить. Я почти уверен, что мне не хватает подходящего интерфейса, в который система должна обращаться, чтобы запустить / остановить / приостановить / и т. Д. Службу.

Я могу найти множество примеров, когда это делается в VB / C # / MS-lang, но ничего о том, как это сделать с помощью PowerShell. Есть ли какая-либо документация (или, предпочтительно, примеры кода), чтобы помочь с этим?

Ответы [ 5 ]

4 голосов
/ 25 мая 2011

Здесь обсуждается несколько предметов:

  • Вы уверены, что вам действительно нужен сервис? Я согласен с комментариями об использовании планировщика для выполнения периодических задач. Планировщик может запускать задачи от имени администратора.
  • Службы вызывают специальный набор API-интерфейсов для связи с диспетчером управления службами, поэтому обычную программу нельзя использовать напрямую.
  • Диспетчер управления службами использует CreateProcessAsUser для запуска процесса обслуживания, поэтому вам нужно указать SCM на исполняемый двоичный файл, а не на сценарий.

Если вы не можете использовать планировщик (хотя я настоятельно рекомендую вам попробовать), я полагаю, что вы могли бы написать исполняемый двоичный файл, который действует как служба. Затем он выполнит PowerShell и ваш скрипт от вашего имени. Я думаю, что-то вроде программы srvany, которая раньше входила в состав комплекта ресурсов Windows Server 2003, могла бы запустить службу для вас.

3 голосов
/ 03 октября 2014

Вы можете использовать опцию Compile Script to Service в PowerGUI: http://documents.software.dell.com/DOC144271

2 голосов
/ 18 января 2012

Я думаю, что вы ищете SrvAny.exe от Microsoft (я не знаю, поддерживают ли они его больше, но он был в Windows 2000 Resource Kit годами. По сути, он превратится практически в любой исполняемый файл (.exe, .cmd и т. д.) в службу. У меня есть сценарии VBScripts, работающие как квази-службы с использованием Srvany.exe, и он работает в Windows 2003 и Windows 2008 (даже 64-разрядной). Он немного ограничен что он не обеспечивает 100% функциональности сервиса (остановка работающего скрипта может быть затруднена), но если вы сейчас немного разбираетесь в программировании и среде Windows, вы можете адаптировать его, чтобы он работал довольно хорошо (то есть он запустит программу после перезапуска / запуска сервера) как вам, вероятно, понадобится в службе. Есть некоторая документация с SrvAny.exe (хотя она может быть немного тупой и трудной для поиска). Однако она бесплатна и построена для Windows, поэтому она должна работать для вас. Я согласен для простоты, что идея запланированной задачи стоит задуматься, поскольку она еще более проста, чем srvany.exe

2 голосов
/ 26 мая 2011

Если вы абсолютно хотите выполнить свой код PowerShell в службе, я думаю, вы можете написать оболочку службы C # для кода PowerShell.

Вы нашли примеры того, как создать службу с C #, и просто вызвать Powershell из C # .Поэтому я удивлен тем, что небольшого PowerShell, ориентированного на SrvAny, пока не существует.

Мой совет, вам лучше переписать свой код на C # как сервис.

1 голос
/ 25 мая 2011

http://www.firedaemon.com/

Will позволит вам начать мусорить в качестве услуги. Есть также бесплатные альтернативы этому приложению, которое делает то же самое.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...