Select 来自具有多个属性的对象 "Invalid query" 错误
Select from Object with multiple attributes "Invalid query" Error
我有一个服务器,上面有多个会话,它们都必须有一个进程运行。
我的程序应该在它停止并且会话在线后立即启动该过程。
我检查了这个过程,如果我没有找到它,我就开始了。问题是,我在所有会话中看到相同的过程。我怎样才能得到我的会话进程而不是整个服务器的进程?
这是我的尝试,但它抛出一个错误:
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 & "\root\cimv2")
if objWMIService.ExecQuery(strWMIQuery).Count > 0 then
'Dont do anything
else
'start process
end if
错误在 "ExecQuery()" 部分(第 18 行)说 "Invalid query"
Lankymart 找到答案:
SessionId 必须是整数,而我的是字符串。通过将值更改为整数,程序就可以运行了。
我要补充的:
ExpandEnvironmentStrings 不提供 SessionId。现在我使用了这个问题的答案中的一个小脚本:
它运行简单的 Powershell 命令以获取 VBS 中的 SessionId。
如果其他人对如何以另一种方式获取 SessionId 有不同的想法,我有兴趣学习并查看它们:)
我有一个服务器,上面有多个会话,它们都必须有一个进程运行。 我的程序应该在它停止并且会话在线后立即启动该过程。 我检查了这个过程,如果我没有找到它,我就开始了。问题是,我在所有会话中看到相同的过程。我怎样才能得到我的会话进程而不是整个服务器的进程? 这是我的尝试,但它抛出一个错误:
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 & "\root\cimv2")
if objWMIService.ExecQuery(strWMIQuery).Count > 0 then
'Dont do anything
else
'start process
end if
错误在 "ExecQuery()" 部分(第 18 行)说 "Invalid query"
Lankymart 找到答案:
SessionId 必须是整数,而我的是字符串。通过将值更改为整数,程序就可以运行了。
我要补充的:
ExpandEnvironmentStrings 不提供 SessionId。现在我使用了这个问题的答案中的一个小脚本:
如果其他人对如何以另一种方式获取 SessionId 有不同的想法,我有兴趣学习并查看它们:)