有一个名为ScreenConnect的软件产品允许您将其安装在您自己的服务器上,并通过此安装设置有人值守和无人值守的远程访问会话。我和很多客户一起使用它,但是在那些客户端的机器上设置无人值守的安装要容易得多,我将需要多次访问。但是,有些客户希望能够控制我何时可以远程访问,何时无法访问,而且由于软件产品还没有内置此功能,我想我只需创建两个vbscript文件桌面 - 如果服务打开则关闭服务(反之亦然),另一个将服务的启动类型更改为自动(如果设置为手动),反之亦然。我能够轻松地获得启动/停止服务vbscript文件:
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colRunningServices = objWMIService.ExecQuery _
("select State from Win32_Service where Name LIKE '%ScreenConnect%'")
For Each objService in colRunningServices
Wscript.Echo "State: " & objService.State
If objService.State <> "Running" Then
errReturn = objService.StartService()
Wscript.Echo "FalconRemote Started"
Else
errReturn = objService.StopService()
Wscript.Echo "FalconRemote Stopped"
End If
Next
但是,对于我的生活,我无法在Windows XP上使用自动/手动启动类型的vbscript。如果我将它简化为骨骼并且只是想让vbscript告诉我启动的当前状态(即手动,自动,禁用),这显然是vbscript知道所以它可以根据那些信息,那就是我放在一起的东西:
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colRunningServices = objWMIService.ExecQuery _
("select StartMode from Win32_Service where Name LIKE '%ScreenConnect%'")
For Each objService in colRunningServices
Wscript.Echo "StartMode: " & objService.PathName
Next
但是,返回“未知”而不是“手动”,“禁用”或“自动”等可接受的值 - 我不知道为什么它会返回“未知”!!!
我已经尝试将第五行更改为:
("select * from Win32_Service where Name LIKE '%ScreenConnect%'")
或者
("select StartMode from Win32_Service where DisplayName LIKE '%ScreenConnect%'")
但它似乎没有效果。
如果我在上面的脚本中为其他服务更改ScreenConnect,例如helpsvc(使用Name)或Help and Support(使用DisplayName),它可以工作!它在Windows 7机器上运行良好。为什么它不适用于Windows XP机器?有任何想法吗????我尝试安装Mozilla Firefox 20(使用Mozilla维护服务),它可以正常读取该服务的启动模式(它没有内置到WinXP中),那么为什么不读取该服务的启动模式呢?
非常感谢任何帮助!
感谢。
答案 0 :(得分:0)
我刚刚遇到这个问题。
我不确定Windows服务是如何处于这种状态的,但似乎Windows服务处于“未知”状态。
例如,可能是文件系统上不再存在可执行文件,但Windows服务(注册表)条目仍然(部分)存在。
在任何情况下,只需删除Windows服务条目即可解决问题。
可以使用以下命令行删除Windows服务,例如:
sc delete "ScreenConnect service name"