用于在Windows服务器中识别进程名称,内存,帐户所有者的脚本

时间:2014-02-24 15:48:19

标签: windows powershell wmi win32-process

我在Windows机器上运行Web服务,我想知道每个用户在访问此Web服务时使用的内存。 在任务管理器中,我可以看到ProcessName,UserName,Memory。 有没有办法通过运行PowerShell或批处理脚本来获得相同的东西?

请帮忙。

2 个答案:

答案 0 :(得分:1)

这可能是一种更简洁的方法,但这是一个例子:

$users = @{}
$process = Get-Process

Get-WmiObject Win32_SessionProcess | ForEach-Object {

    $userid = (($_.Antecedent -split “=”)[-1] -replace '"'  -replace “}”,“”).Trim()
    if($users.ContainsKey($userid))
    {
        #Get username from cache
        $username = $users[$userid]
    } 
    else 
    {
        $username = (Get-WmiObject -Query "ASSOCIATORS OF {Win32_LogonSession.LogonId='$userid'} WHERE ResultClass=Win32_UserAccount").Name
        #Cache username
        $users[$userid] = $username
    }

    $procid = (($_.Dependent -split “=”)[-1] -replace '"'  -replace “}”,“”).Trim()
    $proc =  $process | Where-Object { $_.Id -eq $procid }

    New-Object psobject -Property @{
        UserName = $username
        ProcessName = $proc.Name
        "WorkingSet(MB)" = $proc.WorkingSet / 1MB
    }
}

输出:

UserName ProcessName       WorkingSet(MB)
-------- -----------       --------------
Frode    taskhostex                  61,5
Frode    explorer            172,33203125
Frode    RuntimeBroker            21,9375
Frode    HsMgr                   5,578125
Frode    HsMgr64                 5,453125
Frode    SetPoint                 17,4375

代码需要以管理员身份运行才能为其他用户(而不仅仅是当前用户)获取会话。

答案 1 :(得分:1)

你试过过程吗?

您可以运行该功能并按各种因素进行过滤。您可以使用-name或-id按进程名称或PID进行筛选。例如:

get-process -name iexplore
get-process -Id 0     # this returns the idle process.

或者,您可以按其他因素进行过滤

使用超过1MB的内存获取进程

get-process |Where-object {$_.WorkingSet64 -gt 1048576}

有关get-process的更多信息:http://technet.microsoft.com/en-us/library/ee176855.aspx