9

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

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

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

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

一个实际的例子或一个例子的网络链接将非常受欢迎。

谢谢,罗伯特

4

4 回答 4

2

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

于 2008-10-26T09:25:51.760 回答
1

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

于 2008-11-03T03:45:54.510 回答
0

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

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

于 2008-10-26T11:08:17.933 回答
0

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

于 2008-10-26T11:56:45.887 回答