【发布时间】:2015-12-29 21:23:43
【问题描述】:
我正在使用 Windows 2008 Server R2。我发现这个 VBScript 应该检查服务是启动还是停止。
这是脚本:
'Declare Variables
Dim objWMIService, objProcess, colProcess, Status, strComputer, strService
'Assign Arguments
strComputer = WScript.Arguments(0)
strService = WScript.Arguments(1)
Status = False
'Check For Arguments - Quit If None Found
If Len(strService) < 1 Then
Wscript.echo "No Arguments Entered - Exiting Script"
WScript.Quit
End If
'Setup WMI Objects
Set objWMIService = GetObject("winmgmts:"& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colProcess = objWMIService.ExecQuery ("SELECT DisplayName, Status, State FROM Win32_Service WHERE DisplayName = '" & strService & "'")
'Check For Running Service
For Each objProcess In colProcess
If InStr(objProcess.DisplayName, strService) > 0 And objProcess.State = "Running" Then
Status = True
End If
Next
If Status = True Then
WScript.Echo "Service: " & UCase(strComputer) & " " & strService & " Running"
Else
WScript.Echo "Service: " & UCase(strComputer) & " " & strService & " Not Running"
End If
通过命令行我这样调用脚本
CSCRIPT ServiceCheckScript.vbs LOCALHOST "Print Spooler"
命令行的响应是
...\ServiceCheckScript.vbs(20, 1) (null): 0x80041017
我看到 0x80041017 错误是指查询返回空值的结果,但我不确定为什么会这样。
【问题讨论】:
-
在我的 Windows 7 机器上运行良好。出于某种原因,错误代码提醒我 WMI 损坏时返回的错误代码。试试这个:开始>运行> wbemtest(打开它)>连接>连接>查询>[类型]
select * from win32_service>应用。如果您在任何时候遇到错误(包括单击“连接”时,不包括您在查询中打错字),那么您的 WMI 已损坏。 -
错误 0x8041017 表示您的 query is invalid.仔细检查
strService的值是否符合您的预期(例如,使用WScript.Echo "-" & strService & "-"之类的语句)。 -
WMI 不使用
.来表示当前机器而不是localhost?猜猜它应该仍然有效,只是一个观察。 -
@Lankymart 绰号允许
.、localhost、IP 地址或主机名。此外,名字对象字符串的问题应该引发不同的错误(在更早的时候也是如此)。
标签: service command-line vbscript wmi windows-server-2008-r2