PowerShell 脚本来监控 CPU、内存和磁盘使用情况:

news/2024/9/23 5:46:50/文章来源:https://www.cnblogs.com/suv789/p/18426211

PowerShell 脚本来监控 CPU、内存和磁盘使用情况:

powershellCopy Code
# 获取CPU使用率
$cpu = Get-Counter '\Processor(_Total)\% Processor Time'# 获取内存使用情况
$mem = Get-WmiObject Win32_OperatingSystem
$memUsage = [math]::round((($mem.TotalVisibleMemorySize - $mem.FreePhysicalMemory) / $mem.TotalVisibleMemorySize) * 100, 2)# 获取磁盘使用情况
$disk = Get-WmiObject Win32_LogicalDisk | Where-Object { $_.DriveType -eq 3 }
$diskUsage = foreach ($d in $disk) {[pscustomobject]@{Drive = $d.DeviceIDUsedSpace = [math]::round(($d.Size - $d.FreeSpace) / 1GB, 2)FreeSpace = [math]::round($d.FreeSpace / 1GB, 2)}
}# 输出监控结果
"CPU Usage: $($cpu.CounterSamples.CookedValue)%"
"Memory Usage: $memUsage%"
$diskUsage | Format-Table -AutoSize

运行这个脚本将显示 CPU 使用率、内存使用率和磁盘使用情况。


增强这个脚本,使其定期运行并记录性能数据到日志文件中。以下是一个示例:

powershellCopy Code
# 设置日志文件路径
$logFilePath = "C:\PerformanceLog.txt"# 定义监控间隔(秒)
$monitorInterval = 60# 创建一个无限循环进行监控
while ($true) {# 获取 CPU 使用率$cpu = Get-Counter '\Processor(_Total)\% Processor Time'# 获取内存使用情况$mem = Get-WmiObject Win32_OperatingSystem$memUsage = [math]::round((($mem.TotalVisibleMemorySize - $mem.FreePhysicalMemory) / $mem.TotalVisibleMemorySize) * 100, 2)# 获取磁盘使用情况$disk = Get-WmiObject Win32_LogicalDisk | Where-Object { $_.DriveType -eq 3 }$diskUsage = foreach ($d in $disk) {[pscustomobject]@{Drive = $d.DeviceIDUsedSpace = [math]::round(($d.Size - $d.FreeSpace) / 1GB, 2)FreeSpace = [math]::round($d.FreeSpace / 1GB, 2)}}# 获取当前时间$timestamp = Get-Date -Format "yyyy-MM-dd HH:mm:ss"# 记录结果到日志文件$logEntry = "$timestamp - CPU Usage: $($cpu.CounterSamples.CookedValue)%, Memory Usage: $memUsage%`n"$diskUsage | ForEach-Object {$logEntry += "Drive: $($_.Drive), Used Space: $($_.UsedSpace) GB, Free Space: $($_.FreeSpace) GB`n"}$logEntry += "`n"# 写入日志Add-Content -Path $logFilePath -Value $logEntry# 暂停指定的监控间隔Start-Sleep -Seconds $monitorInterval
}

说明:

  1. 日志文件路径:你可以根据需要更改 $logFilePath 的路径。
  2. 监控间隔$monitorInterval 定义了每次监控之间的时间间隔(单位为秒)。
  3. 无限循环:使用 while ($true) 创建一个无限循环,持续进行监控。
  4. 时间戳:每次记录时,会添加当前的时间戳,以便后续查阅。

运行脚本:

  1. 打开 PowerShell。
  2. 将脚本复制到一个 .ps1 文件中,例如 MonitorPerformance.ps1
  3. 右键单击 PowerShell 并选择“以管理员身份运行”。
  4. 运行脚本:.\MonitorPerformance.ps1

请确保你有权限写入日志文件的目录,并且脚本在执行期间不会被意外终止。


对脚本进行一些改进和扩展,以便更好地管理和分析性能数据。以下是一些建议:

1. 增强错误处理

可以增加错误处理,以确保在出现异常时,脚本不会崩溃:

powershellCopy Code
try {# 监控代码
} catch {$errorMessage = "Error: $_"Add-Content -Path $logFilePath -Value "$timestamp - $errorMessage`n"
}

2. 添加邮件通知功能

如果 CPU 或内存使用率超过某个阈值,可以通过邮件通知你。你可以使用 Send-MailMessage 命令发送电子邮件:

powershellCopy Code
# 设置阈值
$cpuThreshold = 80
$memThreshold = 80# 发送邮件的函数
function Send-AlertEmail {param ([string]$subject,[string]$body)Send-MailMessage -To "youremail@example.com" -From "monitor@example.com" -Subject $subject -Body $body -SmtpServer "smtp.example.com"
}# 在监控循环中检查阈值
if ($cpu.CounterSamples.CookedValue -gt $cpuThreshold) {Send-AlertEmail -subject "High CPU Usage Alert" -body "CPU usage is at $($cpu.CounterSamples.CookedValue)%."
}if ($memUsage -gt $memThreshold) {Send-AlertEmail -subject "High Memory Usage Alert" -body "Memory usage is at $memUsage%."
}

