通过powershell能否获取CPU每个核心的使用率

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了通过powershell能否获取CPU每个核心的使用率相关的知识,希望对你有一定的参考价值。

参考技术A $counters=new-object 'System.Diagnostics.PerformanceCounter[]' ([System.Environment]::ProcessorCount)
for($i=0;$i -lt $counters.Length;$i++)
$counters[$i]=new-object System.Diagnostics.PerformanceCounter("Processor", "% Processor Time",$i)

while(1)
foreach($c in $counters)
$c.NextValue();

sleep 1
追问

那个RawValue的值是一个很长的值,看上去不是使用率

追答

现在是了

本回答被提问者和网友采纳

使用 PowerShell 通过电子邮件通知获取硬盘 SMART 数据

【中文标题】使用 PowerShell 通过电子邮件通知获取硬盘 SMART 数据【英文标题】:Get hard drives SMART data with email notifications using PowerShell 【发布时间】:2020-04-21 06:16:19 【问题描述】:

如果 我想使用内部 Windows 资源来跟踪服务器磁盘的运行状况。所以,我想在多台服务器上安排一个 PowerShell 脚本。该脚本应获取每个服务器硬盘的 SMART 状态并向我发送适当的电子邮件(通过我的内部 SMTP 服务器)。一些服务器可能包含多个 HDD。

我的初始脚本没问题并且工作正常:

$emailto="admin@example.com" 
$emailfrom="$env:COMPUTERNAME@example.com "
$emailserver="smtp.example.com "

$output = Get-WmiObject -query "Select * from Win32_diskdrive" | select Model, Status | out-string

function send-email

    $EmailSubj = "Disks SMART report on $env:COMPUTERNAME"
    $EmailBody = $output

    Send-MailMessage -To "$emailto" `
                         -From "$emailfrom" `
                         -Subject "$EmailSubj" `
                         -Body "$EmailBody" `
                         -smtpServer "$emailserver"


send-email

典型的输出是这样的:

Model                  Status
-----                  ------
ST2000NC000            OK
ST2000NC000            OK
ST2000NC000            OK
ST2000NC000            OK

问题是只有在 BAD 状态可用时如何避免大量垃圾邮件和电子邮件?我想过滤 Get-WmiObject 结果,以便仅在至少一个 HDD 状态不是“OK”的情况下获取邮件。我不确定,但也应该有“降级”和“预失败”状态。我尝试了不同的 foreachIf/Else 组合,但我找不到如何强制 PowerShell 从 Status 属性(以及每个 HDD)检查“OK”字符串的方法得到我的目标。有人可以帮帮我吗?

【问题讨论】:

【参考方案1】:

如果您丢失了out-string,您将可以访问对象属性,并且能够过滤状态不正常。

但只是一个想法,我宁愿有很多电子邮件,因为这样我会知道脚本正在运行,或者至少有一封电子邮件说服务器 1 没有坏扇区等......

$output = Get-WmiObject -query "Select * from Win32_diskdrive" | select Model, Status | where status -ne "OK"

【讨论】:

谢谢你,西蒙!这是简单且足够好的解决方案。我是假人 :) 我唯一应该保留“Out-String”以获得电子邮件正文的结果。并感谢您的建议。我想我将使用两个计划任务 - 每天用于完整报告,每小时用于检查“坏”。【参考方案2】:
$output = Get-WmiObject -query "Select * from Win32_diskdrive" | select Model, Status 
          | where-object $_.Status -ne "OK" | Out-String

如果状态不等于“OK”,则输出驱动器。这应该考虑到任何其他状态选项,包括“BAD”。

【讨论】:

以上是关于通过powershell能否获取CPU每个核心的使用率的主要内容,如果未能解决你的问题,请参考以下文章

[C/C++11]_[初级]_[获取CPU支持的最合适的核心线程数]

[C/C++11]_[初级]_[获取CPU支持的最合适的核心线程数]

获取与 powershell 计数器一起使用的 cpu 百分比

VC能否获取所有硬件信息,现只获得CPU的信息,其他的都不行

[C/C++11]_[初级]_[获取CPU支持的最合适的核心线程数]

[C/C++11]_[初级]_[获取CPU支持的最合适的核心线程数]