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