【问题标题】:How to get WMI object from a WMI object reference如何从 WMI 对象引用中获取 WMI 对象
【发布时间】:2012-02-10 15:17:07
【问题描述】:

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

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

【问题讨论】:

标签: vbscript wmi citrix


【解决方案1】:

您似乎也无法在此 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 进行修复。

【讨论】:

【解决方案2】:

你可以通过字符串操作来做到这一点,因为“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

【讨论】:

  • 我假设用户名小于 20 个字符
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-08
  • 1970-01-01
相关资源
最近更新 更多