June 24

🖥️ 5 строк PowerShell + авторский скрипт для подписчиков: скорость, здоровье и тип диска за 3 секунды (Часть 8 из 50)

У клиента упал 1С-сервер в понедельник утром. Бухгалтерия стоит, директор в ярости, сисадмин бледный. Открыл консоль, ввёл одну команду — и через 8 секунд увидел причину: на системном диске осталось 380 МБ. Не гигабайт. Мегабайт. Файл подкачки захлебнулся, кэш отвалился, сервер лёг.

118
📢 Подписывайтесь на канал «Настройки Windows» Еще я планирую писать какие нибудь небольшие скрипты полезные, как можно больше, будет интересно, поддержи канал:

🛡️ ВЗНОС В РАЗВИТИЕ КАНАЛА И СОЗДАНИЕ ПОЛЕЗНЫХ СКРИПТОВ 🛡️

С тех пор я начинаю любую диагностику с одной и той же связки команд. Делюсь с вами — работает в Windows 11 25H2 и PowerShell 7.6.3 безотказно. (На Windows 10 тоже работает, пользуйтесь)

📊 Базовый чек-ап: сколько места осталось.

Стандартный однострочник, который должен быть в мышечной памяти любого админа:

Get-Volume | Where-Object DriveLetter | Select-Object DriveLetter, FileSystemLabel, @{Name="SizeGB";Expression={[math]::Round($_.Size/1GB,2)}}, @{Name="FreeGB";Expression={[math]::Round($_.SizeRemaining/1GB,2)}} | Format-Table -AutoSize

Where-Object DriveLetter — важный момент. Без него в вывод полезут скрытые разделы восстановления, EFI-том и прочая служебная мелочь без букв. А нам нужны только логические диски, с которыми реально работаем.

118

🔍 Идём глубже: SSD или HDD, и живой ли диск

Одного знания о свободных гигабайтах мало. Надо понимать, на чём эти гигабайты лежат. Связываем Get-Volume с Get-PhysicalDisk:

Get-Volume | Where-Object DriveLetter | ForEach-Object {
$disk = Get-Partition -DriveLetter $_.DriveLetter | Get-Disk | Get-PhysicalDisk
[PSCustomObject]@{
Letter = $_.DriveLetter
Label = $_.FileSystemLabel
Type = $disk.MediaType
Health = $disk.HealthStatus
SizeGB = [math]::Round($_.Size/1GB, 2)
FreeGB = [math]::Round($_.SizeRemaining/1GB, 2)
}
} | Format-Table -AutoSize
118

Смотрите, что получается. В одной таблице — буква, метка, тип носителя, статус здоровья по S.M.A.R.T. и место.

💾 Диск C: System | 💿 Тип: SSD | ✅ Здоровье: OK | 📏 Размер: 489.08 ГБ | 🆓 Свободно: 397.25 ГБ

💾 Диск D: GAMExZONE | 💿 Тип: HDD | ✅ Здоровье: OK | 📏 Размер: 442.38 ГБ | 🆓 Свободно: 317.25 ГБ

Если в колонке Health появилось Warning — это уже повод бежать, а не планировать.

⚡ Бенчмарк за 5 строк. Без стороннего софта

CrystalDiskMark ставить не всегда удобно — на продакшн-сервере лишний софт не нужен. Пишем свой бенчмарк прямо в консоли и нажимаем ENTER:

$path = "$env:TEMP\speedtest.tmp"
$size = 100MB
$data = New-Object byte[] $size

$w = (Measure-Command { [IO.File]::WriteAllBytes($path, $data) }).TotalSeconds
$r = (Measure-Command { [IO.File]::ReadAllBytes($path) }).TotalSeconds
Remove-Item $path

[PSCustomObject]@{
WriteMBps = [math]::Round($size/1MB/$w, 2)
ReadMBps = [math]::Round($size/1MB/$r, 2)
} | Format-Table -AutoSize
118

Скрипт пишет и читает 100 МБ во временную папку, засекая время до миллисекунд. Честно — я сам сначала не поверил цифрам, когда первый раз запустил на NVMe.

Ориентиры такие:

🚀 NVMe SSD — 1500–3500 МБ/с

SATA SSD — 400–550 МБ/с

🐌 HDD 7200 rpm — 120–180 МБ/с

