Отправлять административные команды в мою службу С# 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, поскольку служба может не работать постоянно.