Отправлять административные команды в мою службу С# Windows с помощью собственных PowerShell CmdLets

У меня есть приложение С# Windows, которое запускает службу. Я хотел бы использовать PowerShell, чтобы предложить интерфейс управления командной строкой для администрирования моей текущей службы.

С моей точки зрения, я пытаюсь предложить тот же административный интерфейс a la Exchange 2007.

Есть ли у вас предложение или образец кода о том, как запускать/конструировать командлеты управления, чтобы "подключиться" к запущенной службе для запроса или отправки административных команд?

Как я могу получить доступ к внутреннему состоянию выполнения службы из командной строки powershell? Например, я хотел бы реализовать командлет Get-ConnectionsInfo, чтобы узнать, сколько исходящих подключений используется моей службой Windows при выполнении командлета.

Практический пример или веб-ссылка на пример будет более чем приветствуемой.

Спасибо, Роберт

Ответы

Ответ 1

Ключевым моментом здесь является создание API, к которому вы можете получить доступ .Net, тогда вы можете легко перевести вызовы этого API в DLL, которая предоставляет классы, которые являются командлетами PowerShell. Если вы хотите, чтобы кто-то мог удаленно управлять вашим сервисом, я думаю, что лучше всего создать веб-сервис или службу WCF, которая сделает это, а затем вы можете обернуть это в PowerShell. Если вы посмотрите на codeplex, вы найдете несколько примеров администрирования удаленных веб-сервисов, таких как GoGrid и SQL Data Services, которые предоставят вам пример кода, чтобы вы начали.

Ответ 2

Решение будет заключаться в том, чтобы ваша служба Windows обнаружила административный интерфейс через WCF. Команды PowerShell будут использовать эту службу WCF для вывода информации и выполнения действий службы Windows.

Ответ 3

Вспомнил еще один способ разоблачения внутреннего состояния службы Windows. Вы можете предоставлять информацию через WMI, который может быть использован в PowerShell или в командах PowerShell.

Я не уверен, что вы можете сообщить своей службе о выполнении действий через WMI, но вы, по крайней мере, сможете выйти из состояния.

Ответ 4

Третий вариант может заключаться в том, чтобы сделать Windows Service поставщиком контента PowerShell. Однако я никогда не делал этого самостоятельно, поэтому не уверен, подходят ли они для размещения в службе Windows, поскольку служба может не работать постоянно.