当前位置:网站首页 > 更多 > 玩电脑 > 正文

[玩转系统] 在 PowerShell 中获取内存使用百分比 [3 种方法]

作者:精品下载站 日期:2024-12-14 05:31:42 浏览:13 分类:玩电脑

在 PowerShell 中获取内存使用百分比 [3 种方法]


[玩转系统] 在 PowerShell 中获取内存使用百分比 [3 种方法]

我们可以有多个用例来获取内存使用百分比。例如:

  • 获取总体内存使用百分比
  • 获取总体内存使用百分比历史记录
  • 获取一个/所有进程的内存使用百分比

让我们一一学习它们。

跟注内存使用百分比

我们可以使用 Get-CounterGet-WmiObject cmdlet 来检索总体内存使用百分比。下面让我们详细探讨一下它们。

使用 Get-Counter Cmdlet

使用 Get-Counter cmdlet 获取总内存使用量百分比。

使用获取计数器 Cmdlet:

$performance_counter = Get-Counter '\Memory\% Committed Bytes In Use'
$usedMemoryPercentage = $performance_counter.CounterSamples[0].CookedValue
Write-Host "Used Memory Percentage: $usedMemoryPercentage%"

输出 :

Used Memory Percentage: 57.7237514214878%

我们使用 Get-Counter cmdlet 获取系统上已用内存字节百分比的性能计数器,并将其存储在 $performance_counter 变量中。计数器路径'\Memory\% Comlated Bytes In Use'指定了内存计数器,该计数器测量已提交内存字节与可用物理内存总量的比例。

然后,我们从 $performance_counter 检索性能计数器的值并将其分配给 $usedMemoryPercentage 变量。现在,我们如何获得性能计数器的值?为此,我们使用了 $performance_counter 变量的 CounterSamples 属性,其中包含性能计数器示例数组。

由于我们打算检索第一个计数器样本,因此我们使用 [0] 来访问它。然后,我们使用计数器示例的 CookedValue 属性来获取消息使用百分比。最后,我们使用 Write-Host 将其显示在 PowerShell 控制台上。

使用 Get-WmiObject Cmdlet

如果您使用 PowerShell 3.0 或更早版本,请使用 Get-WmiObject cmdlet 获取内存使用百分比。

使用 Get-WmiObject cmdlet:

$usedMemory = Get-WmiObject -Class Win32_OperatingSystem
$totalMemory = $usedMemory.TotalVisibleMemorySize
$freeMemory = $usedMemory.FreePhysicalMemory
$usedMemoryPercentage = ($totalMemory - $freeMemory) / $totalMemory * 100
Write-Host "Used Memory Percentage: $usedMemoryPercentage%"

输出 :

Used Memory Percentage: 54.8795984097428%

我们使用 Get-WmiObject cmdlet 获取有关操作系统的详细信息,特别是使用 -Class 参数指定的 Win32_OperatingSystem。我们将检索到的详细信息存储在 $usedMemory 变量中。

然后,我们使用 $usedMemory 变量的 TotalVisibleMemorySizeFreePhysicalMemory 属性分别获取可见内存大小和可用物理内存。我们将它们存储在两个名为 $totalMemory$freeMemory 的单独变量中。

之后,我们通过从 $totalMemory 中减去 $freeMemory 的量,然后将输出除以 $totalMemory 来计算内存使用百分比>,然后乘以 100。最后,我们将计算出的百分比存储在 $usedMemoryPercentage 变量中,我们进一步将其与 Write-Host cmdlet 一起使用以在 PowerShell 控制台上打印。

如果您使用的是 PowerShell 3.0 或更高版本,请优先使用 Get-CimInstance cmdlet,因为自 PowerShell 3.0 起,Get-WmiObject 已被 Get-CimInstance 取代。

使用 Get-CimInstance cmdlet:

$usedMemory = Get-CimInstance -Class Win32_OperatingSystem
$totalMemory = $usedMemory.TotalVisibleMemorySize
$freeMemory = $usedMemory.FreePhysicalMemory
$usedMemoryPercentage = ($totalMemory - $freeMemory) / $totalMemory * 100
Write-Host "Used Memory Percentage: $usedMemoryPercentage%"

输出 :

Used Memory Percentage: 54.8795984097428%

到现在为止,我们已经学会了如何获取总体内存使用百分比;如果您只想知道计算机上当前进程消耗了多少内存百分比怎么办?让我们看看如何做到这一点。

跟注内存使用百分比历史记录

使用 Get-Counter cmdlet 获取总体内存使用百分比历史记录。

使用获取计数器 Cmdlet:

Get-Counter '\Memory\% Committed Bytes In Use' -Continuous -SampleInterval 5

输出 :

Timestamp                  CounterSamples
---------                  --------------
7/15/2023 11:38:12 AM      \desktop-nkk10jm\memory\% committed bytes in use :
                           57.3812244593588

