使用自己的PowerShell CmdLets将管理命令发送到我的C#Windows服务

时间:2008-10-25 22:09:18

标签: c# powershell cmdlets

我有一个运行服务的C#Windows应用程序。我想利用PowerShell来提供命令行管理界面来管理我正在运行的服务。

从我的角度来看,我试图提供与Exchange 2007相同的管理界面。

您是否有任何关于如何启动/设计管理cmdlet的建议或示例代码,以便“连接”到正在运行的服务以查询或发送管理命令?

如何从powershell命令行访问服务的内部运行时状态?例如,我想实现一个名为Get-ConnectionsInfo的cmdlet,以了解我的Windows服务在执行cmdlet时使用的出站连接数。

一个实例的示例或网站链接将受到欢迎。

谢谢, 罗伯特

4 个答案:

答案 0 :(得分:2)

解决方案是让您的Windows服务通过WCF公开管理界面。您的PowerShell命令将使用此WCF服务提取信息并使Windows服务执行操作。

答案 1 :(得分:1)

这里的关键是首先编写一个可以从.Net访问的API,然后您可以轻松地将对此API的调用包装到一个暴露PowerShell cmdlet类的DLL中。如果您希望某人能够远程管理您的服务,那么我认为最好的办法是创建一个Web服务或WCF服务来执行此操作,然后您可以将其包装在PowerShell中。如果您查看codeplex,您将找到一些管理远程基于Web的服务的示例,如GoGrid和SQL Data Services,它们将为您提供一些示例代码以帮助您入门。

答案 2 :(得分:0)

我想到了另一种暴露Windows服务内部状态的方法。您可以通过WMI公开信息,这些信息可以从PowerShell或PowerShell命令中使用。

我不确定您是否能告诉您的服务通过WMI执行操作,但您至少可以撤出状态。

答案 3 :(得分:0)

第三种选择可能是使Windows服务成为PowerShell content provider。但是我从来没有自己制作过,所以我不确定它们是否适合在Windows服务中托管,因为该服务可能不会一直运行。