PowerShell – 获取内存使用情况

很多时候,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 指定的计算机上的所有可用进程。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值