【问题标题】:WMI Process Owner when process finishes进程完成时的 WMI 进程所有者
【发布时间】:2011-12-29 23:57:35
【问题描述】:

我有以下代码,我试图在其中收集有关 Windows Server 2003 中进程的丰富信息。当我试图为在初始 WMI 查询和调用之间完成的进程拉回进程所有者时,会出现问题得到主人。如果该过程同时完成,则会引发错误并且脚本停止。我宁愿只检查进程是否不可用,如果不可用则不输出到控制台。我查看了参考资料,似乎没有合适的方法。非常感谢任何帮助。

引发的错误是...

getProcessInfo2.vbs(42, 5) SWbemObjectEx: Not found

strComputer = "." 
Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\"_
     & strComputer & "\root\CIMV2") 
Set colItems = objWMIService.ExecQuery( _
    "SELECT * FROM Win32_Process",,48) 

For Each objItem in colItems 

    'Calculated Fields
    sngProcessTime = ( CSng(objItem.KernelModeTime) + CSng(objItem.UserModeTime)) / 10000000


    Wscript.Echo
    Wscript.Echo "ProcessId                  : " & objItem.ProcessId
    Wscript.Echo "CommandLine                : " & objItem.CommandLine
    Wscript.Echo "CreationDate               : " & objItem.CreationDate
    Wscript.Echo "HandleCount                : " & objItem.HandleCount
    Wscript.Echo "Name                       : " & objItem.Name
    Wscript.Echo "PageFaults                 : " & objItem.PageFaults
    Wscript.Echo "PageFileUsage              : " & objItem.PageFileUsage
    Wscript.Echo "ParentProcessId            : " & objItem.ParentProcessId
    Wscript.Echo "PeakPageFileUsage          : " & objItem.PeakPageFileUsage
    Wscript.Echo "PeakVirtualSize            : " & objItem.PeakVirtualSize
    Wscript.Echo "PeakWorkingSetSize         : " & objItem.PeakWorkingSetSize
    Wscript.Echo "Priority                   : " & objItem.Priority
    Wscript.Echo "QuotaNonPagedPoolUsage     : " & objItem.QuotaNonPagedPoolUsage
    Wscript.Echo "QuotaPagedPoolUsage        : " & objItem.QuotaPagedPoolUsage
    Wscript.Echo "QuotaPeakNonPagedPoolUsage : " & objItem.QuotaPeakNonPagedPoolUsage
    Wscript.Echo "QuotaPeakPagedPoolUsage    : " & objItem.QuotaPeakPagedPoolUsage
    Wscript.Echo "ReadOperationCount         : " & objItem.ReadOperationCount
    Wscript.Echo "ReadTransferCount          : " & objItem.ReadTransferCount
    Wscript.Echo "ThreadCount                : " & objItem.ThreadCount
    Wscript.Echo "VirtualSize                : " & objItem.VirtualSize
    Wscript.Echo "WriteOperationCount        : " & objItem.WriteOperationCount
    Wscript.Echo "WriteTransferCount         : " & objItem.WriteTransferCount
    Wscript.Echo "CPUTime                    : " & sngProcessTime

    Dim Return
    Return = objItem.GetOwner(strNameOfUser)
    If Return <> 0 Then strNameOfUser = "unavailable"

    Wscript.Echo "Owner                      : " & strNameOfUser    
Next

【问题讨论】:

    标签: process vbscript wmi


    【解决方案1】:

    您只需要检查您的集合项是否仍包含有效的 WMI 对象引用。如果 WMI 对象不再存在,您的引用将变为空。

    For Each objItem in colItems
        If IsObject(objItem) Then
            ...
        End If
    Next
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-05-27
      • 2022-01-23
      • 2021-03-30
      • 1970-01-01
      • 2013-08-11
      • 2013-02-13
      相关资源
      最近更新 更多