运行powershell.exe作为服务,或者帮我find一个替代解决scheme

简介:无论用户是否login,我都需要在后台持续运行Powershell脚本。 这是在Server 2012上。

我运行了以下命令:

sc.exe create "MyService" binPath="powershell.exe 'c:\myFolder\myScript.ps1'" 

该命令成功运行。 但是,当我开始这个服务的时候,它立刻就出错了,服务没有及时响应。 我知道,将Powershell作为服务运行是违背最佳实践的,但这甚至有可能吗?

我得到的最好的build议是运行这个脚本作为一个计划任务,而不是一个服务。 这是有道理的,但我的安全人员已启用GPO选项“networking访问:不允许存储密码和凭据”。 当没有用户login时,这可以防止任务pipe理器使用正确的凭据运行任务。

我为什么要这样做? 我们有一个只能以窗口模式(而不是服务)运行的旧程序,并将stdout和stderr都打印到屏幕上。 这意味着(a)用户必须每天24小时login到该服务器,并且(b)没有日志文件。 如果在发生错误时没有注意屏幕,则错误将向右滚动。 可执行文件在新窗口中启动,因此redirect操作符对此没有影响。

当我们replace这个程序时,我需要它(a)在用户注销或者重新启动后始终运行,(b)把stdout和stderr写入日志文件。

我用Powershell简单的Powershell脚本解决了第二个问题:

 "Program started at $(get-date)" | Out-File c:\myFolder\CrapProgram.log -append & "c:\myFolder\CrapProgram.exe" | Tee-Object c:\myFolder\CrapProgram.log 

这将启动Powershell中的程序。 它的输出既指向Powershell窗口又指向日志文件。

现在,如果我可以让这个脚本在没有人login的时候运行,并且让它在电脑启动时开始,并且让我的低级支持团队可以轻松停止并轻松启动,那么我会做生意。

这就是为什么我要将Powershell注册为服务。 如果有更好的解决办法,让我知道。

您可以尝试将其作为计划任务运行,并设置用户以“NT Authority \ System”身份运行任务。 您不必为该帐户input密码。