🐢 HDD 5400 rpm — 80–120 МБ/с

Если у вас SSD показывает ниже 200 МБ/с — это уже не норма. Либо диск деградирует, либо его забивают фоновые задачи.

118

💳 Донат через Ozon (от 10 ₽. Получатель: Александр Г.)

Спасибо всем, кто поддерживает меня финансово ! Очень приятно осознавать, что мой контент полезен, а труд не остаётся без внимания ❤️

🚀 Специально для подписчиков канала:

А теперь — главный подарок. Один скрипт, который делает всё: создаёт нагрузку, мониторит в реальном времени и выдаёт полный отчёт. Просто создайте текстовый файл, скопируйте весь код ниже, вставьте сохраните как файл .ps1 обязательно в UTF-8 и сохраните.

118
Write-Host "🚀 Запуск теста производительности диска..." -ForegroundColor Cyan
Write-Host ""

# Создаём тестовый файл (100 МБ)
$testFile = "$env:TEMP\disktest_$((Get-Date).Ticks).tmp"
$testSize = 100MB
$data = New-Object byte[] 1MB

Write-Host "📝 Создаём тестовый файл 100 МБ..." -ForegroundColor Yellow
$stopwatch = [System.Diagnostics.Stopwatch]::StartNew()
for ($i = 1; $i -le 100; $i++) {
[IO.File]::AppendAllBytes($testFile, $data)
}
$stopwatch.Stop()
$createSpeed = [math]::Round($testSize / 1MB / $stopwatch.Elapsed.TotalSeconds, 2)
Write-Host "✅ Файл создан. Скорость записи: $createSpeed МБ/с" -ForegroundColor Green
Write-Host ""

# Запускаем мониторинг в фоне
$monitorJob = Start-Job -ScriptBlock {
$readCounter = New-Object System.Diagnostics.PerformanceCounter("PhysicalDisk", "Disk Read Bytes/sec", "_Total")
$writeCounter = New-Object System.Diagnostics.PerformanceCounter("PhysicalDisk", "Disk Write Bytes/sec", "_Total")

$totalRead = 0
$totalWrite = 0
$samples = 0

Write-Host "⏱️ Мониторинг активности (10 сек):" -ForegroundColor Cyan

for ($i = 1; $i -le 20; $i++) {
Start-Sleep -Milliseconds 500
$r = $readCounter.NextValue() / 1MB
$w = $writeCounter.NextValue() / 1MB
$totalRead += $r
$totalWrite += $w
$samples++
Write-Host "[$('{0:D2}' -f $i)] 📖 $([math]::Round($r, 2)) МБ/с | ✍️ $([math]::Round($w, 2)) МБ/с"
}

$avgRead = [math]::Round($totalRead / $samples, 2)
$avgWrite = [math]::Round($totalWrite / $samples, 2)

Write-Host ""
Write-Host "📊 СРЕДНИЕ ЗНАЧЕНИЯ:" -ForegroundColor Green
Write-Host "📖 Чтение: $avgRead МБ/с" -ForegroundColor Yellow
Write-Host "✍️ Запись: $avgWrite МБ/с" -ForegroundColor Yellow

$readCounter.Close()
$writeCounter.Close()

return @{Read = $avgRead; Write = $avgWrite}
}

# Создаём нагрузку на чтение
Write-Host "`n💾 Создаём нагрузку на чтение..." -ForegroundColor Yellow
$readStopwatch = [System.Diagnostics.Stopwatch]::StartNew()
$null = [IO.File]::ReadAllBytes($testFile)
$readStopwatch.Stop()
$actualReadSpeed = [math]::Round($testSize / 1MB / $readStopwatch.Elapsed.TotalSeconds, 2)
Write-Host "✅ Чтение завершено. Скорость: $actualReadSpeed МБ/с" -ForegroundColor Green

# Копируем файл для нагрузки на запись
Write-Host "`n💾 Создаём нагрузку на запись..." -ForegroundColor Yellow
$copyStopwatch = [System.Diagnostics.Stopwatch]::StartNew()
Copy-Item $testFile "$env:TEMP\disktest_copy.tmp" -Force
$copyStopwatch.Stop()
$copySpeed = [math]::Round($testSize / 1MB / $copyStopwatch.Elapsed.TotalSeconds, 2)
Write-Host "✅ Копирование завершено. Скорость: $copySpeed МБ/с" -ForegroundColor Green