3. 将数据写入 CSV 文件

如果希望更方便地分析性能数据,可以将日志数据写入 CSV 文件:

powershellCopy Code
# 设置 CSV 文件路径
$csvFilePath = "C:\PerformanceLog.csv"# 添加标题(如果文件不存在)
if (-not (Test-Path $csvFilePath)) {"Timestamp,CPU Usage,Memory Usage,Drive,Used Space,Free Space" | Out-File -FilePath $csvFilePath
}# 记录数据到 CSV
foreach ($diskInfo in $diskUsage) {$csvEntry = "$timestamp,$($cpu.CounterSamples.CookedValue),$memUsage,$($diskInfo.Drive),$($diskInfo.UsedSpace),$($diskInfo.FreeSpace)"$csvEntry | Out-File -FilePath $csvFilePath -Append
}

4. 优化性能

如果你希望优化脚本的性能,可以使用更高效的方法来获取性能数据,比如减少调用 Get-WmiObject 的频率,或者只在特定条件下记录数据。

5. 可视化分析

可以考虑使用 Power BI 或 Excel 来可视化 CSV 文件中的数据,帮助更好地理解系统性能变化。

完整脚本示例

整合上述改进后的完整脚本如下:

powershellCopy Code
# 设置日志文件路径
$logFilePath = "C:\PerformanceLog.txt"
$csvFilePath = "C:\PerformanceLog.csv"# 设置阈值
$cpuThreshold = 80
$memThreshold = 80# 设置SMTP邮件服务器
$smtpServer = "smtp.example.com"
$emailTo = "youremail@example.com"
$emailFrom = "monitor@example.com"# 定义监控间隔(秒)
$monitorInterval = 60# 添加标题(如果文件不存在)
if (-not (Test-Path $csvFilePath)) {"Timestamp,CPU Usage,Memory Usage,Drive,Used Space,Free Space" | Out-File -FilePath $csvFilePath
}# 创建一个无限循环进行监控
while ($true) {try {# 获取 CPU 使用率$cpu = Get-Counter '\Processor(_Total)\% Processor Time'# 获取内存使用情况$mem = Get-WmiObject Win32_OperatingSystem$memUsage = [math]::round((($mem.TotalVisibleMemorySize - $mem.FreePhysicalMemory) / $mem.TotalVisibleMemorySize) * 100, 2)# 获取磁盘使用情况$disk = Get-WmiObject Win32_LogicalDisk | Where-Object { $_.DriveType -eq 3 }$diskUsage = foreach ($d in $disk) {[pscustomobject]@{Drive = $d.DeviceIDUsedSpace = [math]::round(($d.Size - $d.FreeSpace) / 1GB, 2)FreeSpace = [math]::round($d.FreeSpace / 1GB, 2)}}# 获取当前时间$timestamp = Get-Date -Format "yyyy-MM-dd HH:mm:ss"# 记录结果到日志文件$logEntry = "$timestamp - CPU Usage: $($cpu.CounterSamples.CookedValue)%, Memory Usage: $memUsage%`n"$diskUsage | ForEach-Object {$logEntry += "Drive: $($_.Drive), Used Space: $($_.UsedSpace) GB, Free Space: $($_.FreeSpace) GB`n"}$logEntry += "`n"Add-Content -Path $logFilePath -Value $logEntry# 写入数据到 CSVforeach ($diskInfo in $diskUsage) {$csvEntry = "$timestamp,$($cpu.CounterSamples.CookedValue),$memUsage,$($diskInfo.Drive),$($diskInfo.UsedSpace),$($diskInfo.FreeSpace)"$csvEntry | Out-File -FilePath $csvFilePath -Append}# 检查阈值并发送邮件if ($cpu.CounterSamples.CookedValue -gt $cpuThreshold) {Send-MailMessage -To $emailTo -From $emailFrom -Subject "High CPU Usage Alert" -Body "CPU usage is at $($cpu.CounterSamples.CookedValue)%." -SmtpServer $smtpServer}if ($memUsage -gt $memThreshold) {Send-MailMessage -To $emailTo -From $emailFrom -Subject "High Memory Usage Alert" -Body "Memory usage is at $memUsage%." -SmtpServer $smtpServer}} catch {$errorMessage = "Error: $_"Add-Content -Path $logFilePath -Value "$timestamp - $errorMessage`n"}# 暂停指定的监控间隔Start-Sleep -Seconds $monitorInterval
}

运行和测试

确保在实际运行之前,修改相关的邮件配置和文件路径。你可以先在测试环境中运行这个脚本,确保各项功能正常后再投入使用。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/801921.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java代码审计篇 - ofcms系统审计思路讲解 - 篇2 - SQL注入漏洞审计

Java代码审计篇 | ofcms系统审计思路讲解 - 篇2 | SQL注入漏洞审计 1. 前言 我发现很多文章包括教程,大概套路是:只说有漏洞的点,将有漏洞的点指出,然后分析代码;或者黑盒测试出漏洞之后,然后分析代码。 我认为这是在分析漏洞代码,而非代码审计。代码审计文章或教程应该…

Java代码审计篇 - ofcms系统审计思路讲解 - 篇3 - 文件上传漏洞审计

Java代码审计篇 | ofcms系统审计思路讲解 - 篇3 | 文件上传漏洞审计 1 文件上传代码审计【有1处】 文件上传漏洞我们需要着重关注的是文件在被java代码解析到保存下来之间有无验证过滤,因此什么样的上传方式,什么样的保存方式都不重要,大家着重关注代码对文件的验证过滤手段…

Java代码审计篇 - ofcms系统审计思路讲解 - 篇4 - XXE漏洞审计

Java代码审计篇 | ofcms系统审计思路讲解 - 篇4 | XXE漏洞审计 1. XXE代码审计【有1处】 XXE代码审计常搜索的关键字如下: XMLReader SAXBuilder SAXReader SAXParserFactory Digester DocumentBuilderFactory ...还有一个特殊的,用于加载.jrxml 文件,这是 JasperReports 特…

Java反序列化利用链篇 | CC6链分析(通用版CC链)

CC6 CC6和CC1之间的区别 在CC1的LazyMap链中,调用链如下: AnnotationInvocationHandler.readObject() Map(Proxy).entrySet() LazyMap.get() ChainedTransformer.transform() InvokerTransformer.transform() Runtime.exec()而在CC1链中,对CommonsCollections和jdk版本是有限…

Java反序列化利用链篇 | CC3链分析、TemplatesImpl类中的调用链、TrAXFilter、InstantiateTransformer类的transform()【本系列文章的分析重点】

CC3链分析 1. CC3链背景 前面介绍了CC1和CC6,这两条链子虽然前面的入口类不同CC1入口类是AnnotationInvocationHandler CC6入口类是HashMap但是其触发恶意代码的方式是相同的,都是InvokerTransformer.transform()触发Runtime.getRuntime().exec()实现命令执行。而在很多情况下…

VUE学习day one

学习来源:【前端最新Vue2+Vue3基础入门到实战项目全套教程,自学前端vue就选黑马程序员,一套全通关!】https://www.bilibili.com/video/BV1HV4y1a7n4?vd_source=6dac49feb8d7fd76b147c8cf8c0c2b5a Vue是什么?Vue是一个用于构建用户界面(基于数据动态渲染出用户看到的页面)…

全网最适合入门的面向对象编程教程:51 Python 函数方法与接口-使用 Zope 实现接口

在 Python 中,Zope 提供了一种机制来定义和实现接口。Zope 的接口模块通常用于创建可重用的组件,并确保组件遵循特定的接口规范。全网最适合入门的面向对象编程教程:51 Python 函数方法与接口-使用 Zope 实现接口摘要: 在 Python 中,Zope 提供了一种机制来定义和实现接口。…

Java反序列化利用链篇 | CC1链的第二种方式-LazyMap版调用链【本系列文章的分析重点】

CC1链的第二种方式-LazyMap版调用链 目录LazyMap构造payloadCC1的调用链参考链接LazyMap 在之前的CC1链中分析,其实是其中一种方式(国内版本),还有另外一种方式,也是ysoserial中的CC1链的方式(国外版本)。 区别在于调用transform的类是不同的。 在寻找transform调用的时…

瑞云科技AIGC云平台:重塑电商设计流程!

在快节奏的电商市场中,商品更新换代的速度越来越快,而电商设计团队传统的设计流程和工作模式却难以满足当前行业对快速响应、高效发展和降低成本的实际需求.对此,瑞云科技针对电商设计行业的痛点,提供了全新的AIGC创作云平台.从2022年ChatGPT的发布到,AI正以惊人的速度席卷全球…

学习高校课程-软件工程-敏捷开发(ch5)

WHAT IS AGILITY 什么是敏捷性 An agile team is a nimble team able to appropriately respond to changes. Change is what software development is very much about. Changes in the software being built, changes to the team members, changes because of new technolog…

从零开始一个git操作实例,图文并茂

徒弟不懂git怎么用, 于是写了篇文章, 把本地git操作从头写了一遍, 自己去看吧!0、基本概念 •Git是一个免费、开源的、分布式版本控制系统 •它使用一个特殊的叫做仓库的数据库来记录文件的变化 •仓库中的每个文件都有一个完整的版本历史记录 1)安装 sudo apt-update sud…