从具有多个属性的对象中选择 "Invalid query"错误



我有一个服务器上有多个会话的服务器,所有这些会话都必须运行一个进程。 我的程序应在该过程停止且会话联机后立即启动。 我检查了该过程,如果没有找到它,我就启动它。问题是,我在所有会话中看到相同的过程。如何只获取会话的进程,而不是整个服务器的进程? 这是我的尝试,但它给我抛出了一个错误:

option explicit
DIM strComputer
DIM strProcessName
DIM WshShell
DIM strWMIQuery
DIM strSessionID
Set wshShell = CreateObject("WScript.Shell")
strSessionID= wshShell.ExpandEnvironmentStrings("%SESSIONID%")
strComputer = "." 
strProcessName = "FortiSwitch-Replacer.exe"
strWMIQuery = "Select * from Win32_Process where name like '" & strProcessName & "' AND SessionId like '" & strSessionID & "'"
Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\" & strComputer & "rootcimv2") 
if objWMIService.ExecQuery(strWMIQuery).Count > 0 then
'Dont do anything
else
'start process
end if

错误位于"ExecQuery(("部分(第 18 行(显示"无效查询">

Lankymart找到了答案:

SessionId 需要是一个整数,而我的是一个字符串。通过将值更改为整数,程序将起作用。

我想补充的:

ExpandEnvironmentString不提供 SessionId。现在,我使用了"此问题的答案"中的一个小脚本:是否可以从VBScript运行Powershell代码? 它运行简单的Powershell命令来获取VBS中的SessionId。

如果其他人对如何以另一种方式获取 SessionId 有一些不同的想法,我有兴趣学习并查看它们:)

相关内容

最新更新