# Ждём завершения мониторинга
Start-Sleep -Seconds 2
Wait-Job $monitorJob | Out-Null
$monitorResult = Receive-Job $monitorJob
Remove-Job $monitorJob

# Чистимся
Remove-Item $testFile -Force -ErrorAction SilentlyContinue
Remove-Item "$env:TEMP\disktest_copy.tmp" -Force -ErrorAction SilentlyContinue

Write-Host ""
Write-Host "🏁 ИТОГОВЫЕ РЕЗУЛЬТАТЫ:" -ForegroundColor Magenta
Write-Host "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" -ForegroundColor Gray
Write-Host "📝 Запись (создание файла): $createSpeed МБ/с" -ForegroundColor White
Write-Host "📖 Чтение (100 МБ файл): $actualReadSpeed МБ/с" -ForegroundColor White
Write-Host "💾 Копирование: $copySpeed МБ/с" -ForegroundColor White
Write-Host "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" -ForegroundColor Gray

if ($monitorResult) {
Write-Host "📊 Мониторинг (среднее):" -ForegroundColor White
Write-Host " 📖 Чтение: $($monitorResult.Read) МБ/с" -ForegroundColor White
Write-Host " ✍️ Запись: $($monitorResult.Write) МБ/с" -ForegroundColor White
}

Write-Host ""
Write-Host "✅ Тест завершён!" -ForegroundColor Green
Write-Host ""
Write-Host "🔵 Нажмите любую клавишу для выхода..." -ForegroundColor Cyan
$null = $Host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")

Затем запустите и получите полную картину за 15 секунд:

118

Так же можно просто вставить весь текст скрипта прямо в PowerShell, но там не так удобно будет отображаться:

118

Что делает этот скрипт:

Создаёт файл 100 МБ — тестирует скорость записи
Запускает мониторинг в фоновом режиме
Читает файл — тестирует скорость чтения
Копирует файл — дополнительная нагрузка на запись
Показывает средние значения из мониторинга
Выводит итоговый отчёт со всеми цифрами
Не закрывает окно — результаты останутся на экране
Удаляет тестовые файлы — не мусорит на диске

Запустите один раз — получите полную диагностику диска за 15 секунд!

💬 Вопрос к вам

А какой тип диска стоит у вас как основной — NVMe, SATA SSD или до сих пор HDD? Напишите в комментах цифры из бенчмарка, интересно посмотреть, у кого какой разброс. Заодно и свою машину проверите — вдруг уже пора бить тревогу.

Теперь ты видишь, сколько места осталось и насколько быстр твой диск. Но я расскажу вещь, о которой молчат в документации: стандартный PowerShell можно ускорить в 4 раза одним файлом, который лежит у каждого сисадмина. В следующем посте я покажу свой личный профиль — с горячими клавишами, алиасами и функциями, с которыми я закрываю задачи за 10 минут вместо часа. Такие штуки в открытом доступе не лежат.

Настраиваем личный PowerShell-профиль с горячими клавишами, алиасами и функциями. Пошаговый гайд 2026 (Часть 9 из 50)Настройки Windows23 июня

Подписывайтесь, чтобы не потерять.

#PowerShell #Windows11 #Администрирование #ОптимизацияПК #Диагностика #SSD #HDD #NVMe #СкоростьДиска #СвободноеМесто #PowerShell7 #WindowsServer #СистемноеАдминистрирование #МониторингДисков #ТестСкорости #Windows25H2 #Cmdlets #СкриптыPowerShell #Производительность #ЗдоровьеДиска #SMART #Бенчмарк #IT #Сисадмин #Техподдержка #ОптимизацияWindows #Автоматизация #DevOps #Инфраструктура #Технологии #PerformanceCounters #ДисковаяПодсистема

✴️ Дорогие друзья. Если статья оказалась полезна, одна СТЕЛЛА от вас = мощная реклама для сотен людей. Поддержите контент, чтобы проблемы и решения находились быстрее! ✴️

С уважением. Александр, канал "Настройки Windows" на Яндекс.Дзен

dzen.ruPowerShell GURU | Настройки Windows | Дзен