Service 服务的状态检查失败
我正在Windows 2008服务器R2上工作。我发现这个VBScript应该检查服务是启动还是停止 以下是脚本:Service 服务的状态检查失败,service,command-line,vbscript,wmi,windows-server-2008-r2,Service,Command Line,Vbscript,Wmi,Windows Server 2008 R2,我正在Windows 2008服务器R2上工作。我发现这个VBScript应该检查服务是启动还是停止 以下是脚本: 'Declare Variables Dim objWMIService, objProcess, colProcess, Status, strComputer, strService 'Assign Arguments strComputer = WScript.Arguments(0) strService = WScript.Arguments(1) Status =
'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
来自命令行的响应是
…\ServiceCheckScript.vbs(20,1)(null):0x80041017
我看到0x80041017错误是指返回空值的查询结果,但我不确定这是为什么。上述代码存在一些问题:
中,然后
instr(objProcess.Displayname,strService)
,因为WMI查询已指定结果等于此中的服务显示名称,其中Displayname=strService
'Declare Variables
Dim objWMIService, objProcess, colProcess, Status, strComputer, strService
'Verify arguments were passed
if WScript.Arguments.Count = 2 then
'Assign Arguments
strComputer = WScript.Arguments(0)
strService = WScript.Arguments(1)
'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 & "'")
'Ensure there were results returned
if colProcess.count > 0 then
'Check For Running Service
For Each objProcess In colProcess
If objProcess.State = "Running" Then
WScript.Echo "Service: " & UCase(strComputer) & " " & strService & " Running"
else
WScript.Echo "Service: " & UCase(strComputer) & " " & strService & " Not Running"
End If
Next
else
WScript.Echo "Service: " & UCase(strComputer) & " " & strService & " Does not exist"
end if
end if
编辑:只是补充一下,我在Win 8.1和Server 2012R2中验证了上述代码,使用了有效和无效的服务名称。但是,我会添加更多的错误检查,比如验证计算机参数是否有效,以确保WMI查询不会不必要地/莫名其妙地失败 在我的Windows7机器上,它工作正常。由于某些原因,该错误代码提醒我WMI被破坏时返回的错误代码。尝试以下操作:启动>运行>wbemtest(打开它)>连接>连接>查询>[输入]
select*fromWin32\u服务应用。如果在任何时候出现错误(包括单击“连接”时,不包括在查询中键入错误),则WMI已损坏。错误0x8041017表示您的WMI已损坏。仔细检查strService
的值是否与您期望的值相同(例如,使用类似WScript.Echo“-”&strService&“-”
)的语句)。WMI是否使用
来表示当前机器,而不是本地主机
?我想它仍然可以工作,只是一个观察。@Lankymart名字对象允许
,localhost
,IP地址或主机名。此外,名字对象字符串的问题应该会引发不同的错误(在较早的时候也是如此)。