控制另一台计算机上的服务

控制另一台计算机上的服务

我目前正在为 Windows 编写一个服务,并且经常对其进行调整并将其更新到我的测试计算机上。我想编写一个脚本来自动停止服务、更新 exe 并重新启动服务。然而,正是停止和启动部分让我遇到了麻烦。

我连接的计算机不在域中,我们也没有共享用户名和密码。我认为最好的办法是这样做,sc.exe \\testsvr stop "myService"但是因为我没有域或共享用户名和密码,所以这给了我一个“访问被拒绝”的消息。

我可以非常轻松地添加用户,但我希望这能成为我无法更改用户时的学习经验。

答案1

我会看看服务端来自 Microsoft 的 Sysinternals(它是 Mark Russinovich 编写的优秀工具集的一部分)。

直接来自网站:

Usage: psservice [\\computer [-u username] [-p password]] <command> <options>

对于<command>,您可以使用startstoprestart作为最常用的选项。此脚本的优点在于,它不依赖于两台计算机是否属于同一域或具有任何其他信任。

答案2

只是为了完整性,如果您只想使用普通的 Windows 工具执行此操作,您可以先与远程机器建立 IPC 连接(在该机器上建立安全令牌),然后使用“SC”命令:

net use \\remote\IPC$ /user:local-username-on-remote-machine passowrd
sc \\remote stop service-name
net use \\remote\IPC$ /delete

这样您就可以控制远程计算机上的服务,而不管两台机器的工作组/域成员身份组合如何。

答案3

从未亲自在非域配置中尝试过它,但也许可以使用“RunAs”运行 SC.exe 并使用目标计算机的凭据?

Runas /user:TargetComputerName\TargetAccountName "sc.exe \\testsvr stop ""myService"""

答案4

在域环境中,您可以使用 NET USE 命令,前提是已向运行脚本的登录用户授予了适当的用户权限。PowerShell 可能是您拥有的最强大的选项,但如果您运行的是较旧的 Microsoft 操作系统,则在运行某些 PowerShell 命令时可能会遇到一些问题。如果一切都是 Windows 2008 或更新版本,我肯定会选择 PowerShell。

如果那不是一个选项,我已经成功地使用了 PSTools 软件包。如果您确实选择了此选项,正如 Evan 之前提到的,您可能应该熟悉同一软件包中的 pskill 实用程序。有些服务在您远程操作时不会正常终止,而这个小实用程序非常适合终止它们。

出于好奇,您使用什么脚本语言编写此代码?VBScript?BATch?Perl?

相关内容