PowerShell 是 Windows 系统资源审计的高效工具,可直接调用底层接口实现 CPU、内存、磁盘、网络、进程、软件、启动项的自动化采集与分析,并支持导出 CSV/HTML 报告及定时任务部署。
powershell 是 windows 系统资源审计的高效工具,它能直接调用系统底层接口,无需额外安装软件,适合自动化、批量和定期检查。
获取关键系统资源使用情况
通过内置 cmdlet 快速采集 CPU、内存、磁盘和网络实时负载,避免依赖第三方监控工具。
-
CPU 和内存:使用 Get-Counter 获取高精度性能计数器数据,例如:
Get-Counter '\Processor(_Total)\% Processor Time','\Memory\Available MBytes' -
磁盘空间:用 Get-PSDrive 查看本地驱动器剩余容量,过滤出使用率超 90% 的盘符:
Get-PSDrive -PSProvider 'FileSystem' | Where-Object { $_.Used / $_.Free -gt 9 } | Select-Object Name, Used, Free -
进程资源占用:结合 Get-Process 按 CPU 或内存排序,定位异常消耗者:
Get-Process | Sort-Object CPU -Descending | Select-Object -First 5 Name, CPU, WS
审计已安装软件与启动项
识别非授权或过期软件、隐蔽启动项,是安全基线核查的重要环节。
-
已安装程序:从注册表读取 32/64 位软件列表(比 WMI 更全面):
Get-ChildItem 'HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\*', 'HKLM:\Software\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\*' -ErrorAction SilentlyContinue | Get-ItemProperty | Where-Object DisplayName | Select-Object DisplayName, DisplayVersion, InstallDate -
开机启动项:汇总注册表、启动文件夹、计划任务三类入口:
Get-CimInstance Win32_StartupCommand | Select-Object Name, Command, Location
同时检查:Get-ChildItem "$env:APPDATA\Microsoft\Windows\Start Menu\Programs\Startup"和Get-ScheduledTask | Where-Object State -eq 'Enabled'
导出结构化审计报告
将结果保存为 CSV 或 HTML,便于归档、比对和交接,支持时间戳和主机标识。
- 生成带时间戳的 CSV 报告:
$Report = [PSCustomObject]@{Hostname=$env:COMPUTERNAME; TimeStamp=(Get-Date); CPU=$(Get-Counter '\Processor(_Total)\% Processor Time').CounterSamples.CookedValue; FreeMemoryMB=$(Get-Counter '\Memory\Available MBytes').CounterSamples.CookedValue}; $Report | Export-Csv "Audit_$(Get-Date -Format 'yyyyMMdd_HHmm')_$($env:COMPUTERNAME).csv" -NoTypeInformation - 生成简易 HTML 汇总页(含表格和样式):
使用 ConvertTo-Html + 自定义 CSS 片段,输出可读性强的本地页面,适合快速浏览。
设置定时自动审计任务
把脚本注册为计划任务,实现每日/每周无人值守运行,降低人工遗漏风险。
- 用 Register-ScheduledTask 创建触发器和操作,例如每天凌晨 2 点执行:
$Action = New-ScheduledTaskAction -Execute 'PowerShell.exe' -Argument '-File C:\Scripts\SystemAudit.ps1'; $Trigger = New-ScheduledTaskTrigger -Daily -At '2:00am'; Register-ScheduledTask 'SystemAuditDaily' -Action $Action -Trigger $Trigger -RunLevel Highest - 确保脚本具备执行策略权限:在部署前运行
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser(推荐仅限当前用户)。


















