我需要对我的终端服务器运行查询,以查找每个用户每个会话的内存使用情况。我想编写一个简单的批处理文件,我可以每小时运行一次,将每个用户的内存使用情况打印到文本文件中。是否有类似于 QUSER 的命令显示内存使用情况?我一直在寻找一种方法来做到这一点,但到目前为止还没有想出任何办法。我正在寻找可以返回类似于以下信息的内容:
用户名 00.00mb
提前致谢
WMI 的课程中提供了一些基本统计信息Win32_Process
(包括会话 ID),这应该可以帮助您入门。
要对此进行扩展,请在此处使用 PowerShell:
用于Win32_Process
获取进程详细信息,包括 WorkingSetSize 和 SessionId。
对于每个会话中的一个进程(不管是哪个)来获取用户帐户,您需要遵循 WMI 中的关联(有点像 RDBMS 中的关系,但是 WQL——用于查询 WMI 的类似 SQL 的语言)没有'不要加入)。
所以像:
$processes = Get-WmiObject -class Win32_Proces
# For example pick the first process in session 1
$sessionProcess = $processes | Where-Object { $_.SessionId -ne 0 } | Select-Object -first 1
# Get the session for the process, and then the user account for that session:
$logon = get-wmiobject -Query "associators of{$($sessionProcess.__RELPATH)} where resultclass=Win32_LogonSession"
$user = get-wmiobject -Query "associators of{$($logon.__RELPATH)} where resultclass=Win32_UserAccount"
并将$user
持有一个Win32_UserAccount
实例。
注意。我建议过滤掉会话 0 以避免包含 Windows 的所有内置部分。