-- DL
答:
您好,DL。是的,我们可以帮助您。确定进程是在哪个帐户下运行的,实际上相当简单,只是如何着手执
行此操作并不是特别显而易见的。如果您与大多数人一样,那么您可能会通过扫描 Win32_Process 类的
属性来查找名为 Account 或 UserName 或类似的属性。您很有可能找不到。出现这种情况的原因是:
Win32_Process 没有可以告诉您进程在哪个帐户下运行的属性。
您需要使用“GetOwner”方法来捕捉此信息。下面这个脚本可以告诉您 Microsoft Word (Winword.exe)
在哪个帐户下运行:
strComputer = "."Set objWMIService = GetObject("winmgmts:" & strComputer & "rootcimv2")
Set colProcessList = objWMIService.ExecQuery _ ("Select * from Win32_Process Where Name =
'Winword.exe'")
For Each objProcess in colProcessList objProcess.GetOwner strUserName, strUserDomain
Wscript.Echo "Process " & objProcess.Name & " is owned by " _ & strUserDomain & "" &
strUserName & "."Next
我们最感兴趣的是下面这行代码:
objProcess.GetOwner strNameOfUser, strUserDomain
我们在此所做的就是调用“GetOwner”方法。GetOwner 返回两个“输出参数”,一个返回负责该进程的
用户的名称,一个返回该用户所属的域。为捕获这两个输出参数,我们需要为 GetOwner 方法提供两个变
量。在这个示例脚本中,我们使用了两个分别叫做 strUserName 和 strUserDomain 的变量。名称可以随
意选择;您可以将变量称为 A 和 B 或 X 和 Y 或任何其他您想要的名称。
不过,变量的顺序不能随意设置:返回的第一个值总是用户名,第二个值总是域。这意味着,如果您希望
用 X 表示用户名,用 Y 表示域,那么您要确保您的代码像下面这行代码一样:
objProcess.GetOwner X, Y
调用 GetOwner 之后,我们就可直接回显进程名和所有者。请注意,我们可以稍微来点儿花样儿 – 使用
域用户格式。这样,我们就可以回显类似于“fabrikamkenmyer”的名称。
下面附带提供了另一个脚本,该脚本可以列出计算机上的所有进程以及各个进程的所有者:
strComputer = "."Set objWMIService = GetObject("winmgmts:" & strComputer & "rootcimv2")
Set colProcessList = objWMIService.ExecQuery _ ("Select * from Win32_Process")
For Each objProcess in colProcessList objProcess.GetOwner strUserName, strUserDomain
Wscript.Echo "Process " & objProcess.Name & " is owned by " _ & strUserDomain & "" &
strUserName & "."Next
可能有人感到奇怪,2005 年 1 月 3 日正好是 Microsoft 员工的正式休息日。那么今天为什么会有“嗨
,Scripting Guy!”专栏?这只能是由于 Microsoft 脚本专家表现出来的对工作的难以置信的奉献和投
入精神。或者,也可能是由于某个脚本专家 – 还说不出他或她的名字 – 没有意识到今天是假日,所以







