wmic - 'WMIC process' 输出中没有用户名列

标签 wmic

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

最佳答案

可以在 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

关于wmic - 'WMIC process' 输出中没有用户名列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14660118/

相关文章:

string - 批量 - 获取当前运行系统的系统语言

cmd - 如何在 WMIC 的 WHERE 子句中转义逗号和右括号?

powershell - Powershell中,如何检索现有策略设置(Win8.1/server 2012 r2 core)

windows - 何时以及在批处理文件中的 FOR/F 和 WMIC 中转义什么

windows - 如何在批处理文件中运行 wmic 命令

Windows 事件内存转储

python - 使用Python在远程主机中创建目录

java - 使用 Bat 文件启动 Java 应用程序(如果尚未启动)

windows - 从 WMIC 中批量获取变量的产品名称