如何创建Windows服务以运行PowerShell脚本?

16

我有一个无限循环的PowerShell(用于测试目的)脚本,我希望将其作为服务在Windows Server 2008 R2(标准版)中运行。

我正在使用以下命令创建Windows服务,

sc.exe create "My PS1Service" binPath= "powershell.exe -NoLogo -Path D:\TEST\test.ps1"

结果是 [SC] CreateService SUCCESS

但当我尝试运行服务My PS1Service时,它返回以下错误

Windows Could not srart the My PS1Service service on Local
Computer
Error 1053: The service did not respond to the start or control
request in a family

有人可以帮忙吗!!!


请查看: get-help New-Service。同时请指定 powershell.exe 的完整路径。 - arco444
你不能将任何可执行文件直接运行为服务。它必须响应服务控制管理器的请求。通常,在C#中,这需要从System.ServiceProcess.ServiceBase继承。你在test.ps1中做了类似的事情吗? - Mike Zboray
@mikez ,不,我没有做任何类似于C#的东西。这只是一个PS1脚本,它有无限循环并将数字写入文件。 - HamTheAstroChimp
尝试创建一个以本地ID运行的服务。同时检查执行策略。 - Chand
我可以很快地使用nssm从.ps1安装服务。这比WINSW容易得多,我不明白为什么nssm会有负面评价。请问是否有人能够对此发表评论?nssm可以在chocolatey存储库中获取,因此安装过程非常轻松。 - chotkery
4个回答

6
由于文章长度较长,我不想将它们粘贴到答案中。请查看这篇文章,这是我发现的关于powershell服务的最全面的信息来源:https://msdn.microsoft.com/en-us/magazine/mt703436.aspx。该文章链接到一个示例powershell服务:http://jf.larvoire.free.fr/progs/PSService.ps1。我没有成功地修改它,因为阅读和理解它需要比使用不同的方法更长的时间来完成我的用例,但如果我将来需要在powershell中创建服务,我肯定会返回这个方法。此外,请参考这个链接:https://www.sapien.com/blog/2017/07/12/write-a-windows-service-in-powershell/

我通常不会在答案中发布链接,因为它们容易失效,但这些文章非常长。 - Gostega
3
该杂志包含使用bit.ly的失效链接。这是法国人的存储库:https://github.com/JFLarvoire/SysToolsLib/blob/master/PowerShell/PSService.ps1 - Dimas
你不需要发布所有的内容,但你应该发布基本信息。 - FreeSoftwareServers
谢谢。这是一个非常有用、简单设置的基础设施。@Dimas,GitHub链接非常宝贵。 - undefined

3
我一直在寻找一种合适的方法将PS1转化为服务。我发现最简单的方法是使用Winsw:https://github.com/kohsuke/winsw 。这个方法非常好用。

0

我随后使用了它,它运行良好且易于使用。 - Gostega

-6

您可以按照以下步骤进行创建:

  1. 首先进入PowerShell脚本所在的路径。
  2. 然后运行以下命令: powershell.exe -ExecutionPolicy UnRestricted -File .\filename.ps1

这在任何情况下都不起作用。 - Bbb

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