2017-10-13 172 views
0

有它的工作原理确定以下,但与发行在PowerShell中:PowerShell进程CPU检查

$FileName = "E:\Work\ps\Inventory.htm" 
$serverlist = "E:\Work\ps\Monitored_computers.txt" 

foreach ($server in Get-Content $serverlist) 
{ 
$servern=$server.split(",")[0] 
$ip=$server.split(",")[1] 

$cpu = gwmi Win32_PerfFormattedData_PerfProc_Process -Computer $servern -filter "Name <> '_Total' and Name <> 'Idle'" | Sort-Object PercentProcessorTime -Descending | where { $_.PercentProcessorTime -gt 0 }| select -First 1 
if ($cpu.PercentProcessorTime -ge "92") { 
write-host $servern ' ' $cpu.Name ' ' $cpu.PercentProcessorTime 
} 
} 

我已经看到在PowerShell中一些其他的代码,它接受一个平均水平,但似乎像一个“平均平均“ - 这是没有意义的。而且,这是一个整体的CPU使用率现在

gwmi win32_processor | Measure-Object -property LoadPercentage -Average | Foreach {$_.Average} 

,如果我们可以采取同样的逻辑和适用于我们的工艺问题:

gwmi Win32_PerfFormattedData_PerfProc_Process | Sort-Object PercentProcessorTime -Descending | where { $_.PercentProcessorTime -gt 0 } | select -First 1 | Measure-Object -property PercentProcessorTime -Average | Foreach {$_.PercentProcessorTime} 

什么我试图问的是:我得到的CPU百分比,这似乎是一个“时间点”。如何找到真正的CPU百分比?这就是我指出平均水平的原因。我真的想要解决这个问题的“时间点”部分。

当我们多次看到服务器上的每个进程的CPU数量很高时,我们登录到服务器并且高CPU已经平息。这并不是说每次都是这样,但我们知道,有时CPU会尖峰化,然后安静下来。

感谢您的任何见解!

+0

你的问题是什么?你在PowerShell中提到了一个问题,但不要解决问题。 –

回答

1

第一个问题,你被困在一个时间点上,因为当你执行你的脚本时,它捕获了当时和现在发生的事情的快照。您在寻找的是历史数据,因此您可以计算出一段时间内进程的平均CPU使用率,并确定正在让您的CPU陷入困境的进程。您是否有性能监视器来跟踪个别进程的CPU使用情况?如果您希望在事后能够获取您正在查找的数字,则可能需要设置性能日志记录。其次,我认为你误解了Measure-Object是如何工作的。如果您在cmdlet上运行Get-Help并检查输出,您会看到它输出GenericMeasureInfo对象。该对象将拥有您正在查找的相关属性的属性,在您的情况下属于Average属性。它不是一个平均值,我看到的最常见用法是计算一些东西,比如Sum或Average,然后输出该属性的值。

让我们尝试一个简单的例子...

找到文件的平均大小的文件夹。首先我们使用Get-ChildItem来获取文件的集合,并将其传送到Measure-Object。我们将指定-Average参数指定了我们需要的平均计算,-Property length,以便它知道什么平均:

GCI C:\Temp\* -file | Measure-Object -Average -Property length 

此输出GenericMeasureInfo对象是这样的:

Count : 30 
Average : 55453155 
Sum  : 
Maximum : 
Minimum : 
Property : Length 

这让我知道它有30个文件传送给它,并且它找到了长度属性的平均值。现在,有时你要计算多件事情,所以你可以使用多个参数,如-Sum-Maximum,这些值将被填充以及:

Count : 30 
Average : 55453155 
Sum  : 1663594650 
Maximum : 965376000 
Minimum : 
Property : Length 

所以它看起来像我的平均文件是〜55MB,但在整个文件夹中的1.6GB中,我有一个965MB的文件!这个文件无疑是在歪曲我的数字。通过该输出,我可以找到具有多个文件的文件夹,但是一个文件占用了文件夹空间的一半以上,并且发现异常......例如我保存到我的C:\ temp文件夹中的某些ISO文件原因。看起来我需要做一些文件维护。

0

感谢@TheMadTechnician我已经能够解决这个问题。我有一个错误的成分与

$ _。平均

在那里我有

$ _。PercentProcessorTime

而且永远不会成功。这里是正确的脚本:

$serverlist = "D:\Work\ps\Monitored_computers.txt" 

foreach ($server in Get-Content $serverlist) { 
    $servern=$server.split(",")[0] 
    $ip=$server.split(",")[1] 

    $cpu = gwmi Win32_PerfFormattedData_PerfProc_Process -Computer $ip | ` 
    Where-Object {$_.Name -like "*tomcat*"} | ` 
    Measure-Object -property PercentProcessorTime -Average | ` 
    Foreach {$_.Average} 
    if ($cpu -ge "20") { 
     write-host $servern $cpu ' has a tomcat process greater than 20' 
    } 
}