将 powershell.exe 作为服务运行,或者帮助我找到替代解决方案

将 powershell.exe 作为服务运行,或者帮助我找到替代解决方案

摘要:无论用户是否登录,我都需要在后台连续运行 Powershell 脚本。这是在 Server 2012 上。

我运行了以下命令:

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

此命令已成功运行。但是,当我启动服务时,它立即出错,显示“服务未及时响应”。我知道将 Powershell 作为服务运行违反最佳实践,但这可能吗?

我得到的最好建议是将此脚本作为计划任务而不是服务运行。这很有道理,但我的安全人员已启用 GPO 选项“网络访问:不允许存储密码和凭据”。这会阻止任务管理器在没有用户登录时使用正确的凭据运行任务。

我为什么要这样做?我们有一个旧程序,它只在窗口模式下运行(而不是作为服务),并将 stdout 和 stderr 打印到屏幕上。这意味着 (a) 用户必须每天 24 小时登录此服务器,并且 (b) 没有日志文件。如果在发生错误时您没有盯着屏幕,错误就会滚过您。可执行文件在新窗口中启动,因此重定向运算符对其没有影响。

当我们替换这个程序时,我需要它(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 窗口和日志文件。

现在,如果我可以让这个脚本在无人登录时运行...并让它在计算机启动时启动...并让我的下级支持团队能够轻松地停止和启动它,我就可以开始工作了。

这就是我尝试将 Powershell 注册为服务的原因。如果有更好的解决方案,请告诉我。

答案1

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

相关内容