۱. نگاه سریع با Get-Counter
$c = '\Processor(_Total)\% Processor Time',
'\Memory\Available MBytes',
'\PhysicalDisk(_Total)\Avg. Disk sec/Transfer',
'\PhysicalDisk(_Total)\Current Disk Queue Length',
'\Network Interface(*)\Bytes Total/sec'
Get-Counter -Counter $c -SampleInterval 5 -MaxSamples 6راهنمای تفسیر:
% Processor Time: بیش از ۸۵٪ بهطور پیوستهAvailable MBytes: کمتر از ۱۰٪ حافظهی کلAvg. Disk sec/Transfer: بیش از 0.020 (یعنی ۲۰ میلیثانیه)Current Disk Queue Length: بهطور پیوسته بیش از ۲ برابر تعداد دیسکها
۲. خط پایه با Data Collector Set
مشکل کارایی را فقط وقتی میتوانید تشخیص دهید که بدانید وضعیت «عادی» چه بوده است. این جمعآورنده هر دقیقه نمونه میگیرد و فایلش دایرهای است، یعنی حداکثر ۵۱۲ مگابایت جا میگیرد:
logman create counter SahorBaseline -si 00:01:00 -f bincirc -max 512 `
-o C:\PerfLogs\SahorBaseline `
-c '\Processor(_Total)\% Processor Time' '\Memory\Available MBytes' `
'\PhysicalDisk(*)\Avg. Disk sec/Transfer' '\Network Interface(*)\Bytes Total/sec' `
'\LogicalDisk(*)\% Free Space'
logman start SahorBaseline
logman query SahorBaselineبرای اینکه بعد از راهاندازی مجدد هم اجرا شود، در perfmon.msc در بخش Data Collector Sets › User Defined › Properties › Schedule یک زمانبندی «At startup» اضافه کنید.
تبدیل به CSV برای Excel:
relog C:\PerfLogs\SahorBaseline_000001.blg -f csv -o C:\PerfLogs\baseline.csv۳. رخدادهای مهم ۲۴ ساعت گذشته
Get-WinEvent -FilterHashtable @{ LogName = 'System','Application'; Level = 1,2; StartTime = (Get-Date).AddDays(-1) } |
Group-Object ProviderName | Sort-Object Count -Descending | Select-Object Count, Name -First 10Level 1 یعنی Critical و Level 2 یعنی Error. چند رخداد امنیتی پرکاربرد:
# Failed logons (4625) in the last hour
Get-WinEvent -FilterHashtable @{ LogName = 'Security'; Id = 4625; StartTime = (Get-Date).AddHours(-1) } |
ForEach-Object { $_.Properties[19].Value } | Group-Object | Sort-Object Count -Descending
# Unexpected shutdowns (6008)
Get-WinEvent -FilterHashtable @{ LogName = 'System'; Id = 6008 } -MaxEvents 5۴. هشدار کمبود فضای دیسک
یک اسکریپت ساده که با Task Scheduler هر ساعت اجرا شود:
Get-Volume | Where-Object { $_.DriveLetter -and $_.Size -gt 0 -and ($_.SizeRemaining / $_.Size) -lt 0.10 } |
ForEach-Object { Write-EventLog -LogName Application -Source 'SahorMonitor' -EventId 900 -EntryType Warning `
-Message ("Drive {0}: only {1:N1} GB free" -f $_.DriveLetter, ($_.SizeRemaining / 1GB)) }یک بار منبع رخداد را ثبت کنید: New-EventLog -LogName Application -Source SahorMonitor. حالا سیستم مانیتورینگ مرکزی (مثل Zabbix یا Wazuh) میتواند رخداد ۹۰۰ را بگیرد.