2008-10-25 6 views
9

Tengo una aplicación C# Windows que ejecuta un servicio. Me gustaría aprovechar PowerShell para ofrecer una interfaz de administración de línea de comandos para administrar mi servicio en ejecución.Enviar comandos administrativos a mi C# Windows Service usando los propios PowerShell CmdLets

Desde mi punto de vista, yo estoy tratando de ofrecer la misma interfaz administrativa a la Exchange 2007.

¿Tiene alguna sugerencia o código de ejemplo sobre cómo iniciar/diseñar los cmdlets de administración con el fin de "conectar" al servicio en ejecución para consultar o enviar comandos administrativos?

¿Cómo puedo acceder al estado de tiempo de ejecución interno del servicio desde la línea de comandos de PowerShell? Por ejemplo, me gustaría implementar un cmdlet llamado Get-ConnectionsInfo para averiguar cuántas conexiones salientes usa mi servicio de Windows cuando se ejecuta el cmdlet.

Un ejemplo práctico o enlace web a un ejemplo sería más que bienvenido.

Gracias, Robert

+0

¿Se ejecuta el servicio en la misma máquina en la que se ejecutarán las secuencias de comandos? –

+0

En este caso, sí, pero en otros escenarios podría ejecutarse en un servidor de producción y los cmdlets podrían instalarse en una máquina de "Operaciones" diferente utilizada por los administradores del sistema para administrar de forma remota los servicios. –

Respuesta

1

La clave aquí es comenzar escribiendo una API a la que pueda acceder desde .Net, luego puede envolver fácilmente las llamadas a esta API en una DLL que expone clases que son cmdlets de PowerShell. Si desea que alguien pueda administrar su servicio de forma remota, entonces creo que lo mejor es crear un servicio web o un Servicio WCF que lo haga y luego puede hacerlo en PowerShell. Si echa un vistazo a codeplex, encontrará algunos ejemplos de administración de servicios remotos basados ​​en la web, como GoGrid y SQL Data Services, que le proporcionarán un código de muestra para comenzar.

2

Una solución sería que el servicio de Windows para exponer una interfaz de administración a través de WCF. Sus comandos PowerShell usarían este servicio WCF para extraer información y hacer que el Servicio de Windows realice acciones.

0

Otra forma de exponer el estado interno del Servicio de Windows me vino a la mente. Puede exponer información a través de WMI que se puede consumir desde PowerShell o sus comandos de PowerShell.

No estoy seguro si puede decirle a su servicio que realice acciones a través de WMI, pero al menos podría sacar el estado.

0

Una tercera alternativa podría ser hacer que el servicio de Windows sea un PowerShell content provider. Sin embargo, nunca he creado uno, por lo que no estoy seguro si son adecuados para alojar en un servicio de Windows, ya que es posible que el servicio no se esté ejecutando todo el tiempo.

Cuestiones relacionadas