我目前正在为Windows编写一个服务,我经常使用它来更新它到我的testing计算机上。 我想编写一个脚本,自动停止服务,更新exe和重新启动服务。 但是,它停止和开始我有麻烦的一部分。
我连接的计算机不在域上,我们不共享用户名和密码。 我想我最好的select是做sc.exe \\testsvr stop "myService"但是因为我没有一个域或共享的用户名和密码这给了我一个“访问被拒绝”的信息。
我可以非常容易地添加用户,但我希望这是一个学习体验,当我无法更改用户。
我会从微软的Sysinternals(它是由Mark Russinovich编写的优秀工具集的一部分)看看PsService 。
直接从网站:
Usage: psservice [\\computer [-u username] [-p password]] <command> <options>
对于<command> ,可以使用start , stop或restart作为最常用的选项。 这个脚本的好处在于,它不依赖于两台机器是同一个域的成员或者有任何其他的信任。
为了完整起见,如果只想使用库存的Windows工具,可以先build立到远程机器的IPC连接(在该机器上build立安全令牌),然后使用“SC”命令:
net use \\remote\IPC$ /user:local-username-on-remote-machine passowrd sc \\remote stop service-name net use \\remote\IPC$ /delete
这将允许您控制远程计算机上的服务,而不pipe这两台计算机的工作组/成员身份的组合如何。
从来没有亲自试过它在一个非域configuration,但也许运行“RunAs”的SC.exe和使用目标计算机的凭据?
Runas /user:TargetComputerName\TargetAccountName "sc.exe \\testsvr stop ""myService"""
你可能想看看Powershell 2.0。 它可能将这种function作为一种RDP内置,因此您不需要域,而是启用连接并打开一些端口。 在这里寻找一个轻微的描述和一些关键字,你可以谷歌。
在DOMAIN环境中,您可以使用NET USE命令,假定已授予您运行该脚本的login用户的适当用户权限。 PowerShell可能是您拥有的最强大的选项,但是如果您运行的是较旧的Microsoft操作系统,那么运行某些PowerShell命令可能会遇到一些问题。 如果一切都是Windows 2008或更新,我一定会去与PowerShell。
如果这不是一个选项,我已经在PSTools包中取得了巨大的成功。 如果你按照Evan的说法去做这个select,那么你应该在同一个包中熟悉一下pskill工具。 有些服务不会在你远程捣乱的时候优雅地死去,而这个小实用程序对杀死它们来说是非常棒的。
出于好奇,你在编写这个脚本语言? VBScript的? 批量? Perl的?