使用vbscript在Win 8.1 64上重新启动服务

时间:2014-12-12 08:55:08

标签: vbscript windows-services wmi wsh

Synergy 1.6.2似乎与我使用的另一个实用程序(ActualTools)发生冲突,虽然我等待它们解决它的错误,但是一个简单的解决方法是在出现问题时重新启动Synergy服务。为了每次都手动保存,我改编了this脚本。在调用它时,我只是从StopService函数中得到“错误2” - 它对应于“用户没有必要的访问权限”。这看起来很奇怪,因为我可以运行compmgmt.msc(就像我登录的那样,而不是管理员)并在那里手动重启服务而没有任何问题或请求额外的凭据。但是,我不能从命令行使用net stop Synergy - 我得到系统错误5(访问被拒绝)。所以,我想这与权限/特权有关。

我试过在这个剧本中摆弄这一行:

Set cimv2 = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")

通过引用特权列表here - 例如,将(Tcb)添加到安全名字对象中。但我不确定这是正确的方法,而且我无法找到与服务管理相对应的特权。

那么,在这种情况下,有没有办法获得通过脚本停止/启动服务的正确权限?作为参考,这里是完整的脚本:

Dim cimv2, oService, Result

'Get the WMI administration object    
Set cimv2 = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")

'Get the service object
Set oService = cimv2.Get("Win32_Service.Name='Synergy'")

If Not oService.Started Then
    ' the service is Not started
    wscript.echo "Synergy is not started"
    wscript.quit
End If

If Not oService.AcceptStop Then
    ' the service does Not accept stop command
    wscript.echo "Synergy does not accept stop command"
    wscript.quit
End If

'Stop the service
Result  = oService.StopService
If 0 <> Result Then
    wscript.echo "Stop Synergy error: " & Result
    wscript.quit  
End If 

Do While oService.Started And Wait
    'get the current service state
    Set oService = cimv2.Get("Win32_Service.Name='Synergy'")
    Wscript.Sleep 200
Loop   

If oService.Started Then
    ' the service is Not started
    wscript.echo "Synergy is already running."
    wscript.quit 
End If

'Start the service
Result = oService.StartService
If 0 <> Result Then
    wscript.echo "Start Synergy error:" & Result
    wscript.quit  
End If 

Do While InStr(1,oService.State,"running",1) = 0 And Wait 
    'get the current service state
    Set oService = cimv2.Get("Win32_Service.Name='Synergy'")
    Wscript.Sleep 200
Loop   

1 个答案:

答案 0 :(得分:1)

我假设您已激活UAC并希望自动启动此脚本,而不是仅手动运行一次。

据我所知,不可能从脚本中获得完全权限。您可以触发UAC提升提示,但仍需要手动确认。

使此脚本自动以所有权限运行的最简单方法是使用任务计划程序。

在那里,您可以创建在用户登录时运行的计划任务。在底部附近的“常规”选项卡中,您可以指定“以最高权限运行”选项,该选项应足以授予您所需的权限。