你能在Powershell中编写Windows服务吗?

时间:2011-05-25 13:46:39

标签: powershell windows-services

我在PowerShell中编写了一个循环和检查内容的程序。 我想将其转换为Windows服务。 我已经创建了一个Windows服务(在Admin-> Services中),但我无法启动它。 我很确定我错过了系统需要调用的正确接口,以便启动/停止/暂停/等服务。

我在VB / C#/ MS-lang中可以找到很多例子但是没有关于如何使用PowerShell做到这一点。是否有任何文档(或优选代码示例)可以帮助解决这个问题?

4 个答案:

答案 0 :(得分:4)

这里有一些问题:

  • 您确定需要服务吗?我同意有关使用调度程序运行定期任务的注释。调度程序可以以管理员身份启动任务。
  • 服务调用一组特殊的API与服务控制管理器进行通信,因此无法直接使用普通程序。
  • 服务控制管理器使用CreateProcessAsUser启动服务进程,因此您需要将SCM指向可执行二进制文件,而不是脚本。

如果您不能使用调度程序(虽然我强烈建议您尝试),我想您可以编写一个充当服务的可执行二进制文件。然后它会代表您执行PowerShell和您的脚本。我在想像以前用于Windows Server 2003资源工具包的srvany程序可以为你引导服务。

答案 1 :(得分:3)

您可以使用PowerGUI的编译脚本到服务选项:http://documents.software.dell.com/DOC144271

答案 2 :(得分:2)

如果您绝对想要将PowerShell代码执行到服务中,我认为您可以为PowerShell代码编写C#服务包装器。

您找到了如何使用C#和it's simple to call Powershell from C#创建服务的示例。所以我很惊讶,因为小型的SrvAny面向PowerShell还不存在。

我的建议是,您最好用C#作为服务重写代码。

答案 3 :(得分:1)

http://www.firedaemon.com/

将允许您将任何内容作为服务启动。此应用程序也有免费的替代方案,也是如此。

相关问题