很多时候,PowerShell 管理员必须手动扫描服务器才能查看网络中服务器的性能问题。当其中一台服务器没有响应或无响应并导致相关服务器出现性能问题时,可能会出现这种情况。在这种情况下,了解服务器的内存使用情况将有助于确定哪个特定服务器的内存使用率更高。
使用 PowerShellGet-WMIObject
获取计算机上的内存使用情况。有多种方法可以在PowerShell中获取本地计算机或远程计算机上的内存利用率。
在本文中,我将解释如何使用 PowerShell 获取服务器的内存使用情况。
PowerShell 获取内存使用情况
要使用 PowerShell获取本地计算机上前 10 个进程的内存使用情况,请使用以下命令
PS D:\PowerShell> Get-WmiObject WIN32_PROCESS | Sort-Object -Property ws -Descending | Select-Object -first 10 ProcessID,Name,WS
ProcessID Name WS
--------- ---- --
2628 Memory Compression 909996032
11984 chrome.exe 470863872
15728 firefox.exe 356192256
14444 chrome.exe 332091392
16680 firefox.exe 315645952
11812 chrome.exe 311554048
22072 Teams.exe 242507776
11256 firefox.exe 221163520
27052 powershell_ise.exe 213434368
25612 chrome.exe 211025920
在上面的 PowerShell 脚本中,
- 使用 Get-WMIObject cmdlet 和 WIN32_Process 类,它可以获取有关本地计算机上所有进程的信息。
- 对所有进程按 WS 降序排序
- 使用 Select-Object 获取前 10 个进程 id、进程名称和 WS
- 它获取前 10 个进程的内存使用情况
PowerShell 获取内存利用率(本地)
正如您从上述信息中看到的那样,我们了解哪些进程的内存使用率较高,但很难知道这些进程将使用多少内存百分比。
酷提示:如何创建资源池来测量 VM 的内存使用情况!
要获得计算机上的总内存使用百分比,我们需要知道系统上有多少 TotalVisibleMemorySize 和 FreePhysicalMemory 可用。
运行以下命令以获取本地计算机上以 MB 为单位的进程内存使用情况
# Get Computer Object
$CompObject = Get-WmiObject -Class WIN32_OperatingSystem
$Memory = ((($CompObject.TotalVisibleMemorySize - $CompObject.FreePhysicalMemory)*100)/ $CompObject.TotalVisibleMemorySize)
Write-Host "Memory usage in Percentage:" $Memory
# Top 5 process Memory Usage (MB)
$processMemoryUsage = Get-WmiObject WIN32_PROCESS | Sort-Object -Property ws -Descending | Select-Object -first 5 processname, @{Name="Mem Usage(MB)";Expression={[math]::round($_.ws / 1mb)}}
$processMemoryUsage
Output:
Memory usage in Percentage: 78.134547088066
ProcessName Mem Usage(MB)
----------- -------------
Memory Compression 1032
chrome.exe 373
Teams.exe 370
firefox.exe 315
chrome.exe 307
在上面的 PowerShell 脚本中,
- 使用 Get-WmiObject -Class Win32_OperatingSystem 获取本地计算机对象
- 获取有关 TotalVisibleMemorySize 和 FreePhysicalMemory 的信息
- 计算并获取内存使用百分比
- 使用 Win_32_Process 获取所有进程,按 ws 降序排序
- 使用 Select-Object 获取前 5 个进程内存使用情况
- 易于阅读和解释哪个进程的内存使用率更高。
酷提示:如何在 PowerShell中使用多行命令!
PowerShell 获取远程计算机上的内存使用情况
要使用 PowerShell获取远程计算机上前 10 个进程的内存使用情况,请使用以下命令
PS D:\PowerShell> Get-WmiObject WIN32_PROCESS -ComputerName 'corp-in-18' | Sort-Object -Property ws -Descending | Select-Object -first 5 ProcessID,Name,WS
>>
ProcessID Name WS
--------- ---- --
12628 Memory Compression 913199104
10522 chrome.exe 438820864
17292 Outlook.exe 393461760
26529 firefox.exe 354979840
23133 chrome.exe 325996544
在上面的 PowerShell 脚本中,
- 使用 Get-WMIObject cmdlet 和 WIN32_Process 类,它获取有关远程计算名称上的所有进程的信息,该名称由 –
ComputerName
属性指定 - 对所有进程按 WS 降序排序
- 用于
Select-Object
获取前 5 个进程 ID、进程名称和 WS - 它获取前 5 个进程的内存使用情况
要获取远程计算机上的总内存使用百分比,请获取系统上可用的 TotalVisibleMemorySize 和 FreePhysicalMemory。
运行以下命令以获取远程计算机上以 mb 为单位的进程内存使用情况
$CompName = 'corp-in-18'
# Get Computer Object
$CompObject = Get-WmiObject -Class WIN32_OperatingSystem -ComputerName $CompName
$Memory = ((($CompObject.TotalVisibleMemorySize - $CompObject.FreePhysicalMemory)*100)/ $CompObject.TotalVisibleMemorySize)
Write-Host "Memory usage in Percentage:" $Memory
# Top 5 process Memory Usage (MB)
$processMemoryUsage = Get-WmiObject WIN32_PROCESS -ComputerName $CompName | Sort-Object -Property ws -Descending | Select-Object -first 5 processname, @{Name="Mem Usage(MB)";Expression={[math]::round($_.ws / 1mb)}}
$processMemoryUsage
Output
Memory usage in Percentage: 77.2521027641826
ProcessName Mem Usage(MB)
----------- -------------
Memory Compression 1105
chrome.exe 358
firefox.exe 318
chrome.exe 302
firefox.exe 290
在上面的 PowerShell 脚本中,
- 使用 Get-WmiObject cmdlet 获取由指定的远程计算机对象
ComputerName
- 获取有关 TotalVisibleMemorySize 和 FreePhysicalMemory 的信息
- 计算并获取内存使用百分比
- 使用 Win_32_Process 获取远程计算机上的所有进程,按 ws 降序排序
- 使用 Select-Object 获取前 5 个进程内存使用情况
酷提示:如何在 PowerShell 中为字符串或变量添加换行符!
结论
我希望以上使用 PowerShell 脚本获取本地计算机或远程计算机上的内存使用情况的文章将帮助您获取内存使用信息并对其采取措施。
使用Win32_Process
类,它返回由 ComputerName 指定的计算机上的所有可用进程。