如何从WMI对象引用中获取WMI对象

时间:2012-02-10 15:17:07

标签: vbscript wmi citrix

我正在使用WMI做一些Citrix工作,特别是搜索特定用户注销。首先,我必须枚举一个名为MetaFrame_Session的对象,它列出了当前的会话,然后我必须检索一个名为Citrix_User的对象,该对象具有用户名。

Session对象包含对User对象的引用,但我对WMI不是很熟悉,而且我对如何从引用获取实际对象感到困惑。如何在VBScript中执行此操作的示例将非常有用

2 个答案:

答案 0 :(得分:0)

似乎您无法在此other forum上找到答案,但是使用WMI注销Citrix会话的代码由here发送Haydn Davies,如下所示Citrix服务器:

' Logoff Disconnected Sessions
' If you want to logoff active sessions as well, change the query to include
' cActive
On Error Resume Next

Const cActive = 0
Const cDisconnected = 4
Const strComputer = "."

Set objWMICitrix = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\citrix")
Set colItems = objWMICitrix.ExecQuery ("Select * from Metaframe_Session Where sessionstate = " & cDisconnected)

For Each objItem in colItems
if (objItem.SessionID > 0) and (objItem.SessionID < 65530) then
objItem.Logoff
end if
Next

Set objWMICitrix = Nothing

有关如何获取Citrix VirtualIP的代码,请参阅here,因为它可能有助于提供技术参考。此外,如果您发现服务器上的WMI已损坏,请参阅here进行修复。

答案 1 :(得分:0)

你可以用字符串操作来做到这一点,因为“SessionUser”是一个字符串

dim name
For Each objItem in colItems
name=left(Mid(objItem.SessionUser,InStr(objItem.SessionUser,"=")+2,20),InStr(Mid(objItem.SessionUser,InStr(objItem.SessionUser,"=")+2,20),",")-2)
 if (name="YOUR_SEARCH_NAME") and (objItem.SessionID < 65530) then
objItem.Logoff
end if