7/15/2023 11:38:17 AM      \desktop-nkk10jm\memory\% committed bytes in use :
                           57.3770478035736

7/15/2023 11:38:22 AM      \desktop-nkk10jm\memory\% committed bytes in use :
                           57.3751683014853

7/15/2023 11:38:27 AM      \desktop-nkk10jm\memory\% committed bytes in use :
                           57.3706575337263

我们已经在第一个示例代码中了解了 Get-Counter cmdlet 和计数器路径。在这里,我们将 -SampleInterval 参数设置为 5 以获取正在使用的已提交内存字节百分比的性能计数器数据,采样间隔为 5 秒。但是,-Continous 参数用于持续更新数据,直到用户从键盘输入 Ctrl+C 来停止更新。

一个/多个进程的内存使用百分比

我们可以使用 Get-ProcessGet-WmiObject cmdlet 来查找一个或所有进程的内存使用百分比。

使用 Get-Process Cmdlet

使用 Get-Process cmdlet 获取本地计算机上当前进程的内存使用百分比。

使用 Get-Process Cmdlet:

$current_process = Get-Process -Id $PID
$usedMemoryPercentage = ($current_process.WorkingSet / (Get-WmiObject -Class Win32_ComputerSystem).TotalPhysicalMemory) * 100
Write-Host "Used Memory Percentage: $usedMemoryPercentage%"

输出 :

Used Memory Percentage: 0.918036721468859%

我们使用带有 -Id 参数的 Get-Process cmdlet 来获取有关当前进程的信息。我们使用 $PID 变量指定当前进程,该变量包含当前 PowerShell 进程的进程 ID(也称为 PID)。

通过使用 $PID 设置 -Id,我们获得了当前 PowerShell 会话的进程详细信息,并将其分配给 $current_process 变量。

然后,我们计算内存使用百分比并将其分配给 $usedMemoryPercentage 变量,该变量与 Write-Host 一起使用以显示在控制台上。但是我们如何计算内存使用百分比呢?

为此,我们将 $current_process 对象的 WorkingSet 属性(包含进程正在使用的内存量)除以 TotalPhysicalMemory 属性Win32_ComputerSystem WMI 类(包含计算机上安装的物理内存总量)的值,然后将结果乘以 100

这样,上面的代码就检索了当前进程的进程对象,计算了该进程的内存使用百分比,然后将输出显示在PowerShell控制台上。

使用 Get-WmiObject Cmdlet

使用 Get-WmiObject cmdlet 获取本地计算机上所有进程的内存使用百分比。

使用 Get-WmiObject Cmdlet:

Get-WmiObject -Class Win32_PerfFormattedData_PerfProc_Process |
Select-Object Name, IDProcess, 
@{Name="Memory Usage %";Expression={($_.WorkingSetPrivate / (Get-WmiObject Win32_ComputerSystem).TotalPhysicalMemory) * 100}}

输出 :

Name                           IDProcess       Memory Usage %
----                           ---------       --------------
ApplicationFrameHost                8556   0.0132102058275879
CalculatorApp                      15368  0.00387112258683896
CompPkgSrv                         14692  0.00532279355690357
CxMonSvc                            3224   0.0582120058995908
CxUtilSvc                           3248  0.00503245936289065
Greenshot                          10684   0.0124359813102202
HPHotkeyNotification               15640  0.00832291356170376
HotKeyServiceUWP                    3740    0.011323033566504
HxAccounts                         10436   0.0434533510372673
HxOutlook                            480 0.000435501291019383
HxTsr                               5836   0.0515343194372936
Idle                                   0 9.67780646709739E-05
IntelCpHDCPSvc                      1264                    0
IntelCpHeciSvc                      1384  0.00508084839522613
LanWlanWwanSwitchingServiceUWP      3104   0.0180007200288012
Locator                             3504                    0
Memory Compression                  1888     3.33555277694979
MicTray64                           2348  0.00479051420121321
...                                 ...   ...
...                                 ...   ...
...                                 ...   ...

上面的代码检索了机器上当前正在运行的进程的信息,并计算了每个进程的内存使用百分比。如何?

首先,我们使用 Get-WmiObject cmdlet 和 Win32_PerfFormattedData_PerfProc_Process 类来获取计算机上运行的所有进程的性能计数器日期。请注意,我们使用 -Class 参数来指定 Win32_PerfFormattedData_PerfProc_Process 类;但是,我们也可以省略这个参数。

然后,我们将 Get-WmiObject 生成的输出通过管道传输到 Select-Object cmdlet 以选择 NameIDProcess ,以及相应的内存使用百分比。我们通过将进程的私有工作集除以计算机的总物理内存,然后乘以100来计算内存百分比。

请注意,我们使用哈希表创建了一个名为 MemoryUsage% 的计算属性。

这就是如何在 PowerShell 中获取内存使用百分比的全部内容。

您需要 登录账户 后才能发表评论

取消回复欢迎 发表评论:

关灯