🐞 Почему утилита
CheckBootSpeed ошибочно сообщает, что задание дефрагментации отключено
Такое поведение наблюдается лишь в некоторых конфигурациях. Код диагностики такой:
$DefragTask = [xml](schtasks /query /tn Microsoft\Windows\Defrag\ScheduledDefrag /xml one)
$ReadSpeed = Get-Content "$env:temp\CheckBootSpeed.tmp"
if (([int]$ReadSpeed -gt "8") -or ($($DefragTask.Task.settings.enabled) -eq "true")){
$RootCauseDetected = $false
}
else {$RootCauseDetected = $true}
ℹ️ Утилита рапортует о проблеме, если задание отключено или скорость чтения у системного диска менее 8 MB/s. Такая низкая скорость может быть
лишь у HDD, и только для них имеет
существенное значение включенное задание оптимизации
ScheduledDefrag
. Твердотельным накопителям оно шлет уже
повторные команды TRIM.
⚠️ Ошибка кроется в определении статуса задания. Пакет CheckBootSpeed я в последний раз обновлял во времена Windows 8.1, и тогда
schtasks экспортировала в XML полный набор параметров узла
Settings
, в т.ч. искомый узел
Enabled
.
В #Windows10 поведение утилиты изменилось, и она стала выводить ограниченный набор параметров 🤷♂️ В этом несложно убедиться, сравнив XML, экспортированный
schtasks, с ручным экспортом задания из планировщика или выводом появившегося в #PowerShell 3.0 (Windows 8) командлета
Export-ScheduledTask
:
Get-ScheduledTask -TaskName ScheduledDefrag | Export-ScheduledTask
Для обсуждаемой диагностики хватило бы:
(Get-ScheduledTask -TaskName ScheduledDefrag).State
Но чтобы исправить проблему, нужно приобретать недешевый сертификат для подписи кода. Овчинка выделки не стоит, поэтому я просто обновил Readme 😎 Файл я не открывал сто лет и успел забыть, что передаю там привет Проничкину :)