Я, как и многие другие люди, предпочитаю иногда не выключать компьютер, а усыплять его или вводить в гибернацию. Сильно экономит время при включении.
И вот в субботу утром (ну, ладно, полпервого дня *^_^*) я проснулся от того, что кто-то включил компьютер. Не знаю для кого как, а для меня – это один из самых неприятных способов проснуться. Ещё сильнее я удивился, повернувшись лицом к проблеме и обнаружив, что никого рядом нет.
Хм… в проявление искусственного интеллекта я не верю, поэтому мне стало очень интересно, какого лешего мой компьютер самопроизвольно включился.
Начиная с Висты, консольная утилита powercfg.exe
стала просто бесценным инструментом для диагностики большинства проблем, связанных с питанием. Итак, запускаем наш любимый PowerShell:
Windows PowerShell Copyright (C) 2009 Microsoft Corporation. All rights reserved. PowerTab version 0.99 Beta 2 PowerShell TabExpansion library /\/\o\/\/ 2007 http://thePowerShellGuy.com PowerTab Tabexpansion additions enabled : True PS> powercfg -lastwake Wake History Count - 1 Wake History [0] Wake Source Count - 1 Wake Source [0] Type: Wake Timer Owner: [PROCESS] \Device\HarddiskVolume1\Windows\System32\services.exe Owner Supplied Reason: Windows will execute '\Microsoft\Windows\Media Center\mcupdate_scheduled' scheduled task that requested waking the computer.
Хмм… какого лешего ему понадобилось?
PS> $st = new-object -com('Schedule.Service') PS> $st.Connect() PS> $f = $st.GetFolder('\Microsoft\Windows\Media Center') PS> $t = $f.GetTask('mcupdate_scheduled') PS> $t.Definition.Actions Id : Type : 0 Path : %SystemRoot%\ehome\mcupdate Arguments : -crl -hms -pscn 15 WorkingDirectory :
К сожалению, быстро поменять из PS настройки нельзя (нужно пересоздавать задание, хотя все свойства доступны для записи), поэтому пришлось делать всё руками через соответствующую оснастку консоли управления :-(.
И тут возникает вопрос: а вдруг таких подлянок несколько? А между тем, в оснастке нет поиска! Ответ, как всегда, можно найти в тандеме PowerShell + MSDN:
function Find-Wakers($path) { Write-Host -NoNewline '.' Write-Output $path.GetTasks(0) | where { $_.Definition.Settings.WakeToRun } foreach ($p in $path.GetFolders(0)) { Write-Output $(Find-Wakers($p)) } } $st = new-object -com('Schedule.Service') $st.Connect() $tasks = @(Find-Wakers($st.GetFolder('\'))) Write-Host $tasks | Format-Table -Property Name,Path -AutoSize
Результат выполнения скрипта:
PS> .\Find-Wakers.ps1 ....................................................... Name Path ---- ---- StartRecording \Microsoft\Windows\Media Center\StartRecording
Добавить комментарий