从Linux机器重新启动Windows服务

我们有一个糟糕的传统Windows应用程序( 这里已经讨论过 )将内容从Windows主机复制到许多Linux主机。 我们在几个盒子上运行它的几个实例。 每个实例都有自己的.ini文件,其中包含一个列表目标服务器。 我们经常需要更改这些文件的内容,并重新启动这个过程,这个过程由我们的操作团队亲自完成。 我想用一个简单的基于Web的实用程序(在Linux主机上运行)replace它,它允许用户生成configuration文件,将它们发送到主机并重新启动服务。 生成文件很容易 – 我可能会使用Perl和模板工具包 – 因为服务器导出他们的configuration目录复制数据也相对容易。

我有什么select重新启动Windows服务? Win32::Service ? 我还没有机会看很远,所以如果你说“ x::y使这个容易,但要小心z”,你会为我节省很多时间。 这甚至有可能吗? 另外,也许你可以build议一个更好的方法来解决这个问题(更换软件不幸的是不是一个!)我不想懒惰,只是避免浪费时间摆弄模块,可能不会做我想做的事情。

Ubuntu包含一个实用程序,可以帮助管理Windows系统, WMI ClientWMI Client 。 有了适当的权限, WMI可以轻松停止和启动Windows服务。

(手册页中的示例,而不是服务控制。)

wmic -U [domain /] adminuser%password // host“select * from Win32_ComputerSystem”

Winexe可以做到这一点; 这是Sysinternal非常有用的PsExec工具的Linux。

我上一次使用Winexe是几年前,所以这可能已经改变了,但当时有一些警告:

  • 终端处理没有很好地实现,所以键入非字母数字键到远程命令可能会很奇怪。 如果你是脚本,这不应该是一个问题。
  • 像PsExec一样,Winexe通过在Windows机器上安装一个服务来运行,然后告诉该服务运行一个命令。 与PsExec不同的是,之后并没有清理这个服务。 当Winexe没有做任何事情时,安装的服务是无害的,不会运行,所以这是非常无害的。

你可以使用Winexe

 $ winexe -U HOME/Administrator%'Pass123' //host 'cmd /C net stop wuauserv && net start wuauserv && echo AutoUpdates service restarted' 

密码写在'' < – 手动不要说这个,但它的工作。

您可以使用以下命令从Windows命令行重新启动Windows服务:

 net stop service_name net start service_name 

您可以通过单击“服务”窗口中的属性来查找服务名称。

这可能会使你编写脚本。

最具体的方法是建立一个web服务来处理ini的更新和重新启动服务,但是鉴于这是一个内部的解决方案,可能是巨大的矫枉过正。

我通常远程启用telnet,telnet到框,并使用“net stop ServiceName”和“net start ServiceName”。