“WMIC流程”中没有“用户名”列。产量

时间:2013-02-02 08:33:53

标签: wmic

Windows任务管理器的“进程”选项卡显示包含信息的多个列,其中一列是拥有该进程的用户的用户名。
使用命令WMIC进程(来自管理员启动的cmd.exe)为我提供了相同类型的信息,但我找不到任何用户名列。如何找出哪个用户使用WMIC启动了该过程?

2 个答案:

答案 0 :(得分:4)

可以在win32_process类实例上使用GetOwner方法检索所有者。 我建议使用PowerShell,这很简单:

Get-WmiObject -Class Win32_Process | 
    Select-Object Name, @{ 
        Name = 'Owner'
        Expression = { 
            $_.GetOwner().User 
        }
    }

如果你必须使用wmic,那么你可以通过混合以下结果来破解你的方法:

wmic process get Name

...与call GetOwner例如:

@echo off
echo Domain\User,Machine,ProcessName,ProcessID,WorkingSetSize
(for /f "skip=2 tokens=2 delims=, eol= " %%P in ('wmic process get ProcessId /format:csv') do @call :AddOwner %%P) 2> nul
goto :EOF

:AddOwner
SET Process=%1
(for /f "skip=5 tokens=1,2 delims==; " %%O in ('wmic process WHERE ProcessID^=%Process% Call GetOwner') do @call :BuildOwner %%O %%P) > nul
for /f "skip=1 tokens=* eol= " %%L in ('wmic process WHERE ProcessID^=%Process% GET Name^, ProcessID^, WorkingSetSize /format:csv') do @SET INFO=%%L
echo %DOMAIN%\%USER%,%INFO%
goto :EOF

    :BuildOwner
    SET PARAM=%1
    SET VALUE=%~2
    IF [%PARAM%]==[Domain] SET DOMAIN=%VALUE%
    IF [%PARAM%]==[User] SET USER=%VALUE%
    goto :EOF

答案 1 :(得分:3)

获取所有 taskeng.exe 进程的所有者(各个任务的Windows任务计划程序进程):

wmic process where "name='taskeng.exe'" call GetOwner