我目前正在为 Windows 编写服务,并且经常对其进行调整并将其更新到我的测试计算机上。我想编写一个脚本来自动停止服务,更新 exe 并重新启动服务。然而,它是我遇到麻烦的停止和启动部分。
我连接的计算机不在域中,我们不共享用户名和密码。我认为我最好的选择是这样做sc.exe \\testsvr stop "myService"
,因为我没有域或共享用户名和密码,这给了我一个“访问被拒绝”的消息。
我可以很容易地添加用户,但是当我无法更改用户时,我希望这是一种学习体验。
我目前正在为 Windows 编写服务,并且经常对其进行调整并将其更新到我的测试计算机上。我想编写一个脚本来自动停止服务,更新 exe 并重新启动服务。然而,它是我遇到麻烦的停止和启动部分。
我连接的计算机不在域中,我们不共享用户名和密码。我认为我最好的选择是这样做sc.exe \\testsvr stop "myService"
,因为我没有域或共享用户名和密码,这给了我一个“访问被拒绝”的消息。
我可以很容易地添加用户,但是当我无法更改用户时,我希望这是一种学习体验。
为了完整起见,如果您只想使用现有的 Windows 工具来执行此操作,您可以首先建立与远程机器的 IPC 连接(以在该机器上建立安全令牌),然后使用“SC”命令:
这将让您控制远程机器上的服务,而不管两台机器的工作组/域成员身份的组合。
我会看一下Microsoft Sysinternals 中的PsService(它是 Mark Russinovich 编写的优秀工具集的一部分)。
直接从网站:
对于
<command>
,您可以使用start
、stop
或restart
作为最常用的选项。这个脚本的好处是它不依赖于两台机器是同一域的成员或具有任何其他信任。从未在非域配置中亲自尝试过,但可能使用“RunAs”运行 SC.exe 并使用目标计算机的凭据?
Runas /user:TargetComputerName\TargetAccountName "sc.exe \\testsvr stop ""myService"""
您可能想查看 Powershell 2.0。它可能将此功能内置为一种 RDP,因此您不需要域,而是启用连接并打开一些端口。在这里寻找一个简单的描述和一些你可以谷歌的关键词。
在 DOMAIN 环境中,您可以使用 NET USE 命令,前提是已将适当的用户权限授予运行脚本的登录用户。PowerShell 可能是您拥有的最强大的选项,但如果您运行的是较旧的 Microsoft 操作系统,则在运行某些 PowerShell 命令时可能会遇到一些问题。如果一切都是 Windows 2008 或更高版本,我肯定会使用 PowerShell。
如果这不是一个选项,我已经使用 PSTools 包取得了巨大的成功。如果您确实使用此选项,正如 Evan 之前提到的,您可能应该熟悉同一软件包中的 pskill 实用程序。当您远程处理某些服务时,它们不会优雅地死掉,而这个小实用程序非常适合杀死它们。
出于好奇,您用什么脚本语言编写代码?VB脚本?批?珀尔?