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

9
我有一个运行服务的C# Windows应用程序,我希望利用PowerShell提供命令行管理接口来管理我的运行中服务。从我的角度来看,我正在尝试提供类似于Exchange 2007的管理界面。您有关于如何开始/设计管理cmdlet以“连接”到正在运行的服务以查询或发送管理命令的建议或示例代码吗?我该如何从PowerShell命令行访问服务的内部运行时状态?例如,当执行cmdlet“Get-ConnectionsInfo”时,我想知道我的Windows服务正在使用多少出站连接。如果您能提供实际示例或示例网址,那就更好了。谢谢,Robert

服务是否在执行脚本的同一台机器上运行? - Scott Saad
在这种情况下是的,但在其他情况下,它可能会在生产服务器上运行,并且 cmdlet 可能会安装在不同的“操作”机器上,供系统管理员远程管理服务使用。 - Robert Mircea
4个回答

2

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


1
关键在于先编写一个可以从.Net访问的API,然后您可以轻松地将对此API的调用封装到一个公开类的DLL中,这个DLL会暴露出PowerShell cmdlet。如果您想让某人能够远程管理您的服务,那么我认为最好的方法可能是创建一个Web服务或WCF服务来完成这个任务,然后您可以将其包装在PowerShell中。如果您浏览codeplex,则会找到一些示例,这些示例可以管理远程基于Web的服务,例如GoGrid和SQL Data Services,这些示例代码可以帮助您入门。

0

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

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


0
第三种选择可能是将Windows服务作为PowerShell内容提供程序。但是我从未自己制作过,所以我不确定它们是否适合在Windows服务中托管,因为服务可能并非始终运行。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接